> 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-32.md).

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