Rambler's
Top100

Один из способов ручной распаковки ASPack 2.12

Автор: FEUERRADER
Дата: 24.05.2003
Раздел: Reverse Engineering


       Цель: распаковка ASPack 2.12
Инструменты: SoftIce 4.05 + IceDump, PEditor 1.7 by Y0da

Вступление: описываемый ниже способ ручной распаковки файлов, пакованных ASPack, подходит для версий 2.1-2.12 (может и еще раннее). Сразу же оговорюсь, что описываемый способ взят из иностранных источников (автор Amois). Для всеобщего удобства я перевел статью на родной язык, чтобы все желающие могли воспользоваться этим способом.

Сбор информации: в виде подопытного кролика использовался Command Line95. Запаковываем его ASPack 2.12. Теперь открываем уже пакованный ЕХЕ в PEditor 1.7. Смотрим:
  ImageBase=00400000
SizeOfImage=00014000
Открываем Sections. Если автор проги умышленно затер названия секций, определите на глаз idata. Запоминаем ее VirtualOffset=000C000. Теперь запоминаем VirtualOffset первых двух секций:
1 секция. VirtualOffset=00001000
2 секция. VirtualOffset=00008000
Пока больше ничего не надо.

Поиск ОЕР: активируем SoftIce и ICEDUMP. Делаем :bpx GetProcAddress. Запускаем пакованную прогу. Прерываемся. Делаем d "VirtualOffset_idata", т.е. :d 40C000. Не забывая ко всем адресам из заголовка прибавлять ImageBase.

0030:0040C000 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ................
0030:0040C010 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ................
0030:0040C020 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ................
0030:0040C030 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ................
0030:0040C040 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ................
0030:0040C050 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ................
0030:0040C060 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ................
0030:0040C070 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ................

Теперь нажимаем F11, пока в памяти не уберутся "?? ?? ?? ??", т.е. ждем пока idata распакуется.

0030:0040C000 6C C0 00 00 00 00 00 00-00 00 00 00 00 C4 00 00  l...............
0030:0040C010 E0 C1 00 00 64 C1 00 00-00 00 00 00 00 00 00 00  ....d...........
0030:0040C020 D8 C5 00 00 D8 C2 00 00-64 C0 00 00 00 00 00 00  ........d.......
0030:0040C030 00 00 00 00 F6 C5 00 00-D8 C1 00 00 5C C1 00 00  ............\...
0030:0040C040 00 00 00 00 00 00 00 00-14 C6 00 00 D0 C2 00 00  ................
0030:0040C050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
0030:0040C060 00 00 00 00 E4 C5 00 00-00 00 00 00 96 C3 00 00  ................
0030:0040C070 A4 C3 00 00 68 C3 00 00-CC C3 00 00 D6 C3 00 00  ....h...........

Как только видим, что распаковалось, делаем :bpm "VirtualOffset_idata", т.е :bpm 40C000. F5. BC*. Будем искать при помощи магической команды /tracex. Но ее главный недостаток - низкая скорость. Если программа больше 1Мб, ее выполнение может быть до 10 минут. Пишем /tracex "VirtualOffset_1секции" "VirtualOffset_2секции", т.е. /tracex 401000 408000. А теперь самое утомительное, однако самое важное - ждать исполнения! О, выпрыгнул SoftIce. Смотрим, где стоит EIP=403FF0.

016F:00403FF0  MOV       EAX,FS:[00000000]
016F:00403FF6  PUSH      EBP
016F:00403FF7  MOV       EBP,ESP
016F:00403FF9  PUSH      FF

Теперь 403FF0 - это наш OEP. Снимем дамп: /dump 400000 14000 c:\dump.exe.

Испрвляем дамп: открываем дамп в PEditor 1.7. Исправляем EntryPoint на 0003FF0. Открываем Sections. На секции .rsrc (а можно и на всех секциях!) делаем DumpFixer (RawOffset=VirtualOffset & RawSize=VirtualSize). Теперь у файла появилась иконка. Запускаем дамп. Работает!

Восстанавливаем импорт: когда мы снимали дамп, то перед этим дождались, когда распакуется секция idata. А в ней уже содержался нормальный импорт, который в последствии влился в дамп. Поэтому восстановление импорта не требуется.

Примечание: этот способ распаковки подходит только для небольших файлов, хотя можно пробовать на любых. Только вот вопрос: получится ли? Потому что /tracex выполняетя, бывает, очень долго и обычно не очень-то хочется просто так сидеть и его ждать.

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



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




Rambler's Top100