Сейчас на форуме: asfa, Rio (+6 невидимых)

 eXeL@B —› Вопросы новичков —› поиск хэндла файла в памяти процесса
Посл.ответ Сообщение

Ранг: 0.7 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 августа 2013 19:18
· Личное сообщение · #1

Здравствуйте!
Я новичок в деле исследований, может кто сможет помочь...
Скажите, пожалуйста, как лучше найти хэндл известного файла, открытого в процессе(из контекста текущего процесса)?



Ранг: 0.7 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 августа 2013 19:34
· Личное сообщение · #2

есть пример:
mov dword ptr [ebp-50h], 0 ; hFileDocument
SEARCH_MY_HANLDE_LOOP:
add dword ptr [ebp-50h], 4 ; hFileDocument
push 0
mov eax, [ebp-50h] ; hFileDocument
push eax
call dword ptr [esi+18h] ; GetFileSize
mov ecx, [ebp-48h] ; 24B87h (size of the dropped file)
add ecx, [ebp-4Ch] ; 10200 (offset of the dropped file)
cmp eax, ecx
jnz short SEARCH_MY_HANLDE_LOOP ; hFileDocument
вопрос: зачем смещаем ecx?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 21 августа 2013 19:43
· Личное сообщение · #3

Видимо, затем смещают, что размер файла=размеру дропаемой мути+оффсет(=размеру полезной нагрузки перед мутью). Можешь и этот кодес заюзать с брутом хендлов. А лучше скажи, зачем это всё нужно?
З.Ы. Пользуйся кнопкой "Правка", не создавай сообщения подряд.



Ранг: 0.7 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 августа 2013 19:53 · Поправил: vladimir070707
· Личное сообщение · #4

Archer, мы ведь выполняем GetFileSize, он результат кидает, как я понимаю в eax.
при неправильном формате хэндла - кидает 0xffffffff
а при положительном результате - размер файла

зная размер исходного файла делаем сравнение jnz, бъет - проходим дальше...
так а в коде - оффсет еще забит, который сбивает размер файла... это из статейки по шеллкодам взято, для ликбеза

я не пойму как из офисных файлов запускают приклеенные PE




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 21 августа 2013 19:57
· Личное сообщение · #5

Оно и видно, что из шеллкода, потому и спрашиваю, зачем нужно искать хендл открытого файла?
Не подходит тебе добавление оффсета-не добавляй, захаркодь только размер, не обязательно списывать 1 в 1, если что. В данном случае под размером забит не размер файла, а размер дропаемой мути. А файл=нагрузка+муть, отсюда и смещение.



Ранг: 0.7 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 августа 2013 20:01
· Личное сообщение · #6

Archer, а если из контекста ворда это делать, то прокатит?

если я буду двигаться вверх по стеку, то полюбому должен на хэндл наткнуться? а данном коде идем вниз...



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 21 августа 2013 20:04
· Личное сообщение · #7

vladimir070707
Сформулируйте задачу конкретно! Почему нельзя CreateFile(ZwCreateFile) перехватить и выудить хендл??



Ранг: 0.7 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 августа 2013 20:07 · Поправил: vladimir070707
· Личное сообщение · #8

ELF_7719116, код выполняется в контексте процесса и я хочу понять как мне пустить PE, приклеенный к файлу, открытому в сломанном процессе
ищу хэндл
смещаюсь
читаю
пишу в файл
запускаю

на данный момент проблема в поиске хэндла




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 21 августа 2013 20:09
· Личное сообщение · #9

Во-первых, никуда он по стеку не идёт, хотя бы разберись в этих 10 строчках, что они делают. А во-первых, сплоиты писать, как и вирусню, тут не особо поощряется.



Ранг: 0.7 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 августа 2013 20:15
· Личное сообщение · #10

Archer, ок, понял. Только не баньте )




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 22 августа 2013 14:03
· Личное сообщение · #11

> как лучше найти хэндл известного файла

А что про фаел известно, имя ?

Перечислить хэндлы и для каждого имя получить. NtQueryObject. Оминь.



Ранг: 19.7 (новичок), 14thx
Активность: 0.030
Статус: Участник

Создано: 22 августа 2013 14:44 · Поправил: Phantom007
· Личное сообщение · #12

vladimir070707
Вот код на делфи, который ищет хэндл файла в своем процессе.
--> Link <--




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 23 августа 2013 12:21
· Личное сообщение · #13

EnumHandles proto ObjectTypeName:PSTR, ObjectTypeNameLength:ULONG, ProcessId:HANDLE, Callback:PVOID, Context:PVOID

Возвращает NTSTATUS. Пример вызова:

Clbk proc uses ebx esi edi Handle:HANDLE, Context:PVOID
Local Buffer[MAX_PATH]:CHAR
invoke ZwQueryObject, Handle, ObjectNameInformation, addr Buffer, MAX_PATH, NULL
.if !Eax
invoke DbgPrint, addr $Msg, addr Buffer
.endif
mov eax,STATUS_NOT_FOUND ; STATUS_SUCCESS для прекращения енума.
ret
Clbk endp

$Ob CHAR "File"

invoke QueryObjectNameTypeNumber, addr $Ob, 4, fs:[TEB.Cid.UniqueProcess], addr Clbk, 123H

---
Вы же не скрипткидди, изучайте бинарь http://yadi.sk/d/dtKKD7up8EGcw



Ранг: 145.8 (ветеран), 190thx
Активность: 0.140.36
Статус: Участник

Создано: 23 августа 2013 12:56
· Личное сообщение · #14

vladimir070707

1) Перечислить описатели NtQuerySystemInformation, инфо класс 16
2) Выделить среди них те, что принадлежат искомому процессу по полю ProcessId, SYSTEM_HANDLE_TABLE_ENTRY_INFO структуры
3) Выделить среди них те, что имеют тип "File", можно по индексу (ObjectTypeNumber), можно по имени типа
4) Скопировать описатель себе через DuplicateHandle
5) Получить имя по описателю через GetFinalPathNameByHandle

Так или решение задачи потребует использование недокументированного API. Можете конечно набрутить описатель файла циклом и потом их сунуть в 4-5 пункты.

Dr0p

Очередной быдлокод с потенциальным дедлоком и привязкой к оси. Даже не думай возражать.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 23 августа 2013 12:59 · Поправил: Dr0p
· Личное сообщение · #15

Alchemistry

Какие есчо дедлоки умник. И к какой оси привязка не понятно

> Можете конечно набрутить описатель файла циклом и потом их сунуть в 4-5 пункты.

Он так и делает.

> GetFinalPathNameByHandle

Обломись ниже 6.0.

> недокументированного API.

Документировано в "NT Object Management Specification". Рекомендую на каникулах почитать



Ранг: 0.7 (гость)
Активность: 0.010
Статус: Участник

Создано: 23 августа 2013 17:11
· Личное сообщение · #16

Dr0pAlchemistryPhantom007Archer

Спасибо Вам огромное за помощь! Брут отлично работает, через GetFileSize.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 24 августа 2013 09:53
· Личное сообщение · #17

Раз решено, а частично переехало и в другой топик, то закрыто.
З.Ы. Для Спасиб тут отдельная кнопка есть под потом, Полезное сообщение зовётся.


 eXeL@B —› Вопросы новичков —› поиск хэндла файла в памяти процесса
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати