20.01.2015 Views

ИюНь - Xakep Online

ИюНь - Xakep Online

ИюНь - Xakep Online

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

взлом<br />

Леонид «Cr@wler» Исупов<br />

/ crawlerhack@rambler.ru /<br />

борона<br />

POCKET<br />

EXECUTABLE<br />

Программная<br />

оборона<br />

Защита PE-файлов голыми руками<br />

Десять лет назад, когда инструменты для дизассемблирования еще не были так легки<br />

в эксплуатации и распространены, реверс-инжиниринг не был массовым явлением.<br />

Сейчас же любой среднестатистический юзер, воспользовавшись отладчиком, может<br />

распотрошить внутренности твоей программы и узнать, как работают созданные тобой<br />

защитные механизмы. Этого нельзя допустить. Значит, нужно учиться создавать методы,<br />

затрудняющие анализ.<br />

борона<br />

C<br />

/ 078<br />

егодня мы поговорим о том, как вручную закодировать файл,<br />

имея под рукой только отладчик и шестнадцатеричный<br />

редактор. Навыки, которые ты получишь в ходе прочтения<br />

этого материала, помогут тебе понять принцип работы<br />

протекторов и пакеров. Одновременно ты научишься вручную править<br />

двоичный код так, чтобы он оставался работоспособным, не имея под<br />

рукой толстых томов, посвященных программированию на ассемблере.<br />

Для нашей работы потребуется известная версия компилятора MASM<br />

— MASM32. Мы напишем простейший код, результатом работы которого<br />

будет выдача MessageBox’а с надписью «Hello, World!». Исследовав<br />

скомпилированный файл под отладчиком (а он может быть любым, я<br />

использовал OllyDBG), мы посмотрим, как можно создать простейший<br />

раскодировщик, используя прямые вставки двоичного кода.<br />

Наша программа<br />

Итак, приступим к работе. Вот код нашей программы:<br />

.386<br />

.model flat,stdcall ; модель памяти — flat<br />

option casemap:none<br />

; подключение необходимых библиотек:<br />

include \masm32\include\windows.inc ;<br />

include \masm32\include\kernel32.inc ;<br />

includelib \masm32\lib\kernel32.lib ;<br />

include \masm32\include\user32.inc ;<br />

includelib \masm32\lib\user32.lib ;<br />

; секция данных<br />

.data<br />

alert_upper db "Simply program",0<br />

alert_text db "Hello, World!",0<br />

; секция кода<br />

.code<br />

start:<br />

invoke MessageBox, NULL, addr alert_text, addr<br />

alert_upper, MB_OK<br />

invoke ExitProcess, NULL<br />

end start<br />

Сохрани текст в файле c:\masm32\bin\ex.asm (разумеется, если путь к<br />

компилятору другой, то вместо c:\masm32 будет что-то иное) и создай<br />

xàêåð 06 /102/ 07

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!