Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #78, ИЮНЬ 2005 г.

Дизассемблер своими руками

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. Особенно рекомендую статью Криса Касперски «Дизассемблирование в уме».

Назад на стр. 078-114-4  Содержание