Защити себя сам Денис Колисниченко Спецвыпуск: Хакер, номер #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. |