eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: LoxmatbIj (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

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

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

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

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

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

Создано: 21 августа 2013 19:34 New!
Цитата · Личное сообщение · #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?


Ранг: 1986.7 (!!!!)
Статус: Модератор
retired

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

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

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

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

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

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

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


Ранг: 1986.7 (!!!!)
Статус: Модератор
retired

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

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

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

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

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

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

Ранг: 377.9 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

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

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

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

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

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

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


Ранг: 1986.7 (!!!!)
Статус: Модератор
retired

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

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

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

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

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


Ранг: 72.3 (постоянный)
Статус: Участник

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

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

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

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

Ранг: 19.7 (новичок)
Статус: Участник

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

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


Ранг: 72.3 (постоянный)
Статус: Участник

Создано: 23 августа 2013 12:21 New!
Цитата · Личное сообщение · #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

Ранг: 126.1 (ветеран)
Статус: Участник

Создано: 23 августа 2013 12:56 New!
Цитата · Личное сообщение · #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 (постоянный)
Статус: Участник

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

Alchemistry

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

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

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

> GetFinalPathNameByHandle

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

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

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

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

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

Dr0pAlchemistryPhantom007Archer

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


Ранг: 1986.7 (!!!!)
Статус: Модератор
retired

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

Раз решено, а частично переехало и в другой топик, то закрыто.
З.Ы. Для Спасиб тут отдельная кнопка есть под потом, Полезное сообщение зовётся.
 eXeL@B —› Вопросы новичков —› поиск хэндла файла в памяти процесса
Эта тема закрыта. Ответы больше не принимаются.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS