Новые шуточки от дяди Солодовникова… в Actual Startup Pro 2.3

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: Hex

В последнее время начали попадаться мне проги с аспротектом, да какие-то не понятные. OEP и импорт все как обычно, а дамп зависает на перевом же от OEP call… Хрень прям какая-то…

Чтоб не долбаться OEP: 48F2FC IATRVA: 00093164 IATSize: 00000708 Думал импорт кривой — вроде правильный. Начал рассматривать где ж виснет. Виснет в глубинах инициализации при обращении к памяти типа вот так mov ecx,[edx eax*2] Посмотрел как оно в проге упакованой обращается — обращается туда же но память там уже забита какими-то данными. Я уж начал думать что аспротект инициализацию памяти на себя забирает… Но не в этом то дело 🙂

Все проги, которые я смотрел с таким глюком, были на делфи и решил посмотреть, а как выглядят секции у обычных делфийских прог… И вот что сразу бросилось в глаза: третья секция(BBS) имеет Physical Size = 0! А в полученых дампах секция BBS уже существовала физически(т.е. Physical Size>0) и была заполнена всяким бредом от аспротекта! Вот вам и Rebuild PE… Как же дампить чтоб на такие грабли не наступать? В принципе можно каждый раз тупо менять размер этой секции, но это чо-то не то… Дампить надо сразу после создания импорта, не доходя к OEP. Как это место найти? bpx mapviewoffile после его срабатывания в протекторе bpx getprocaddress. Есть мазохисты которые делают сразу bpx getprocaddress и жмут F5 раз 20-30… не знаю к чему так извращаться если проще отловить аспротект через mapviewoffile, т.к. внутри протектора оно сработает только 1 раз, ну и еще максимум 2 раза перед этим, если какие-нить извратные DLL догрузит из импорта. Тем более первое срабатываение bpx getprocaddress после bpx mapviewoffile — эт

о начало создания импорта. В общем после срабатывания bpx getprocaddress жмем F12 пока не увидим вот такое:

Call HZ — мы выйдем отсюда

Pop ebx

Jmp hz_UP — это джамп цикла

Popad — сюда ставим брейкпоинт чтоб цикл пропустить

Call XXXXXXX

Push hz

Inc Dword Ptr[Esp]

Ret

Дальше входим в Call XXXXXXX и идем по ней пока не увидим :

Pushad

Push xxxxxx

Lea EAX,[ebp-c]

Push Dword ptr[hz]

Call [eax] — В этом Call «эмулируется» GetVersion, GetCommandlineA и т.д.

Popad

После этого Call [eax] можно брать дамп так как нравится. Дамп будет нормальный и BBS тоже будет впорядке. Импорт тоже можно восстанавливать прямо тут, не дожидаясь пока до оер дойдет. С импортом тут тоже 1 прикол оказался. Теперь даже плагин для определения эмуляций не помагает, т.к. 1 функция все равно не верно определяется. Это функция GetCommandlineA, плагин ее путает с GetVersion. Найти такую неверно определенную функцию очень просто. Восстанавливаем импорт как обычно, а потом ищем в дереве импорта Imprec функцию GetCurrentDirectoryA. Будет типа так:

1 000931D0 kernel32.dll 0158 GetCurrentDirectoryA

1 000931D4 kernel32.dll 01DC GetVersion

1 000931D8 kernel32.dll 0133 FreeLibrary

Так вот этот GetVersion который между GetCurrentDirectoryA и FreeLibrary на самом деле GetCommandLineA. Сколько я прог смотрел везде так было.

Теперь про эмуляцию апи. Много шуму вокруг этого поднимали. Апи эмулировать нужно далеко не всегда, если проге есть закриптованные участки то обычно эти апи — это функции чтения ключевого файла. Эмулировать надо если получили дамп, а прога при заходе к примеру в About матерится о том что у нее чо-то не так по такому-то адресу… Как искать их адреса? Многи предлагаю ципляться на bpx Getmodulehandlea if (*(esp 4)==0) и потом листать куда-то… Я так ничего найти не смог поэтому нашел свой способ. При запущеной проге заходим в айс и делаем addr имя_проги, чтоб в ее адресное пространство попасть. Потом делаем поиск в памяти протектора значения imagebase нашей проги. Ну типа если imagebase = 400000 и протектор лежит в районе C00000 — D00000 делаем поиск: s C00000 l 100000 00 00 40 00 00 00 40 00 Там просто рядом с этими апи лежит 2 раза подряд Imagebase. Все. Там ниже под тем местом где найдет будут лежать адреса апи. Как эмулировать расписано в статье «Исследование защиты на основе ASProtect 1.2x» by Kola на www

.reversing.net. В Actual Startup Pro 2.3 есть всего 2 апи. Одна читает ключевой файл, а другая — записывает какое-то число в секцию DATA которое потом не юзается. Т.е. тут эмулировать нечего.

P.S. Спасибо Kola за наставление на путь истинный 🙂

{/codecitation}

Добавить комментарий