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

 eXeL@B —› Программирование —› API hook в пакованных файлах
Посл.ответ Сообщение

Ранг: 12.9 (новичок)
Активность: 0=0
Статус: Участник

Создано: 17 мая 2006 12:28
· Личное сообщение · #1

В моей программе используется DLL-injecting api hook для перехвата n-го количества функций во всех процессах. Делается это функцией ReplaceIATEntryInOneMod() из Рихтера, точнее адаптированный вариант взятый с rsdn.ru http://www.rsdn.ru/article/baseserv/apicallsintercepting.xml .

С программами, которые запакованы, данный метод не работает, и понятно почему - искаженная/обрезанная/неоригинальная таблица импорта. Там просто нет этих функций.
Можно выполнять перехват не в момент загрузки приложения, а в другой момент, когда пакер отработал.
Но, мне кажется, это нереально для любого пакера, даже еще не существующего, уметь вычислить OEP и далее восстановить таблицу импорта и пропатчить ее... А если это не пакер, а протектор...

Подскажите, пожалуйста, как можно решить эту проблему, кроме выше написанного варианта.

PS: GetProcAddress перехватывается нормально.



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 17 мая 2006 12:49
· Личное сообщение · #2

перехватывать Native API



Ранг: 12.9 (новичок)
Активность: 0=0
Статус: Участник

Создано: 17 мая 2006 12:50
· Личное сообщение · #3

Asterix
Через драйвер? Этот вариант всегда остается как запасной.

А что по поводу DLL-injecting? Никак?



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 17 мая 2006 13:07
· Личное сообщение · #4

нет, не через дравер
в импорте kernel32.dll например



Ранг: 64.6 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 17 мая 2006 13:48
· Личное сообщение · #5

Можно фильтровать вызовы GetProcAddress коректирую возвращаемые адреса пакеру. Таким образом пакер самостоятельно настроит таблицу импорта жертвы как тебе нужно. И кстати, стоит перехватывать GetProcAddress хотя бы в середине kernel32.dll.



Ранг: 228.7 (наставник), 2thx
Активность: 0.120
Статус: Участник
malware research

Создано: 17 мая 2006 15:16 · Поправил: Error_Log
· Личное сообщение · #6

Python
Сходи на www.wasm.ru www.wasm.ru и почитай там статью Ms-Rem про перехват АПИ функций. В случае с пакованной прогой можно использовать метод сплайсинга функции, например.

-----
Research is my purpose




Ранг: 12.9 (новичок)
Активность: 0=0
Статус: Участник

Создано: 17 мая 2006 15:34
· Личное сообщение · #7

Asterix
Zw-функции перехватываются, не понял почему, но спасибо за подсказку ;)

Step
Так и было изначально, мой GetProcAddress подсовывал мои адреса. Только видимо пакер не использует GetProcAddress...

Error_Log
Был, читал. Еще раз пройдусь.



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 17 мая 2006 16:50
· Личное сообщение · #8

Тоже вопрос по перехвату. Как сделать переход на себя, и уложиться при этом в 7 байт.
Переход должен быть примерно такого вида:

mov reg,index
call stub

index - индекс в массиве с информацией о перехватываемой функции. Можно не mov reg,index а что либо другое, только чтобы я смог получить его в функции обраротчике.

Можно сделать так:
call stub

и по адресу возврата судить о том из какой функции нас вызвали, но тогда придётся создавать таблицу соответствий адрес возврвта-вызывающая функция, и при каждом вызове искать в ней, что будет тормозить(будет-ли? сильно?).

Можно сделать так:
mov ax,index
call stub
но боюсь в сложных программах не хватит индексов

7 баит - самая маленькая функция, которую я пока встретил - KiIntSystemCall. Кто нибудь встречал меньше?



Ранг: 12.9 (новичок)
Активность: 0=0
Статус: Участник

Создано: 17 мая 2006 20:48
· Личное сообщение · #9

Python пишет:
Asterix
Zw-функции перехватываются, не понял почему

Ну конечно! Программа же проходится по всем модулям, в т.ч. и kernel32.dll, поэтому перехват и работает!
Еще раз спасибо! ;)

(ушел глубоко в отладку)



Ранг: 160.9 (ветеран), 1thx
Активность: 0.050
Статус: Участник

Создано: 17 мая 2006 22:50
· Личное сообщение · #10

Вот тебе мой пример перехвата Native API провозился первый раз долго при создание но там вроде все понятно. wasm.ru/forum/action=vthread&forum=23&topic=13329


 eXeL@B —› Программирование —› API hook в пакованных файлах
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати