# Часть 32

Подготовка **WINDBG** для работы с **IDA**.

Один из инструментов, который нам необходимо установить - это отладчик **WINDBG**. Им можно управлять через интерфейс **IDA**. Это отличный отладчик. Может ему и не хватает комфорта, потому что почти все типы команд являются консольными и его немножко сложно использовать, но мы можем использовать отличный интерфейс, который предлагает **IDA**, отлаживая движком **WINDBG**. **WINDBG**очень полезен, когда мы хотим отлаживать ядро или получить хорошую информацию о состоянии кучи при переполнении кучи или об ошибках после освобождения памяти, которые мы увидим позже.

Существует множество способов установить **WINDBG**. К сожалению они меняются и Вам придется пробовать те, которые заработают на Вашем ПК. Поскольку я использую **WINDOWS 10**, я перехожу на страницу **MICROSOFT**, чтобы загрузить **SDK** для **WINDOWS 10**.

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

Здесь я скачал, и запустил установщик, и когда он мне показывает опции, я просто выбираю для установки **DEBUGGING TOOLS FOR WINDOWS**.

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

Отключив ненужные пункты, инсталлятор установит **WINDBG**. Поскольку каждая версия **WINDOWS** имеет свой собственный **SDK**, Вы можете сделать то же самое и в других версиях **WINDOWS**, и установить **SDK**, который соответствует Вашей системе. По крайней мере, в нашем случае, мы знаем, что у нас идёт всё хорошо.

Затем я должен перейти в папку **CFG** внутри установленной папки **IDA** и найти файл **IDA.CFG**.

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

Я редактирую этот файл, и я должен указать путь в переменную **DBGTOOLS** где установлен **WINDBG x86**. В моём случае он находится здесь.

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

Поэтому в файле **IDA.CFG** я ищу слово **DBGTOOLS**.

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

И я добавляю точный путь, добавляя двойной символ бэк-слэша **\\** вместо одного, чтобы разделить папки. Я оставляю исходный путь, закомментированный выше.

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

Я открываю любой исполняемый файл, и устанавливаю **BP** для того, чтобы программа остановилась, и меняю отладчик на **WINDBG**.

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

Затем мы проверяем, всё ли в порядке. Мы запускаем исполняемый файл. Если **IDA** говорит нам, что она не находит **WINDBG**, мы должны проверить путь, или что-то не так установилось в процессе установки. Я думаю, что единственный способ увидеть проблему - это посмотреть с помощью утилиты **PROCESS MONITOR** какие файлы, установщик ищет при запуске и где, чтобы увидеть, чего ему не хватает.

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

Здесь отладчик остановится, поскольку он был **WIN32** локальным отладчиком **IDA**, но мы видим, что ниже, где обычно находится панель **PYTHON**, появляется панель **WINDBG** (???). Если будет нужно, то нажав на слово **WINDBG**, я могу переключиться на панель **PYTHON**.

Это означает, что всё нормально. Он установился хорошо. Мы можем использовать **GUI IDA** и в то же время команды **WINDBG**. Давайте попробует некоторые из них.

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

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

Всё работает!!! Я могу увидеть список модулей в панели **WINDBG**. Очевидно в **IDA** будут те же данные.

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

Также мы должны сконфигурировать символы для **WINDBG**. Если мы введем такую команду:

**.RELOAD**

Отладчик покажет мне ошибки при работе с символами, потому что не настроено место, где нужно их хранить.

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

Мы создаём каталог на диске **C:\\** для символов. Очевидно **IDA** должна запускаться от пользователя **Администратор**. Если это не так, она не сможет писать в нужную папку.

В **ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ WINDOWS** мы добавим переменную **\_NT\_SYMBOL\_PATH**.

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

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

А в значение, мы вводим следующее:

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

Здесь я буду вводить путь до папки, которая будет создана, когда начнут загружаться символы. В моём случае это будет папка с именем **SYMBOLS** на диске **C:\\**

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjrDv_m4LAycSFMBnkh%2F-LjrE0qLKtuZ-unkMJgR%2F32-16.png?generation=1563221047366033\&alt=media)

Я перезагрузил **ПК** или **WINDOWS EXPLORER**(процесс **EXPLORER.EXE** убивается и запускается из панели диспетчера задач).

И сейчас, когда я запускаю снова **IDA** и запускаю отладчик с помощью **WINDBG**, мы уже видим, что он пытается загрузить символы. Отладчик показывает окно загрузки и по окончанию с помощью команды **LM**, мы видим, что появляется путь, который мы установили и внутри папки символов находятся **PDB** файлы.

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

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

Мы уже сконфигурировали отладчик и он готов к работе.

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

С помощью клавиши **X** мы можем увидеть список функций библиотеки **KERNEL32**. Например, мы можем использовать подстановочные знаки.

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

Отладчик, покажет нам функции, которые начинаются с символов **He**.

Конечно, также в **IDA**, в списке модулей, я могу сделать правый щелчок и выбрать пункт **LOAD SYMBOLS** для любого модуля.

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

И также я буду иметь их в интерфейсе **IDA**.

У меня есть возможность установить **BP** из интерфейса **IDA** как мы обычно это делаем с помощью клавиши **F2** и через панель **WINDBG**, которые будут обрабатываться **IDA**.

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

Если я введу команду **BL**, то увижу список **BP WINDBG**.

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjrDv_m4LAycSFMBnkh%2F-LjrE0qx-nCWZC6Q485D%2F32-24.png?generation=1563221048640052\&alt=media)

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

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

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

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

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

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

26.02.2018

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


---

# Agent Instructions: 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:

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

The question should be specific, self-contained, and written in natural language.
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.
