Автор: FEUERRADER <feuerrader@nm.ru>
Программа: Screenshot Utility 1.0 Размер: 294400 байт Язык: Borland Delphi 5.0 [PEiD+DeDe] Защита: только ASProtect. Триал 30 дней. Цель: распаковка и взлом Инструменты: SoftICE+IceDUMP PEditor 1.7 by Y0da PEiD 0.8 ImpREC 1.41+plugins ExeScope 6.30 необязат.-> ASProtect 1.23 RC1, пример Trial из ASProtect 1.2 прямые руки
Вступление: вот и добрались до распаковки нового Аспротекта. Сразу оговорюсь, что всё, что будет написано ниже - не относится ко всем прогам, защищенным ASProtect[New Strain]. Существует достаточно много модификаций ASProtect, которые различаются по способу криптования.
Начинаем: сначала снимаем дамп. Будем пользоваться альтернативным способом распаковки (о способах читайте в другой моей статье). Соберем инфо о нашей цели: ImageBase=400000, SizeOfImage=A5000.
А теперь делаем такую вещь: смотрим на SU (Screenshot Utility) в PEiD. Выбираем в нем Menu->OEP Module. И наш ОЕР=4742C8. Поверим PEiD, что это наш ОЕР. Теперь ставим бряк :bpx GetProcAddress. Это нужно лишь чтобы прерватся в нашей проге. Также можно воспользоваться способом Break&Enter в LordPE. Пускаем прогу и прерываемся. Делаем :BC* и ставим очень классную штуку :BPR 4742C8 4742C8+1 R IF(EIP==4742C8). F5. Ждем чуть-чуть и прерываемся на нашем ОЕР! Можно теперь и снять дамп. Делаем так: /dump 400000 A5000 c:\dump.exe.
Правка дампа: открываем дамп в PEditor 1.7 by Y0da. Выбираем Sections и на секциях rsrc, .data (возможно тут лежат ресурсы) делаем Dumpfixer (правая кнопка на секции). Можно прописать ОЕР, но у нас потом его ImpREC пропишет (если в его опциях стоит такая галочка).
Восстанавливаем импорт: пускаем ImpREC и нашу закриптованную прогу. Выбираем ее из списка. Прописываем ОЕР и жмем IAT AutoSearch, ОК, потом Get Imports. Видим импорт наполовину долбленный. Жмем Auto trace. Ждем... Теперь Show Invalid и видим что несколько адресов не восстановились. Щелкаем на них правой кнопкой и выбираем плагин ASProtect 1.2x, который нужно было сделать по статье Egoist[TSRh]. У кого нет, найдите в сети. Стандартный плагин по эмуляции АСПротекта unresolved адреса НЕ ВОССТАНОВИТ, т.к. был предназначен для восстановления старых версий АСПРа.
Итак, плагин восстановил все адреса, кроме одного. Видим, что не восстановилось тут:
1 000782C0 kernel32.dll 0260 MultiByteToWideChar 1 000782C4 kernel32.dll 025F MulDiv 0 000782C8 ? 0000 011413B4 <--Вот это!! 1 000782CC kernel32.dll 023E LoadResource 1 000782D0 kernel32.dll 0239 LoadLibraryA
Если отрезать этот больной адрес и привинтить такой импорт к дампу, то прога будет ссылаться на этот адрес 11413B4 и откажется действовать. Чтобы обнаружить этот адрес, я сделал по-хитрому. В пакете с ASProtect 1.2 лежат примеры. Я скомпилировал пример Trial на Дельфи (т.к. SU сделан на Дельфи) и защитил ASProtect 1.23 RC1. Теперь по такой же схеме узнал его ОЕР и полез в Imprec. Там тоже не восстановился именно ЭТОТ адрес! Но в данном случае есть оригинальная программа! Запустим тот пример Trial, что НЕ защищен ASProtect. Восстановим у него импорт и видим в том самом месте, где у нас был unresolved:
1 000A616C kernel32.dll 0260 MultiByteToWideChar 1 000A6170 kernel32.dll 025F MulDiv 1 000A6174 kernel32.dll 024C LockResource <--Это же он!! 1 000A6178 kernel32.dll 023E LoadResource 1 000A617C kernel32.dll 0239 LoadLibraryA
Это значит LockResource.
Всё ясно, в импорте нашей проги левой кнопкой щелкаем на этом адресе 11413B4. Выйдет окошко, где выберем библиотеку kernel32.dll и LockResource из списка. Теперь жмем Fix Dump с оставленной галочкой на Add New Section. Привинтили импорт. Попробуйте запустить прогу, она запускается, хотя мы еще не восстановили API ASProtect!!!
Осмотр: видим, что вылазит наг и в меню есть пункт "Register...". Надо от всего этого избавится. Но Вы спросите: "Окна уберем, но триал то останется и потом прога откажет!". К моему удивлению триал вообще "замерз". Я покрутил время, он не меняется. Я не знаю, может он в последствии изменится, но пока вроде так.
Действия: избавимся от нага. Я трассировал по F10 код, до того момента, пока не вылезет этот наг. В отладчике я не выполнил Call, который вызывал наг и всё стало нормально. Было это тут:
:00473FB5 mov eax, [eax] :00473FB7 mov edx, [eax] :00473FB9 call dword ptr [edx+$00D8] :00473FBF mov eax, dword ptr [$47677C] :00473FC4 mov eax, [eax]
Просто NOPим call по адресу 473FB9 и нага больше нет. Остался пункт popup-меню. Будем юзать EXEScope. В отличие от Ресторатора и РесХакера, он не трогает того, что не надо. Открываем RCData->TMainForm. Ищем наш пункт меню:
object RegMe: TMenuItem Caption = 'Register...' OnClick = RegMeClick end
Удаляем этот текст и сохраним все изменения. Потестируйте программу. Всё, теперь она готова к нормальной эксплуатации :)
Заключение: как видите всё вышло довольно легко, но не обольщайтесь, здесь просто автор программы понадеялся на раскрученность "аппарата Солодовникова" :)
Материалы находятся на сайте http://cracklab.narod.ru/doc/