> For the complete documentation index, see [llms.txt](https://backoftut.gitbook.io/intro-cracking-with-ollydbg-2/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://backoftut.gitbook.io/intro-cracking-with-ollydbg-2/ch-45.md).

# Глава 45

В этой главе мы рассмотрим распакуй-меня, сделанном с помощью упаковщика, который сложно победить в OllyDbg, так как в нём есть одна часть, которая не работает в Олли и выдаёт ошибку. Но мы всё равно будем использовать OllyDbg, несмотря ни на что. Мы могли бы использовать другой отладчик, но ведь это же "Введение в крэкинг с нуля, используя OllyDbg", хе-хе.

Так что даже с распухшими головами мы будем использовать OllyDbg вопреки всему. Распакуй-меня [\[ссылка\]](https://github.com/yutewiyof/intro-cracking-with-ollydbg/tree/3679d233f4d394747f712e9b6b09bc9c2a3cad80/.gitbook/assets/files/45/UnPackMe_ReCrypt0.80.7z) идёт вместе со статьёй, и он кажется реально противоОллиным. Запустим его без отладчика.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvd6-AqXATeomjdS%2F1.png?generation=1566513557075461\&alt=media)

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvdGnQSifcnP6nrL%2F2.png?generation=1566513561312152\&alt=media)

Вот в чём дело, когда он запущен, то пожирает 99% ресурсов моей машины. Давайте узнаем, делает ли он это для защиты или ещё почему.

Если хотим приаттачиться к нему, то нужно пойти в FILE-ATTACH и поискать процесс.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvdRDjLRPa3i7q-K%2F3.png?generation=1566513585217045\&alt=media)

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvdXVIgQ_iFB-4If%2F4.png?generation=1566513555920076\&alt=media)

И не забудьте приаттачиться.

Если откроем в Ollydbg, пропатченной для поиска OEP, которую использовали в прошлых главах:

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvdcxONl2vgMkmrS%2F5.png?generation=1566513575804980\&alt=media)

Если нажмём кнопку подтверждения:

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvdisw6PT5mkQZCd%2F6.png?generation=1566513635464295\&alt=media)

И если сделаем RUN:

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvdp8ZYYjh8i94TF%2F7.png?generation=1566513583240736\&alt=media)

Перезапускаем и снова идём к SYSTEM STARTUP BREAKPOINT, а когда останавливаемся, то идём в окно "M".

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvdwFUTfvnyyjBhw%2F8.png?generation=1566513557548725\&alt=media)

Видим, что тут есть одна секция, которая является результатом известной ошибки, когда меняется RVA и размеры в заголовке файла. Пока что установим BPM ON ACCESS на указанной секции. Помним, что эта OllyDbg – особенная, и останавливаемся только на выполнении кода, но не тогда, когда он читается или записывается.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTve2BQRyxjvVo3RJ%2F9.png?generation=1566513575429290\&alt=media)

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTve9YI8wtX7I8S_Z%2F10.png?generation=1566513556778941\&alt=media)

Теперь снимаем BPM и делаем RUN.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTveGE5ygQPO4KwpM%2F11.png?generation=1566513593520132\&alt=media)

Ок, смотрим в заголовке значения RVA и размеров.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTveN1z-5FU_Mo29h%2F12.png?generation=1566513561523289\&alt=media)

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTveVyOgsRjr_Suzd%2F13.png?generation=1566513558998967\&alt=media)

Теперь идём вниз, пока не найдём значение.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvebheHQR5Wc-XAj%2F14.png?generation=1566513634268173\&alt=media)

Вот это значение, которое должно быть равно 10 в шестнадцатеричной системе. Посмотрим, что будет, если мы его изменим.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTveiD0JN8dpQH1cV%2F15.png?generation=1566513601318471\&alt=media)

Пытаемся сохранить изменения.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvenQSyzBuNV9kIg%2F16.png?generation=1566513585321011\&alt=media)

Грр… Попробуем изменить в шестнадцатеричном редакторе.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvesbM2z3IdYJLWt%2F17.png?generation=1566513556032075\&alt=media)

Меняем на 10.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvex4ed2o5L_Ir9b%2F18.png?generation=1566513557439951\&alt=media)

Теперь сохраняем изменения.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvf2QcDcx4HWvfDc%2F19.png?generation=1566513571369277\&alt=media)

Сохраняем под другим именем.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvf8P6pRk-YjNkjG%2F20.png?generation=1566513594668572\&alt=media)

Видим, что при открытии в Ollydbg происходит остановка на точке входа (как и должно быть). Починка файла с помощью данного приёма была правильной. Теперь делаем RUN.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvfEjUEqARPXX2rq%2F21.png?generation=1566513556990051\&alt=media)

ГРРРР… Снова ошибка. Теперь, когда находимся на точке входа, изменим в памяти значения RVA и размеров на те, что были сначала. Это необходимо для правильной распаковки.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvfPO9KaBdi88WUl%2F22.png?generation=1566513555800166\&alt=media)

Так как мы уже находимся где нужно, установим нужное значение и проверим, сработает ли это.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvfW-hLhW697sqBO%2F23.png?generation=1566513655870348\&alt=media)

Значение установили, теперь делаем RUN.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvfcNLLXTMN1i8Um%2F24.png?generation=1566513573597804\&alt=media)

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

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

ДУМАЕМ

ДУМАЕМ

ДУМАЕМ

хе-хе

ДУМАЕМ ЕЩЁ

Хорошо, я покажу все возможности. Следующий способ мне не помог (но вам нужно быть знакомыми с этими методами, так как часто они работают).

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvfi1J_0XGxTTsoL%2F25.png?generation=1566513557434493\&alt=media)

Открываем [PARCHEADO 5](https://github.com/yutewiyof/intro-cracking-with-ollydbg/tree/3679d233f4d394747f712e9b6b09bc9c2a3cad80/.gitbook/assets/files/26/olly_parcheado_para_vb.7z) и устанавливаем его как JUST IN TIME DEBUGGER, то есть когда программа вызывает ошибку, отладчик автоматом подсоединяется к ней.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvftbH0aTsS8YW63%2F26.png?generation=1566513559796208\&alt=media)

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvfyd6uy7anWzq3C%2F27.png?generation=1566513556480643\&alt=media)

Нажимаем эту кнопку, чтобы перевести OllyDbg в режим JIT. Когда закончим работать с OllyDbg, следует восстановить старый JIT-отладчик с помощью кнопки "RESTORE OLD JUST IN TIME DEBUGGER", иначе OllyDbg будет запускаться при каждой программной ошибке, а это весьма утомительно.

Теперь закрываем PARCHEADO 5 и делаем щелчок правой кнопки на исходном файле распакуй-меня. Тот, где мы изменили RVA и другие размеры можно стереть, так как он нам не помог.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvg39X-iu5RH-fAg%2F28.png?generation=1566513563506637\&alt=media)

У тех из нас, кто иногда использует LORD PE DELUXE [\[ссылка\]](https://github.com/yutewiyof/intro-cracking-with-ollydbg/tree/3679d233f4d394747f712e9b6b09bc9c2a3cad80/.gitbook/assets/files/33/LordPE-DLX%201.4actualizado.7z) в системном меню правой кнопки мыши есть опция "BREAK AND ENTER", которая устанавливает INT3 на точку входа программы, что приводит к ошибке и запуска JIT-отладчика, которая присоединяется к вызвавшему ошибку процессу. Пробуем.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvg8hMczCvxpgHX4%2F29.png?generation=1566513557420200\&alt=media)

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvgFMBUCCp5a6AFb%2F30.png?generation=1566513592753397\&alt=media)

Запускается OllyDbg и присоединяется к процессу. Видим INT3, установленный LordPE. Заменяем INT3 на PUSHAD, который должен быть здесь.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvgL5HsLUeUuEao_%2F31.png?generation=1566513558236434\&alt=media)

Делаем RUN.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvgR-xrLsU5fg3CN%2F32.png?generation=1566513634123920\&alt=media)

ГРРРРР, так как немного выполняется в OllyDbg, мы должны провести трассировку построчно и выяснить, что происходит, но по-правде, у меня нет никакого желания это делать, поэтому лучше ПОДУМАТЬ, ПОДУМАТЬ, ПОДУМАТЬ, хе-хе.

Всегда будем использовать исходный файл. Откроем его в PeEditor’е [\[ссылка\]](https://github.com/yutewiyof/intro-cracking-with-ollydbg/tree/3679d233f4d394747f712e9b6b09bc9c2a3cad80/.gitbook/assets/files/45/PEditor1.7.7z).

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvgYtLz35r9wBqHa%2F33.png?generation=1566513558104475\&alt=media)

Теперь смотрим секции.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvgeIopGbh-LdFlh%2F34.png?generation=1566513556069771\&alt=media)

С помощью PeEditor’а можно прекрасно посмотреть все секции.

Мы ничего не знаем о программе, но очень возможно, что в ней есть функциональность большинства других упаковщиков, которые распаковываются в секцию, начинающуюся с 401000, то есть ту, которая у нас здесь идёт первой, так как здесь не показывается заголовок. Что произойдёт, если изменим параметры доступа к какой-нибудь секции, убрав право на запись, и произойдёт попытка записи сюда? Произойдёт ошибка и откроется PARCHEADO 5, который установлен как JIT-отладчик, хе-хе, так ли это? Можем попробовать это на первой секции, но думаю, что после распаковки программа сохранить API-функции из IAT, и это может быть в следующей секции, поэтому попробуем сначала с ней, а потом, если ничего не выйдет, можем попробывать с первой.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvgk3hJV2sfDJfvX%2F35.png?generation=1566513612808030\&alt=media)

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvgrCJhNDE8W02bB%2F36.png?generation=1566513559638569\&alt=media)

Открываем WIZARD, чтобы изменить параметры доступа к секции.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvgyIYBnn9sydGQI%2F37.png?generation=1566513557286447\&alt=media)

Снимаем галочку с "writeable".

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvh2hyYhciNbgF3d%2F38.png?generation=1566513658802268\&alt=media)

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvh7TWBbHmqZLSbo%2F39.png?generation=1566513559443015\&alt=media)

Здесь показаны изменённые параметры секции. Отметим, что автор может оказаться куда умнее меня и несмотря на начальное состояние секции менять права доступа к ней на желаемые во время выполнения с помощью API-функции VirtualProtect, но ладно, смотрим.

Запускается этот распакуй-меня, у которого мы изменили права доступа, после чего появляется пропатченный OllyDbg, установленный как JIT-отладчик.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvhDi_zjD0Y9MsOt%2F40.png?generation=1566513641469416\&alt=media)

Видим, что программа остановилась, когда попыталась сохранить значение одной из API-функции в вышеуказанной секции (хе-хе, моё предположение было правильным), что привело к ошибке, открывшей OllyDbg, который автоматически подсоединился к программе.

Теперь ,чтобы можно было продолжить выполнение, нужно вручную изменить права доступа к этой секции, чтобы в неё можно было писать. Нажимаем "M".

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvhJjx2iIaI7n9No%2F41.png?generation=1566513583237705\&alt=media)

Неважно, что OllyDbg показывает нам только одну секцию. Делаем следующее: жмём на правую кнопку мыши и устанавливаем полный доступ, то есть "Full access".

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvhP5h8Qpc6SofKD%2F42.png?generation=1566513561160151\&alt=media)

Теперь пробуем выполнить инструкцию с помощью F7, посмотрим, нормально ли сохранится или снова выдаст ошибку.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvhW-9h1Sqiayb-y%2F43.png?generation=1566513555708600\&alt=media)

Видим, что сохранилось без каких-либо проблем, теперь запомним как располагаются секции в PeEditor'е, так как OllyDbg нам показывает эту информацию не очень хорошо.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvhbL_qPfF1m-j5r%2F44.png?generation=1566513594738920\&alt=media)

Видим, что первая секция занимает в памяти 1000 байт, так как VIRTUAL SIZE равен 1000, то есть располагается по адресам от 401000 до 402000. Следующая секция, права доступа к которой мы меняли, располагается с 402000 до 403000, хе-хе.

Если посмотрим, что находится в 401000, то увидим, что это распакованная программа.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvhiqVIR86xa_epa%2F45.png?generation=1566513643488845\&alt=media)

Так что, хотя не можем установить BPM на всю секцию с помощью карты памяти, так как OllyDbg показывает нам её неправильно, можем отметить в дампе байты с 401000 до 402000, то есть всю секцию, и установить на них BPM ON ACCESS, что по сути будет то же самое.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvhptP1fI3_CdF4r%2F46.png?generation=1566513595486209\&alt=media)

Затушёвываем всё с 401000 до 402000 и устанавливаем туда BPM ON ACCESS.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvhwkFNmC22U_U6n%2F47.png?generation=1566513555593436\&alt=media)

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvi3eCzTgO_1xC9b%2F48.png?generation=1566513555661811\&alt=media)

Теперь делаем RUN.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvi8mg-pHnBLO7zI%2F49.png?generation=1566513557021584\&alt=media)

Теперь останавливаемся на OEP, который располагается точно в 401000.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTviEGme1txEq6nsl%2F50.png?generation=1566513595921134\&alt=media)

Ок, мы сделали самое сложное, теперь нужно сдампить программу.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTviKVFofy3DFqD5i%2F51.png?generation=1566513556874059\&alt=media)

И сохраняем дам, теперь ищем IAT и данные для IMP REC'а.

Под OEP есть вызов одной API-функции.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTviQS_GuUnZejyAJ%2F52.png?generation=1566513557073917\&alt=media)

И если сделаем FOLLOW, то это приведёт нас к переходам на API-функции.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTviWXK46yE7Qn0-D%2F53.png?generation=1566513558616059\&alt=media)

Так что найти IAT очень просто, посмотрев какой-нибудь из этих переходов, например тот, который ведёт на GetModuleHandleA содержит значение из области 402000, так что оно относится к IAT.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvib3AoLyewxUNuW%2F54.png?generation=1566513566787862\&alt=media)

Эта IAT очень маленькая, так что начинается она в 402000, а заканчивается в 40201C, поэтому размер равен 1C. Открываем IMP REC [\[ссылка\]](https://github.com/yutewiyof/intro-cracking-with-ollydbg/tree/3679d233f4d394747f712e9b6b09bc9c2a3cad80/.gitbook/assets/files/34/ImportReconstructor16f.7z) и отнимаем от найденных адресов начала и конца базу образа, то есть 400000.

RVA или НАЧАЛО: 2000

SIZE: 1C

OEP: 1000

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTviiGG_yH7oFjNsP%2F55.png?generation=1566513637472879\&alt=media)

Заполняем поля для OEP, RVA и SIZE, а затем нажимаем GET IMPORTS. Оно говорит нам, что всё "YES", хе-хе.

Пропускаем дамп через "FIX DUMP", и при запуске нам выдаётся ошибка.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvipQWggZ7SbSfvp%2F56.png?generation=1566513575471812\&alt=media)

Нам потребуется обработать его в LordPE c помощью "Rebuild PE".

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTviwSpUGdGMkIU-6%2F57.png?generation=1566513555890990\&alt=media)

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvj2MX8XhTZrGElU%2F58.png?generation=1566513558572526\&alt=media)

Запускаем, и прощай, упаковщик!

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvjAk0kcFAeDrYym%2F59.png?generation=1566513575248591\&alt=media)

Наши усилия по применению необычных методов дали свои плоды. Некоторые вещи упаковщики делают одинаково, однако они также защищают себя против обычных методов.

\[C] Рикардо Нарваха, пер. Aquila

## Дополнение к Главе

*От переводчика: приложении к 45-ой главе находился PDF на испанском языке, и эта статья является его переводом на русский язык.*

В этой статье показан другой способ противостоять упаковщику из вышеуказанной главы единственно с помощью щелчков по кнопкам мыши без необходимости делать что-то ещё.

Замечание: используемый Ollydbg - это обычная версия, единственные модификации - это Ollyghost [\[ссылка\]](https://github.com/yutewiyof/intro-cracking-with-ollydbg/tree/3679d233f4d394747f712e9b6b09bc9c2a3cad80/.gitbook/assets/files/45/+/OllyGHOST++.7z) и плагин OllyDump [\[ссылка\]](https://github.com/yutewiyof/intro-cracking-with-ollydbg/tree/3679d233f4d394747f712e9b6b09bc9c2a3cad80/.gitbook/assets/files/35/OllyDump%20v3.00.110.7z) для дампа процесса.

Также используется PE Editor, LordPE и две утилиты из списка - Estricnina [\[ссылка\]](https://github.com/yutewiyof/intro-cracking-with-ollydbg/tree/3679d233f4d394747f712e9b6b09bc9c2a3cad80/.gitbook/assets/files/45/+/Estricnina%20v0.12.7z) и Pokemon Anti\_Attach [\[ссылка\]](https://github.com/yutewiyof/intro-cracking-with-ollydbg/tree/3679d233f4d394747f712e9b6b09bc9c2a3cad80/.gitbook/assets/files/45/+/POKEMON%20AntiAttach.7z).

### Сводная информация

Первым делом до того, как атаковать программу в памяти, посмотрим на данные файла, для чего откроем программу в LordPE.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvjG6TyxnVhA5flX%2F1.jpg?generation=1566513559441745\&alt=media)

Эти данные нам понадобятся, так как упаковщик может изменить их во время распаковки, и мы ничего не сможет сделать. Как видим, данные NumberOfRvaAndsizes были изменены, так как знаем, что это поле содержало 10 в шестнадцатеричной системе. Изменим его, для чего необходимо его смещение, так что открывает редактор PE. Видим, что смещение равно B4.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvjM05Ct4Au2dLQA%2F2.jpg?generation=1566513557803649\&alt=media)

Следующее, что нам необходимо знать - это OEP, и с этим нам поможет плагин PEID.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvjSPL2BcDWwjzps%2F3.jpg?generation=1566513559588993\&alt=media)

Ок, теперь у нас есть все сведения, которые нам нужны, чтобы начать... Стало быть, идём в атаку.

Полученые данные:

1. OEP 00401000
2. SizeOfImagen 00006000
3. NumberOfRvaAndSizes Находится по смещению b4 и было изменено на 10

### Атака

Запускаем упаковщик вне OllyDbg, и он работает.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvjXqu6JPrJeTPfg%2F4.jpg?generation=1566513556510552\&alt=media)

Чтобы работать с большим удовольствием, будем использовать утилиту Marciano, которая называется Estricnina, с помощью которой остановим третью нить, которая содержит упаковщик (этот шаг не является необходимым, но делает работу более удобной).

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvjc5qXsHx-nNO2L%2F5.jpg?generation=1566513558298195\&alt=media)

Если мы делаем это, то загрузка процессора нитью падает с 99 процентов до нуля.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvjhhlku9i_0bQwp%2F6.jpg?generation=1566513557509559\&alt=media)

Теперь мы можем спокойно использовать нашу машину.

### Атака в памяти, чтобы нас не обнаружили

После использования Pokemon'а, чтобы избежать возможных противоприсоединительных и тому подобных приёмов, восстанавливаем значение NumberOfRvaSizes, которое, как мы помним, находится по смещению B4.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvjnjejB4S-9u4VQ%2F7.jpg?generation=1566513557467941\&alt=media)

Хорошо, если была защита против присоединения, то она исчезла. Продолжаем атаковать упаковщик в памяти. Открываем LordPE, и ищем упаковщик в списке процессов.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvjsH0HK8gswfrVm%2F8.jpg?generation=1566513592318954\&alt=media)

Как видим, у него размер образа равен 0001000, и мы знаем, что он должен быть равен 0006000, и это запутывает OllyDbg и любой дампер, поэтому у нас на выходе и не получается хорошего исполняемого файла, кроме того это мешает использовать программу Import для восстановления таблицы импорта.

Вывод: нужно починить его, это понятно. Кликаем по нёму в LordPE правой кнопкой мыши и исправляем

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvjxcI9urfOE3Olt%2F9.jpg?generation=1566513575168418\&alt=media) ![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvk2XECL-8x-1nKf%2F10.jpg?generation=1566513594133628\&alt=media)

И как видим на скриншоте справа, размер стал 0006000, каким он и должен быть.

Уже починили часть программы в памяти, теперь подсоединяемся с помощью OllyDbg и видим, что она сообщает нам о том, что заголовок неверен.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvk8nhK_ftOyF1dC%2F11.jpg?generation=1566513558341743\&alt=media)

Жмём на "Oк" и программа аттакуется, останавливается на API-функции.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvkFuOARSLKt5wqm%2F12.jpg?generation=1566513555759504\&alt=media)

Теперь, так как знаем его OEP, идём в окне кода в 00401000 и оказываемся на OEP программы.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvkLbE5CDplgPZ0u%2F13.jpg?generation=1566513689793529\&alt=media) ![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvkSIiUsvyFgPxpF%2F14.jpg?generation=1566513585111864\&alt=media)

И видим, что с ней всё в порядке... Нажимаем правую кнопку мышью.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvkZFFrBmwXhdD3n%2F15.jpg?generation=1566513696993666\&alt=media)

И видим в регистре EIP, что остановились на OEP, так что теперь переходим к сдампливанию с помощью плагина.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvkfybg6b8YTNSoK%2F16.jpg?generation=1566513556888904\&alt=media)

Осталось только добавить таблицу, которую подготавливаем с помощью Import. Вводим OEP и нажимаем три кнопки по порядку, выбираем сдампленный ранее файл и не выходим из окна, в котором заголовок находится в плохом состоянии. Об этом нам ещё ранее сказал OllyDbg.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvklyNDuizZdM_ju%2F17.jpg?generation=1566513557422962\&alt=media)

Реконструируем заголовок с помощью какой-нибудь программы, у которой есть такая функция, в данном случае это LordPE, и программа становится нормальной.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvksJSZ5XTTaHnSu%2F18.jpg?generation=1566513556230036\&alt=media) ![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvkzn3u2hPdzXDTb%2F19.jpg?generation=1566513555789324\&alt=media)

И если посмотрим в администраторе задач Windows, увидим, что программа больше не пожирает ресурсов - упаковщик исчез.

![](https://416819976-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LjyqT34OedPJiOdIrDw%2F-LmvTfhKwMHzvDz9duQT%2F-LmvTvl55B5RWG0YzomI%2F20.jpg?generation=1566513586625381\&alt=media)

Ок, достаточно на сегодня.

\[C] Lisa и Alquimista, пер. Aquila
