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

 eXeL@B —› Вопросы новичков —› ImpRec. Принципы работы.
Посл.ответ Сообщение

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

Создано: 10 апреля 2009 16:02
· Личное сообщение · #1

Постил на васм, но думаю там ответа так и не дождусь. Вобщем хочется поинтересоваться как работает ImpRec. Как определяется адрес IAT исходя из OEP? Мне представляется, что после нажатия на кнопку Get Imports просходит сканирование от OEP и поиск инструкций вида CALL DWORD PTR [XXX] либо CALL YYY;JMP DWORD PTR [XXX]. После нахождения хотя бы одного такого вызова для конкретной DLL можно видеть, адрес внутри IAT найден, а т.к. все IMAGE_THUNK_DATA's в теории должны быть смежными, чтобы не разбухивать размер, то банально пройдясь вверх по адресам, проверяя определенные условия можно получить начало IAT. Размер можно получить также сканируя по адресам вверх и сравнивая определенные условия. Условиями могут быть принадлежность DWORD выделенному адресу процесса или просто возможность чтения-записи. Валидность импорта может определяться исходя из самих адресов и сравнением их с экспортом модулей загруженных в адресное пространство процесса. Get API Calls тоже понятно - сканирование определенных по переходам/аттрибутам регионов кода и получение всех CALL [XXX]/CALL XXX инструкций и их анализ как было описано выше. Интересуют опции Trace Level X. Зачем вообще нужна трассировка. Я понимаю, что для анализа невалидных найденных вхождений, но как это работает? Что делает каждый из уровней трассировки? Спасибо.




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

Создано: 10 апреля 2009 18:58
· Личное сообщение · #2

Трассировка там разная, иногда просто дизасмом в статике, иногда через TF, она же пошаговая отладка. Если импорт перенаправлен, пытается (хотя и весьма слабо) найти всё же реальную функцию-для этого и нужно. Остальное тебе представляется примерно правильно. Есть сорцы версии 1.4.2, можешь их ещё поглядеть.



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

Создано: 11 апреля 2009 01:10
· Личное сообщение · #3

Я так понимаю проты и пакеры чтобы затруднить восстановление импорта делают вложенные переходы, т.е. запись на функцию в IAT не сразу получается как обычно, а может быть через цепочку. Такая же идея и с вызовами API. Т.е. было CALL [EAX] ; GetWindow, а стало
CALL [EAX]; -> <мусор> CALL [GetWindow].

Правильно? Подскажите еще пожалуйста примеры пакеров, которые так делают.




Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 11 апреля 2009 08:28
· Личное сообщение · #4

BlackParrot пишет:
Т.е. было CALL [EAX] ; GetWindow, а стало
CALL [EAX]; -> <мусор> CALL [GetWindow].

Бывает и так, что API-функция копируется полностью в выделенную область памяти и ее код обрабатывается самим протом. Это мера противодействия распознаванием импорта ImpRec, приходится восстанавливать импорт вручную или писать скрипт. Таким образом поступают не так уж мало протов.
Вот здесь почитай. Там статьи касающиеся восстановления импорта, добавлению нового импорта в существующие проги и общие вопросы относительно работы импорта в PE файлах.

-----
Программист SkyNet




Ранг: 39.0 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 12 апреля 2009 20:48
· Личное сообщение · #5

FrenFolio дал ссылку на интересные статьи. Они на английском. Лично мне неудобно читать английский текст, и я решил перевести для себя одну из этих статей (www.tuts4you.com/download.php?view.196). Может кому надо... (в аттаче)

41ce_12.04.2009_CRACKLAB.rU.tgz - IMPFIX_перевод.TXT


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


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