# Часть 33

[\[Используемые материалы\]](https://github.com/yutewiyof/intro-rev-ida-pro/tree/e1367e11cc661f3d69c02ae5f733b7dd168bc5ab/.gitbook/assets/files/33.zip)

Мы установим пару плагинов для **WINDBG**, которые будут помогать нам дальше при работе.

К сожалению эти плагины работают только в **WINDBG**, но если Вы запустите их в **WINDBG**, запущенном в **IDA**, они дадут сбой, возможно, потому что они конфликтуют с **PYTHON**, который включён в **IDA**, но мы будем использовать их в отдельном **WINDBG**, когда они нам понадобятся.

Мы будем копировать файлы, которые я приложил, в каталог **WINEXT**, который находится внутри каталога, где установлен **WINDBG** и установим библиотеку времени исполнения **VCREDIST\_X86.EXE**.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttyypMSYVjQp5coqc%2F01.png?generation=1563265865548658\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjrDv_m4LAycSFMBnkh%2F-LjrE0m7jYCASnmcJADS%2F33-02.png?generation=1563221044876795\&alt=media)

Добавьте переменную **PYTHONPATH**, к которой я добавил каталог **PYTHON**. Затем, идёт точка с запятой, и затем папка **WINEXT**. В моём случае это выглядит так.

> **C:\PYTHON27;**
>
> **C:\PROGRAM FILES (X86)\WINDOWS KITS\10\DEBUGGERS\X86\WINEXT**

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttyzC2uAggU-guHdV%2F03.png?generation=1563265866626246\&alt=media)

И в переменную **PATH**, которая уже существует, я добавляю в конце точку с запятой, а затем строку `C:\PYTHON27\`

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjrDv_m4LAycSFMBnkh%2F-LjrE0mIhWfeq4r49ots%2F33-04.png?generation=1563221074692848\&alt=media)

Я убеждаюсь, что строка добавлена в конец списка. Также я добавляю эту строку в системные переменные.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjrDv_m4LAycSFMBnkh%2F-LjrE0mQTzWRajB4OODy%2F33-05.png?generation=1563221052274606\&alt=media)

Хорошо, после перезагрузки **ПК** или принудительного завершения проводника **WINDOWS**, мы уже можем ввести в любой консоли слово **PYTHON** и система должна нам ответить его приглашением.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjrDv_m4LAycSFMBnkh%2F-LjrE0mUnZUkzJYM7UCI%2F33-06.png?generation=1563221051359721\&alt=media)

И последнее — нужно загрузить последние версии следующих файлов:

**WINDBGLIB.PY**: <https://github.com/corelan/windbglib/raw/master/windbglib.py>

**MONA.PY**: <https://github.com/corelan/mona/raw/master/mona.py>

и скопировать их в тот же каталог, где находится файл **WINDBG.EXE**

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttz-6Ujt0GABDORQ5%2F07.png?generation=1563265867942935\&alt=media)

С этими настройками, скрипты уже должны работать. Давайте попробует запустить **WINDBG**, без **IDA**. Если он не запустится, то Вам нужна другая библиотека времени исполнения. Если нет, отладчик должен работать нормально.

С помощью **CTRL** + **E** мы открываем любой исполняемый файл.

Когда файл загрузится, мы вводим.

> !LOAD PYKD.PYD

Ничего не случится, но и не должно появится ошибок.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttz-VBIaEOFJmIOKy%2F08.png?generation=1563265865378795\&alt=media)

С помощью команды **!PY**, я могу исполнять скрипты.

Здесь я могу также запускать команды **PYTHON**.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjrDv_m4LAycSFMBnkh%2F-LjrE0mpB55wTZEdK_JM%2F33-09.png?generation=1563221046045112\&alt=media)

Сейчас я попробую запустить **MONA**. Я выхожу из консоли с помощью функции **EXIT()** и ввожу

> !LOAD PYKD.PYD
>
> !PY MONA

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjrDv_m4LAycSFMBnkh%2F-LjrE0mvutbUzwnSZoqq%2F33-10.png?generation=1563221045021263\&alt=media)

Давайте попробуем некоторые команды **MONA**:

> !PY MONA MODULES

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttz0MrzVCw6MVnxol%2F11.png?generation=1563265866727403\&alt=media)

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

> !PY MONA ROP

Это займёт немного времени. Попробуйте увидеть, есть ли здесь такой модуль, где можно создать **ROP** (позже мы увидим, что это такое) и попытаемся его создать.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttz0VXT6wy36cTxJ5%2F12.png?generation=1563265865541636\&alt=media)

Иногда Вы можете создать **ROP**, а иногда и нет, но по крайней мере, мы увидим, что команда работает.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjrDv_m4LAycSFMBnkh%2F-LjrE0n9WwXPwrgSUYaJ%2F33-13.png?generation=1563221045793211\&alt=media)

Мы видим, что **MONA** подготовила **ROP**, но поскольку я не запускал **WINDBG** от имени администратора, она не смогла записать файл с результатом, но она всё равно его напечатала.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjrDv_m4LAycSFMBnkh%2F-LjrE0nC5oZmtX2B7za7%2F33-14.png?generation=1563221045685205\&alt=media)

Мы можем проверить, если ли у **MONA** обновление в сети.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttz1Ax2NYHeg-sIy_%2F15.png?generation=1563265866906940\&alt=media)

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttz1MR1fawLoRoS3J%2F16.png?generation=1563265867966284\&alt=media)

Сейчас я присоединяюсь к запущенному процессу. В моём случае, это приложение **NOTEPAD++**

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjrDv_m4LAycSFMBnkh%2F-LjrE0ndF4ggLTvuZt9v%2F33-17.png?generation=1563221074152178\&alt=media)

Теперь я могу видеть состояние кучи.

Скоро мы рассмотрим это всё подробнее. В любом случае, **WINDBG** также имеет команды для работы с кучей без использования **MONA**, которые мы можем использовать внутри **IDA**.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttz1iNnyOl0xGXxik%2F18.png?generation=1563265871989322\&alt=media)

Так что тут всё хорошо. В любом случае, если нам нужно, у нас есть несколько опцией, внутри, и вне **IDA**, и теперь у нас есть всё для продвижения вперед.

Попробуем ещё команды, для развлечения (**MONA** имеет их тысячи)

> !PY MONA ASSEMBLE -S "JMP ESP"

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttz1tBqYId2Rz3ELD%2F19.png?generation=1563265865258398\&alt=media)

> !PY MONA GETIAT

Она действительно имеет много полезных команд, чтобы увидеть импортированные функции.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttz2593Fdr71vydWj%2F20.png?generation=1563265865198599\&alt=media)

Удобно запускать **MONA** из-под пользователя **АДМИНИСТРАТОР**, чтобы сохранять информацию в файл. Мы можем получить также информацию об адресе, например так.

> !PY MONA INFO -A АДРЕС

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttz2IvUdRJtad3wO1%2F21.png?generation=1563265867465281\&alt=media)

Хорошо. Мы немного отдохнули, и установили все необходимые инструменты для того, чтобы продолжать. Увидимся в **34** главе.

Автор оригинального текста — Рикардо Нарваха.

Перевод и адаптация на английский язык — IvinsonCLS.

Перевод и адаптация на русский язык — Яша Яшечкин.

Перевод специально для форума системного и низкоуровневого программирования - WASM.IN

27.02.2018

[**Источник: ricardonarvaja.info**](http://ricardonarvaja.info/WEB/IDA%20DESDE%20CERO/CURSO%20DE%20IDA%20TUTES/33-INTRODUCCION%20AL%20REVERSING%20CON%20IDA%20PRO%20DESDE%20CERO.docx)
