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

Защити себя сам

Денис Колисниченко

Спецвыпуск: Хакер, номер #053, стр. 053-028-3


- метаморфическое преобразование кода программы, позволяющее защитить программу от дизассемблирования и модификации;

- защита ключом отдельных участков кода программы (поддерживается только в зарегистрированной версии);

- полное разрушение логики защищенных фрагментов кода, не позволяющее анализировать программу с помощью дизассемблера или отладчика;

- обнаружение и противодействие отладчикам SoftIce, NtIce, TD и др.;

- защита точки входа;

- защита от модификации кода;

- защищенная работа с реестром, не позволяющая программам вроде RegMon определить, к какому ключу реестра обращается твоя программа;

- технология "динамического импорта", которая разрушает имена всех импортируемых функций, а также не использует функцию GetProcAddress;

- сжатие ресурсов и исполнимого кода приложения;

- поддержка коротких серийных номеров (12 символов);

- поддержка внешнего генератора серийных номеров с OLE/DLL-интерфейсом;

- технология OneTouch Trial (о ней читай ниже).

EXECryptor позволяет защитить любое 32-разрядное PE-приложение (.exe, .dll, .bpl, .vxd, .wdm). Программа тестировалась с операционными системами W9x/ME/NT/XP/2003. Кстати, доступно SDK для Delphi, C++ Builder, MSVC и MSVB.

А теперь поговорим подробнее о некоторых функциях программы. Самое главное, что нас интересует – это метаморфическое преобразование кода программы и поддержка серийных номеров. Метаморфическое кодирование позволяет изменить код твоей программы до неузнаваемости и запутать отладчик и человека, который запустил этот отладчик. После такого у этого человека сразу пропадет желание взламывать твою программу. Смотри, вот исходный код оператора, выводящего строку:

Листинг

writeln('Test OK');

Вот что получается после компиляции:

Листинг

mov eax, [$004092ec]

mov edx, $00408db4

call @WriteOLSTring

call @Writeln

call @_IOTest

Даже человеку, не особо знакомому с процессом дизассемблирования, понятно, что сейчас происходит – выводится какая-то строка. А теперь применим к тем четырем строчкам метаморфическое преобразование кода:

Листинг

xchg [edi],dl

db 3

add al,$30

xlat

call +$0000025b2

jmp +$00000eec

call +$00000941

or al,$4a

scads

call -$304ffbe9

rol eax,$14

mov edi,[ebx]

jmp +$000001738

mov ebx,eax

shr ebx,$03

push ebx

jmp +$00001b5e

call -$000001e8

jmp +$00003203

jmp +$00005df8

call +$000000910

adc dh,ah

fmul st(7)

adc [eax],al

les eax,[ecx+$0118bfc0]

stosb

Полный список составляют более 500 инструкций. Попробуй разобраться, что тут к чему. К тому же не упоминается ни одно название функции, как в предыдущем примере.

Практика

Хватит слов, на конкретном примере попробуем защитить произвольную программу. Для этого я написал небольшую программку на Delphi - test.exe. Нажимаем кнопку Project в окне EXECryptor, выбираем New, вводим имя проекта и сохраняемся. После этого сразу переходим в раздел Options. На закладке General Settings вводим основные параметры проекта – имя исходного exe-файла и защищенного exe-файла. Параметры защиты кода программы находятся на закладке Protection Options.

Назад на стр. 053-028-2  Содержание  Вперед на стр. 053-028-4