Автор: FEUERRADER <feuerrader@nm.ru>
Цель: ручная и автоматическая распаковка ASPack Инструменты: SoftIce 4.05 + IceDump, ProcDump 1.6.2, HiEW 6.x.
Введение в курс: я уже писал о том, как распаковать ASPack 2.12 используя команду /tracex из IceDump. Но это лишь побочный способ и не самый рациональный. Основным способом же, я считаю является описанный ниже.
Действия: выбираем нашу цель для распаковки. Я опять игрался с CommandLine95. Открываем прогу в Hiew и ищем такие байты: 61 75 08 B8 01 00. То есть такой код:
61 POPAD 7508 JNZ xxxxxxxx B801000000 MOV EAX, 00000001 C20C00 RET 6880xxxxxxx PUSH OEP C3 RET
В ASPack 2.1 и ниже в 6880xxxxxxx идет push на ОЕР, где ОЕР явно указано. Но уже в ASPack 2.12 - PUSH 00000000 и ОЕР в это место генерится в памяти. Теперь запоминаем это место в Hiew (адрес POPAD), запускаем SoftIce+IceDump и пишем :bpx GetProcAddress. Это нужно для того, чтобы просто прерваться в нашей проге; для этого, жмем F12 и если там не наша прога, то жмем F5. Всё, видим, что указана наша прога. Теперь делаем :bc* и ставим :bpmb "адрес_popad" x, F5. Теперь прога прерывается в нужном нам месте.
016F:004113AF POPAD 016F:004113B0 JNZ 004113BA 016F:004113B2 MOV EAX,00000001 016F:004113B7 RET 000C 016F:004113BA PUSH 00403FF0 016F:004113BF RET
Трассируем по F8 до 4113BF и выполняем ret. Теперь EIP=OEP. Теперь можно дампить. Делаем так: /dump 400000 14000 c:\dump.exe или можно этот ret превратить в JMP EIP, то есть зациклить и снять дамп с помощью LordPE. Дампу осталось сделать dumpfixer и всё. На этом ручная распаковка может считаться оконченной.
Автораспаковщик: итак, когда мы знаем, что во всех прогах используется один и тот же набор байт, то можно создать распаковщик, который будет останавливаться в нужном месте и снимать дамп. Но зачем писать его самим, он уже есть. Я не говорю о ASPackDie, я говорю о ProcDump! Какие же скрипты есть у ProcDump'a для распаковки ASPack? Последняя версия скрипта расчитана на ASPack 2.000. Эта версия подходит под этот способ! Можно использовать этот скрипт для распаковки ASPack 2.000-2.12. Но давайте добавим к ProcDump свой скрипт по распак0вке именно ASpack 2.12.
Открываем script.ini из папки ProcDump. Ищем секцию [INDEX], где собрано описание всех скриптов-распаковщиков. Добавляем туда: Pxx=Aspack 2.12. Создаем свою секцию:
[Aspack 2.12] L1=OBJR L2=LOOK 61,75,08,B8,01,00 L3=JZ 4 L4=QUIT L5=BP L6=STEP OPTL1=00000000 OPTL2=01010001 OPTL3=01010001 OPTL4=00030000 OPTL5=00000000
Работа этого скрипта проверялась на многих прогах (System Mechanic, CheMax...) и везде проявила себя отлично.
Выводы: вроде бы разрекламированный паковщик этот ASPack, а распаковать - ничего не стоит. Но тут нужно учесть, что это не криптор, а простой сжиматель-упаковщик!
Спасибо за интерес к этой статье!
Материалы находятся на сайте http://cracklab.narod.ru/doc/