> For the complete documentation index, see [llms.txt](https://yutewiyof.gitbook.io/intro-rev-ida-pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yutewiyof.gitbook.io/intro-rev-ida-pro/chast-33.md).

# Часть 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**.

![](/files/-LjttyypMSYVjQp5coqc)

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

![](/files/-LjrE0m7jYCASnmcJADS)

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

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

![](/files/-LjttyzC2uAggU-guHdV)

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

![](/files/-LjrE0mIhWfeq4r49ots)

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

![](/files/-LjrE0mQTzWRajB4OODy)

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

![](/files/-LjrE0mUnZUkzJYM7UCI)

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

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

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

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

![](/files/-Ljttz-6Ujt0GABDORQ5)

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

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

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

> !LOAD PYKD.PYD

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

![](/files/-Ljttz-VBIaEOFJmIOKy)

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

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

![](/files/-LjrE0mpB55wTZEdK_JM)

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

> !LOAD PYKD.PYD
>
> !PY MONA

![](/files/-LjrE0mvutbUzwnSZoqq)

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

> !PY MONA MODULES

![](/files/-Ljttz0MrzVCw6MVnxol)

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

> !PY MONA ROP

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

![](/files/-Ljttz0VXT6wy36cTxJ5)

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

![](/files/-LjrE0n9WwXPwrgSUYaJ)

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

![](/files/-LjrE0nC5oZmtX2B7za7)

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

![](/files/-Ljttz1Ax2NYHeg-sIy_)

![](/files/-Ljttz1MR1fawLoRoS3J)

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

![](/files/-LjrE0ndF4ggLTvuZt9v)

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

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

![](/files/-Ljttz1iNnyOl0xGXxik)

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

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

> !PY MONA ASSEMBLE -S "JMP ESP"

![](/files/-Ljttz1tBqYId2Rz3ELD)

> !PY MONA GETIAT

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

![](/files/-Ljttz2593Fdr71vydWj)

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

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

![](/files/-Ljttz2IvUdRJtad3wO1)

Хорошо. Мы немного отдохнули, и установили все необходимые инструменты для того, чтобы продолжать. Увидимся в **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)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://yutewiyof.gitbook.io/intro-rev-ida-pro/chast-33.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
