RCE.SU - реверсинг, кодинг, выделенные сервера, ICQ, proxy

Распаковка PicturesToExe v2.15 (written GoKs)


Инструменты.
  • Soft-Ice v4.05
  • ProcDump v1.6.2 FINAL
  • Icedump v6.0.1.5
  • Любой HEX-редактор
  • Сама программа,возьмите отсюда http://www.wnsoft.com/apr

Распаковка.

Как всегда сначала узнаем некоторые свойства исследуемой проги при помощи редактора ProcDump,узнаем следующие св-ва:

Size of Image=00172000
Image Base=00400000

Теперь заглянем в раздел Sections и посмотрим в какой из секций может быть размещена таблица импорта,как известно,обычно таблица импорта пихается либо в секцию rdata,либо в секцию idata.Сравнив Virtual Size этих секций,я предположил,что таблица импорта размещена в секции idata,так как Virtual Size у нее больше,поэтому запишем ее характеристики:

Virtual Offset(RVA)=000E4000
Virtual Size=00003000

При загруженном сайсе прога естсственно выдает любимое сообщение ASProtect,о запущенном отладчике и работать отказывается,при попытке скрыть отладчик при помощи FrogIce,все тоже кончается неудачей,выдается сообщение об ошибке.Как выяснится в дальнейшем,код распаковщика уже не совсем тот,что я наблюдал при распаковке таких прог как WinNavigator,Avawe Studio и некоторых других.

Сейчас перед нами стоит задача остановить прогу в сайсе,в коде распаковщика,сделать это можно 2-мя способами поменяв характеристику секции CODE,либо при помощи HIEW,заменив опкод точки входа на сс и поставив в сайсе прерывание:bpint 3,вообщем кто уже имеет опыт тот поймет о чем я:)

Попав наконец в код распаковщика потрассируем немного,пока не дойдем до команды:

0055E0С5 push ESP

дальше начинается очень интересный код,посмотрите,поймете о чем я,поэтому ставим бряк на адрес 0055Е0С5,это для того чтобы каждый раз не грузить прогу через загрузчик сайса,кстати если вы меняли характеристику секции CODE,то после установки этого бряка,поменяйте ее обратно,а то у вас ничего не получится.И еще одно замечание адреса которые я указываю у вас будут совершенно другие,я проходил этот код 3 раза и каждый раз адреса менялись:( Ну,вернемся к распаковке,чтобы пройти этот бессмысленный код побыстрей,прокрутите окно кода в сайсе ниже и ставьте брык на команду ret,потом F5,затем до следующего ret,когда команды ret закончатся ставьте на такие участки:

jmp -----
jmp -----
jmp -----
причем когда пойдут такие связки,после останова на этих командах,понажимайте раз 5 F8,чтобы не пропустить команду ret,которая выведет нас из этого бесполезного "живого" кода,причем выход будет в системную длл Kernell32,когда мы в ней окажемся трассируем до выхода из нее,и выйдем вот сюда:
5C83D1 PUSHAD    <окажемся здесь
5C83D2 CALL 005С8А1В  
<в него зайдем далее до ret,и еще раз до ret,окажемся в куске который что-то распаковывает,чтобы побыстрей его проскочить крутим вниз окно кода до
5C8995 popad
5C8996 jnz 005C89A0
5C8998 mov EAX,01
5C899d ret
5C89A0 push 005BB314
5C89A5 ret   <сюда бряк,дальше выйдем в код такого плана:

5BB325 call 005AC8DC
5BB32A call 005AF150
5BB32F call 005B0F2C
5BB334 call 005B64B8
5BB339 call 005AC420   <нам сюда,
протрассировав до очередного ret,выйдем вот сюда:
5BA84F push EBP
5BA850 push 005BA86D
5BA855 push dword ptr fs:[EAX]
5BA858 mov fs:[EAX],ESP
5BA85B mov EAX,[EBP+08]
5BA85E call 005BA25C   
<здесь-то и происходит проверка на наличие отладчика в памяти и целостность кода,поэтому зайдем в него,потрассируем до первого jz и видим что перехода не будет(если не будет перехода,то появится сообщение о наличии загруженного сайса),меняем значение флага Z на противоположное и осуществляем переход.Теперь самое время поставить бряк на функцию LoadLibraryA,чтобы отловить момент ее распаковки,F5 и сразу-же сработает только-что поставленный бряк,сдампим секцию idata:pagein d 4E4000(RVA+IMAGE BASE)3000 c:\idata.bin,предварительно отключив бряк на LoadLibraryA.Трассируем дальше до:
5BAA48 mov EAX,[EBP+08]
5BAA4B mov EAX,[EAX+1C]
5BAA4E call 005BA1B0 < нам сюда,конец распаковки
5BAA53 pop EDI
5BAA54 pop ESI
5BAA55 pop EBX
5BAA56 pop ECX
5BAA57 pop ECX
5BAA58 pop EBP
5BAA59 ret 0004
Войдя в call 005BA1B0 опять увидим "живой код",потрассируем немного до команды popad пишем на бумажку значение регистра EAX=004DFC88-это OEP+Image Base,через 3 или 4 команды дойдем до команды ret,это и есть прыжок на распакованную прогу,поэтому остановившись на этой команде выключим все бряки и сдампим:pagein d 400000(Image Base)172000(Size of Image)c:\dump.exe Теперь мы имеем все необходимре для получения рабочего,распакованного ехе-файла.Откроем наш dump.exe Hex-редактором и вставим с адреса Е4000(Offset)idata.bin,затем редактором ProcDump-a сделаем для каждой секции Virtual Size=Raw Size,Virtual Offset=Raw Offset,зайдем в раздел Directory и подправим RVA Import Table=RVA(idata),также исправим Entry Point,помните значение регистра EAX,у нас Entry Point=4DFC88-Image Base=DFC88.НУ вот и все запускаем все работает,поменяв значение характеристики секции CODE c C0000040 на Е0000020,и прдизасемблировав Windasm,имеем импорт,все готово для исследование проги,что и предлогаю вам проделать самостоятельно.


<= Вернуться к статьям


Rambler's Top100