Реконструирование IDA.WLL
Чтобы откорректировать IDA.WLL, сначала необходимо получить файл в расшифрованном виде. Для этого понадобятся IceDump, ProcDump и Ваш шестнадцатеричный редактор. Изучением этой методики мы сейчас и займемся.
Запустите IDA и дождитесь появления информационного окна. Переключитесь на адресный контекст IDA с помощью команды 'addr idag'. Установите контрольную точку 'bpmb 8:10001000 x', в результате чего исполнение IDA.WLL остановится на "расшифрованной" точке входа. Просмотрите в ProcDump'е PE структуру - базовый адрес 1000000, длина ac000 (base address 1000000 length ac000). Выйдите из IDA и запустите ее снова; пропустите первое прерывание по адресу 10001000, и позвольте программе доработать до второго прерывания в этой точке. К данному моменту все будет уже расшифровано, и содержимое памяти может быть сброшено в файл, для чего выполните команду 'pagein d 10000000 ac000 c:\temp\ida.dmp'.
Теперь с помощью ProcDump'а нужно откорректировать PE-заголовок при следующих включенных возможностях:
recompute object size -- (пересчитать размер)
optimize pe structure -- (оптимизировать структуру PE)
check header sections -- (проверить заголовочные секции)
rebuild header -- (восстановить заголовок)
use actual import infos -- (использовать фактическую информацию импорта)
Секцию импорта нам придется восстанавливать вручную (я выполнил такое восстановление достаточно быстро, копируя и вставляя информацию в шестнадцатеричном редакторе), используя структуру таблицы импорта PE. Вы сможете найти таблицу импорта с помощью ProcDump'а и вычислить смещения - почитайте документацию по PE. Ниже приведен фрагмент оригинального IDA.WLL: