03.04.2014 Views

Май - Xakep Online

Май - Xakep Online

Май - Xakep Online

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

взлом<br />

Типичный AsPack! Цикл, убиваемый после распаковки<br />

убедиться в том, что мы все делаем верно, воспользуемся<br />

утилитой PEid — хорошей помощницей<br />

в определении типа пакера (протектора/<br />

компилятора)(http://peid.has.it), которую можно<br />

скачать на любом крякерском сайте. Запускай<br />

утилиту и скармливай ей freshui.exe. Она моментально<br />

выдаст нам результат: «ASPack 2.12<br />

Alexey Solodovnikov». Значит, мы с тобой сильно<br />

ошибались, ведь AsPack действует немного<br />

иначе, чем совсем уж тривиальные пакеры. Он<br />

использует для перехода на OEP не JMP N, а<br />

конструкцию вида:<br />

POPAD; восстановление регистров<br />

JNZ adress<br />

MOV EAX,1<br />

RETN 0C<br />

PUSH 0; OEP кладется в стек<br />

RETN ; переход на OEP<br />

Нас интересуют только первая и две последние<br />

инструкции. Комментарии дают ясное представление<br />

о работе этого куска кода. Стоит только<br />

упомянуть, что команда PUSH 0, после того как<br />

мы прервемся на ret, положит в стек совсем не 0,<br />

а значение OEP. Итак, ищем POPAD с хвостом в<br />

виде вышеуказанного кода. Такой набор располагается<br />

по адресу 005653AF:<br />

005653AF POPAD<br />

005653B0 JNZ SHORT<br />

freshui.005653BA<br />

005653B2 MOV EAX,1<br />

005653B7 RETN 0C<br />

005653BA PUSH 0<br />

005653BF RETN<br />

OEP найдена!<br />

По адресу 005653BF ставь точку останова, для<br />

этого выдели строку и нажми . Все готово,<br />

запускай программу на исполнение ().<br />

Выполнение ее тут же и прервется, причем на<br />

вершине стека будет лежать адрес OEP, равный<br />

00507340 (заметил, как изменилась команда<br />

PUSH 0?), его мы запишем. Теперь переходим<br />

на начало кода программы, сделав один шаг<br />

(). Мы попадем в место, очень похожее<br />

на кучу хлама в виде данных, неправильно<br />

интерпретированных в качестве инструкций, но<br />

это далеко не так. На самом деле, этот «массив»<br />

— ни что иное, как начальный код, стартующий<br />

с OEP! Если не веришь, нажми .<br />

После анализа ты увидишь характерное начало<br />

программы.<br />

На время сверни OllyDbg. Теперь, как и обещал,<br />

я скажу, зачем мы остановили программу на OEP.<br />

Для того чтобы получить более или менее работоспособную<br />

программу со снятым упаковщиком,<br />

нужно сделать дамп, он же моментальный снимок<br />

области памяти, где размещена наша программа,<br />

причем не когда-нибудь, а именно сразу после<br />

распаковки, когда программа прервется на OEP.<br />

Для этой цели подойдет инструмент LordPE за<br />

авторством Yoda (респект!). Запускай эту утилиту,<br />

выбирай в окне процессов нашу программу,<br />

висящую под отладчиком, и, нажав по ней правой<br />

кнопкой мыши, выбирай в меню «Dump full». Сохрани<br />

файл под именем dump.exe. Полученный<br />

дамп будет неработоспособен, так как таблица<br />

импорта не восстановлена. Привести dump.exe<br />

в чувство поможет утилита Import Reconstructor.<br />

Запусти ее. Выбери в списке Attach to an active<br />

Process процесс freshui.exe и введи OEP в<br />

соответствующее поле программы. Причем OEP в<br />

этом случае будет равняться 00507340‐ImageBase<br />

=00507340-00400000=00107340 (ImageBase — это<br />

адрес, с которого в памяти идет код программы,<br />

его нам указал отладчик). Теперь жми на кнопку<br />

«Get Import». При этом не обращай внимания<br />

на издержки — мусор в виде нераспознанных<br />

функций, который будет отображен среди верно<br />

отысканных данных в виде двух последних<br />

ветвей: »?FThunk:0010F8E0 NbFunc:3 valid:no»<br />

и »?FThunk:0010F8F0 NbFunc:3 valid:no». Ты<br />

можешь убедиться в ненужности этих «элементов<br />

таблицы импорта», если перейдешь по<br />

смещениям 0050F8E0 и 0050F8F0 и взглянешь на<br />

содержимое памяти. Первый фантомный Fthunk<br />

— строка «kernel32.dll», то есть имя библиотеки,<br />

импорт функций из которой распознан, а второй<br />

«непрошеный гость» — часть имени функции,<br />

которая размещена в Import Table первой<br />

(DeleteCriticalSection). Мусор нужно отрезать,<br />

Полезный<br />

крякерский ресурс<br />

Все инструменты, упомянутые в статье, можно<br />

найти на лучшем крякерском ресурсе<br />

www.cracklab.ru. Помимо этого, сайт располагает<br />

внушительной коллекцией статей по крякингу и<br />

набором различных полезных ссылок. Конечно<br />

же, нельзя не упомянуть о форуме. Он является<br />

главной достопримечательностью ресурса, и следует<br />

признать, что все имеющееся на сайте — это<br />

лишь приятное дополнение к наиполезнейшему<br />

форуму, где можно повстречать незаурядно талантливых<br />

людей, относящихся к элите крякинга.<br />

Среди них — [HEX], MozgC, dragon (c) и другие. Я<br />

выражаю им почтение. Спасибо, Bad_guy!<br />

xàêåð 05 /101/ 07<br />

/<br />

091

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!