Основной способ распаковки ASPack 2.000-2.12

Перейти на главную страницу, индексную страницу.


Автор: 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, а распаковать - ничего не стоит. Но тут нужно учесть, что это не криптор, а простой сжиматель-упаковщик!

Спасибо за интерес к этой статье!



Все права защищены ©  2003 


Комментарий Bad_guy'я: замечательная статья, хоть и небольшая, а замечательная... Многие уже давно списали ProcDump со счетов: нет обновлений - не будем юзать, а ведь система поддержки скриптов в нем весьма хороша, что и доказывается в данной статье, и можно не имея всех распаковщиков для каждого из упаковщиков пользоваться одним лишь ProcDump'ом, написав однажды скрипт.
Начинающим крэкерам, кстати говоря, весьма полезно изучить ручную распаковку одного пакера, ведь зная подходы к ручной распаковке любого из пакеров другой распаковать будет очень легко. Те же ASPack, PECompact, UPX ничем принципиально не отличаются и ловить место прыжка на распакованный оригинал в них можно аналогично тому, как описано в данной статье.


Материалы находятся на сайте http://cracklab.narod.ru/doc/






Hosted by uCoz