03.04.2014 Views

Май - Xakep Online

Май - Xakep Online

Май - Xakep Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

взлом<br />

леониД «CR@WleR» исупов<br />

/ crawlerhack@rambler.ru /<br />

Без лома и молотка<br />

ОбХОД ЗАщиты тВиКерА FREShuI<br />

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

нагами. Результатом этого, наверняка, был шок: вместо читабельного листинга<br />

отладчик выдавал код, похожий на мусор. Скорее всего, это произошло потому, что ты<br />

нарвался на запакованную программу. Сегодня я на простом примере покажу тебе, как<br />

бороться с пакерами.<br />

INTrO<br />

Сейчас мы займемся программой FreshUI (это<br />

неплохой твикер для ОС Windows). Вообщето,<br />

программа для домашнего пользователя<br />

бесплатна, но после 11 дней ее использования<br />

начинает болеть голова от появления окошка с<br />

напоминанием о том, что мы должны заказать<br />

ключ у разработчика (окошко, кстати, с каждым<br />

днем держится на экране все дольше и дольше).<br />

Может, кто-то и хочет засветить свой почтовый<br />

ящик и занести его в спам-лист, но только не мы.<br />

Мы пойдем другим путем.<br />

распаковка<br />

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

отладчиком OllyDbg — для исследования нашей<br />

программы он подойдет лучше, чем монструозный<br />

SoftIce от Numega. Итак, устанавливай<br />

отладчик, если его все еще у тебя нет, и выбирай<br />

/ 090<br />

пункт меню «File Open». В появившемся окне<br />

укажи путь к файлу нашей программы (freshui.exe).<br />

Отладчик тут же сообщит тебе о том, что<br />

программа, возможно, содержит самомодифицирующийся<br />

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

нажатия «Ok» OllyDbg спросит, надо ли анализировать<br />

код. Эта медвежья услуга нам не понадобится,<br />

ведь файл, скорее всего, запакован,<br />

и никаких понятных листингов мы не получим,<br />

так что смело отвечай: «No». Вот что мы видим,<br />

глядя на начало дизассемблированного кода:<br />

00565000 90 NOP<br />

00565001 60 PUSHAD; Сохранение<br />

регистров в стек<br />

Опытный крякер, глядя на эти инструкции,<br />

обрадуется :), так как почти все упаковщики<br />

сохраняют регистры перед переходом на цикл<br />

распаковки и это их выдает, что называется,<br />

с потрохами. А это значит, нам нужно, следуя<br />

логике, найти команду восстановления всех<br />

регистров из стека (POPAD). Само собой, эта команда<br />

выполняется после распаковки. При этом<br />

нужно также учесть, что после этой инструкции<br />

должен следовать безусловный переход вида<br />

JMP N, где N — адрес оригинальной точки входа<br />

программы (Original Entry Point, или OEP). Я хочу<br />

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

восстановления регистров происходит прыжок<br />

на начало кода, который приобрел работоспособность,<br />

где мы и должны прерваться (о том,<br />

зачем это нужно, речь пойдет ниже).<br />

Наша цель — найти соседствующие команды<br />

POPAD и JMP N и поставить точку останова на<br />

POPAD. Поиск в OllyDbg () команды<br />

POPAD проходит успешно, но вот незадача: она<br />

нигде не соседствует с JMP N. Для того чтобы<br />

xàêåð 05 /101/ 07

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

Saved successfully!

Ooh no, something went wrong!