Распаковка PicturesToExe v2.15 (written GoKs)Инструменты.
Как всегда сначала узнаем некоторые свойства исследуемой проги при помощи редактора ProcDump,узнаем следующие св-ва:
Size of Image=00172000 Теперь заглянем в раздел Sections и посмотрим в какой из секций может быть размещена таблица импорта,как известно,обычно таблица импорта пихается либо в секцию rdata,либо в секцию idata.Сравнив Virtual Size этих секций,я предположил,что таблица импорта размещена в секции idata,так как Virtual Size у нее больше,поэтому запишем ее характеристики:
Virtual Offset(RVA)=000E4000 При загруженном сайсе прога естсственно выдает любимое сообщение 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,имеем импорт,все готово для исследование проги,что и предлогаю вам проделать самостоятельно. |