Распаковка упаковщика PeSpin. Поиск OEP и украденных байт. Крэкинг ч.48

Обсудить статью на форуме


Массу свежих 2020 года крэкерских инструментов, видеоуроков и статей вы сможете найти на видеокурсе от нашего сайта. Подробнее здесь.


Если вы загрузили главы 46 и 47 сразу после их появления, то, возможно, не читали добавленное к ним позднее примечание:

После того, как была написана 46 глава и еще не было завершено решение Patrick’а, я заметил, что эти туториалы слишком сложны для уровня, до которого мы дошли, так что если вам главы 46 и 47 покажутся очень сложными, то советую оставить их до тех времен, когда вы будете более подготовлены, а сейчас сразу перейти к 48 главе, соответствующей тому уровню, на котором мы остановились.

Рикардо Нарваха

Так уж вышло, что когда я занялся Patrick’ом, то сначала решил его простым методом (упомянутым в конце 47-й главы) и посчитал, что он легок до неприличия. Как следствие, данные главы оказались труднее прежних и пришлось добавить процитированное выше примечание.

В этой главе мы рассмотрим упаковщик PeSpin 1.304 Full, о котором уже существуют достаточно хорошие туториалы. На самом деле, написать еще не существующий туториал практически невозможно, так как ресурс CracksLatinoS содержит очень хорошие статьи почти обо всех упаковщиках.

В PeSpin дойти до OEP очень просто.

Взлом программ отладчиком OllyDbg

Сейчас анпэкми остановлен на его EP. Мы будем пользоваться Parcheado 5 — версией OllyDbg, которая предназначена для поиска OEP’ов.

Взлом программ отладчиком OllyDbg

Открыв карту памяти, установим MEMORY BREAKPOINT ON ACCESS в первой секции после заголовка. Этот брейк равнозначен ON EXECUTION, поскольку, как помните, пропатченная для поиска OEP’ов версия отладчика в данном случае останавливается только при выполнении, а не при чтении или записи.

Взлом программ отладчиком OllyDbg

Следует убедиться, что все галки во вкладке Exceptions окна Debugging options установлены:

Взлом программ отладчиком OllyDbg

После нажатия на RUN можно пойти спокойно пить кофе:

Взлом программ отладчиком OllyDbg

Как следует напившись кофе, хе-хе, обнаружим, что остановка произошла на непохожем на OEP месте, а значит, от команд исходной OEP ничего не осталось из-за украденных байтов:

Взлом программ отладчиком OllyDbg

Посмотрим стек:

Взлом программ отладчиком OllyDbg

Можно заметить, что перед прибытием в ложную OEP было выполнено много кода, и это свидетельствует о том, что байты OEP были украдены.

Взлом программ отладчиком OllyDbg

Кроме того, если сделаем Search for –> All intermodular calls, то найдем очень мало вызовов API-функций:

Взлом программ отладчиком OllyDbg

Посмотрим один из них:

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Дойдя до косвенных переходов на API-функции, заглянем в IAT:

Взлом программ отладчиком OllyDbg

Здесь виден конец IAT’а — 460F28. Теперь поднимемся выше:

Взлом программ отладчиком OllyDbg

Похоже, это переадресовочные элементы. Чтобы проверить, принадлежат ли они IAT’у, посмотрим их референсы:

Взлом программ отладчиком OllyDbg

Поиск ничего не дает, но если подняться еще выше, то станет ясно, что это всё-таки часть IAT’а. Таким образом, в PeSpin используется и переадресация.

Взлом программ отладчиком OllyDbg

Начало IAT’а находится по адресу 460818. Мы еще вернемся к этому месту, когда будем исправлять IAT, а сейчас займемся возвращением украденных байтов; чуть выше ложной OEP для них как раз есть подходящая нулевая область:

Взлом программ отладчиком OllyDbg

Перезагрузим программу и посмотрим состояние стека:

Взлом программ отладчиком OllyDbg

Здесь видно, что перед запуском анпэкми адрес вершины стека равен 12FFC4 (так на моем компьютере). Это означает, что при прибытии к истинной OEP вершина стека должна находиться по тому же адресу, то есть в 12FFC4. Обычно первой командой программы является PUSH EBP, которая записывает значение в следующую ячейку стека (12FFC0), поэтому найдем ее в дампе и установим на ней HARDWARE BPX ON WRITE. Такое рассуждение логично, но оно может и не дать результатов, если упаковщик обнаруживает аппаратные брейкпоинты или, для осложнения поиска OEP, меняет адреса стека.

Взлом программ отладчиком OllyDbg

После установки брейка нажмем RUN:

Взлом программ отладчиком OllyDbg

Первая остановка произошла здесь, но данная инструкция скорее всего принадлежит распаковщику. Нажмем F9 еще раз:

Взлом программ отладчиком OllyDbg

Теперь остановились на PUSH EBP, что весьма похоже на команду из OEP. Чтобы проверить это предположение, воспользуемся, хе-хе, трассировкой. Конечно же, JMP’ы нас не интересуют, так как они не влияют на состояние регистров или стека.

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Здесь встречается необычная комбинация команд: сначала выполняется PUSH, а затем только что записанное в стек значение суммируется с константой:

Взлом программ отладчиком OllyDbg

После выполнения инструкции ADD значение в стеке оказывается 450E60, поэтому данная комбинация равнозначна PUSH 450E60.

Взлом программ отладчиком OllyDbg

Затем этот трюк повторяется, но уже вместо PUSH 4292C8:

Взлом программ отладчиком OllyDbg

Далее идет еще одна подходящая инструкция:

Взлом программ отладчиком OllyDbg

И еще парочка:

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Продолжим:

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Сейчас мы просто скопируем этот CALL, а потом, при восстановлении IAT’а, посмотрим, относится ли он к какой-нибудь API-функции.

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Переход на ложную OEP завершает трассировку, а мы тем временем узнали список украденных байтов, хе-хе.

Взлом программ отладчиком OllyDbg

Скопируем их в область OEP:

Взлом программ отладчиком OllyDbg

Они байт-в-байт заполнили нулевую область, так что теперь украденные байты возвращены, хотя мы даже не приступали к сдампливанию. В следующей главе мы будем разбираться с IAT’ом.

До встречи в 49-й главе!

Файлы к статье

  [C] Рикардо Нарваха, пер. Рома Стремилов

Обсуждение статьи: Распаковка упаковщика PeSpin. Поиск OEP и украденных байт. Крэкинг ч.48 >>>


При перепечатке ссылка на https://exelab.ru обязательна.



Видеокурс ВЗЛОМ