Дизассемблер своими руками GPcH (www.dotfix.net) Хакер, номер #078, стр. 078-114-5 [тестовый проект] ; путь к файлу придется поменять include 'C:\ASm\fasm\INCLUDE\win32ax.inc' .data Serial db 'Some program',0 _MsgCaption db 'Disasm this',0 .code start: ;вывод сообщения на экран push 0 push Serial push _MsgCaption push 0 call MessageBox ;выход из программы push 0 call ExitProcess ;установим конец процедуры, чтобы наш дизассемблер не сдох retn .end start Программа простенькая — выведет сообщение в виде MessageBox’а и выйдет. Но нам и этого достаточно, чтобы понять, работает ли дизассембер. В результате компилирования этого тестового проекта должен получиться EXE-файл размером 2 Кб (да, дельфям до ассемблера в этом плане далеко). Его-то мы и скормим нашему детищу. Запускай только что написанный дизассемблер. Вводи в одно текстовое поле путь к тестовому проекту, а в другое — адрес точки входа: 1024 (400h). В простеньких ассемблерных прогах точка входа обычно располагается в начале секции, смещение которого часто равно именно 400h. Конечно, надо ковырять PE-заголовок файла, чтобы получить точное смещение, а не писать его от балды, но с этим, думаю, ты справишься сам. Жми теперь любую из кнопок и смотри, что появилось в Memo. 0011fb5c push 0 0011fb5e push $40100d 0011fb63 push $401000 0011fb68 push 0 0011fb6a call dword ptr [$40307a] 0011fb70 push 0 0011fb72 call dword ptr [$40305c] 0011fb78 ret Подобный листинг означает, что все работает правильно. Значения $40307a и $40305c — это адреса ячеек MessageBox и ExitProcess в таблице импорта. $40100d и $401000 — наши данные. Конечно, с адресами этими получается не очень красиво, но кто тебе мешает улучшить нашу прогу? Добавить, скажем, анализатор PE-заголовков и таблицы импорта, который брал бы имена API и подставлял вместо адресов. Вместо нашей функции Disasm можно написать нормальную, которая дизассемблировала бы весь файл, а не только до первого ret’а. Улучшать наш дизассемблер можно до бесконечности, и это очень легко. Главное — иметь желание и фантазию. А с этим, надеюсь, у тебя проблем нет. CD На диске лежит исходник нашего дизассемблера, тестовый проект, набор компонентов madCollection, исходник DeDe и ассемблер Fasm. Пользуйся! INFO Если ты интересуешься дизассемблированием, то массу полезной информации ты сможешь найти на www.wasm.ru. Особенно рекомендую статью Криса Касперски «Дизассемблирование в уме». |