Введение в реверсинг с нуля, используя IDA PRO. Часть 33.

Дата публикации 27 фев 2018 | Редактировалось 27 фев 2018
Мы установим пару плагинов для WINDBG, которые будут помогать нам дальше при работе.

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

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

1.png

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

2.png

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

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

3.png

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

4.png

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

5.png

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

6.png

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

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

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

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

7.png

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

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

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

!LOAD PYKD.PYD

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

8.png

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

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

9.png

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

!LOAD PYKD.PYD

!PY
MONA

10.png

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

!PY MONA MODULES

11.png

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

!PY MONA ROP

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

12.png

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

13.png

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

14.png

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

15.png

16.png

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

17.png

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

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

18.png

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

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

!PY MONA ASSEMBLE -S "JMP ESP"

19.png

!PY MONA GETIAT

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

20.png

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

!PY MONA INFO -A АДРЕС

21.png


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

====================================================================
Автор текста: Рикардо Нарваха - Ricardo Narvaja (@ricnar456)
Перевод на английский: IvinsonCLS (@IvinsonCLS)
Перевод на русский с испанского+английского: Яша_Добрый_Хакер(Ростовский фанат Нарвахи).
Перевод специально для форума системного и низкоуровневого программирования — WASM.IN
27.02.2018
Версия 1.0

10 7.224
yashechka

yashechka
Ростовский фанат Нарвахи

Регистрация:
2 янв 2012
Публикаций:
90

Комментарии


      1. Kulagin 14 дек 2021
        С этим WinDbg чтение книги превратилось из чтения книги и выполнения упражнений в прохождение кольц ада с боссами.
        В роли боссов выступают:
        • Конфликтующие версии Python, установленные на системе - 2 и 3, 32 бит и 64 бит(в других программах все прекрасно и выбрать нужную версию питона дело двух кликов).
        • WinDbg x86, которая какого-то лешего запускает Python 3 64-bit и не хочет грузить пук: выбрасывает ошибку The call to loadlibrary(pykd.pyd) failed, win32 error 0n193 %1 is not a valid win32 application.
        • Пукд.пуд, который отказывается грузиться в WinDbg x86(т.к. юзается питон x64) и для которого разрабы написали бутстраппер, чтобы можно было вручную выбирать интерпритатор(любой питон любой битности): https://githomelab.ru/pykd/pykd-ext
        • Mona, которая отказывается работать с обновленным пуком и хочет только специфическую версию пука 0.2.0.29, указанную в документации windbglib: https://github.com/corelan/windbglib#windows-7-or-10-64bit

        Чтобы нормально все поставилось и можно было выполнять примеры из книги, надо:
        • Установить Питон 2.7 32-бита(x86).
        • Установить Pykd bootstrapper: https://githomelab.ru/pykd/pykd-ext
        • Установить Pykd 0.2.0.29, Mona и windbglibиз документации оф. репозитория windbglib(сделать все шаги в главе): https://github.com/corelan/windbglib#windows-7-or-10-64bit
        • Зайти в WinDbg x86, загрузить pykd bootstrapper командой !load pykd. Далее выбрать питон 2.7 командой !select -2.7
        • После этого можно будет пользоваться Моной. Пробный запуск командой !py mona

        Убил 4.5 часа на это сегодня, в дополнение к танцам с бубном на прошлой неделе. Это какой-то дичайший кринж. И никто не написал адекватной инструкции с правилами, как с этими гремлинами и лепреконами надо обращаться правильно.
        yashechka нравится это.
      2. Kulagin 10 дек 2021
        Насколько я помню, процессы IDA 7.0+ все 64-битные, даже для отладки и анализа x86 файлов. Соответственно, если IDA 7.0+, и WinDbg надо использовать x64, пукд тоже надо ставить x64. Прогуглил, нашел тут норм инструкцию: https://rayanfam.com/topics/pykd-tutorial-part1/

        Поставил все x64, заработало. Правда, из-за того что в системе есть аж целых 5 разных питонов т.к., видите ли, каждая программа требует своей версии питона, когда ввожу !py в WinDbg, то показывает, что используется 3.9.1 версия питона. Посмотрим, как это отразится на IDA, которая будет работать с WinDbg, может быть и никак.
      3. Archimag 3 янв 2021
        Проблему решил.
        Нужно было именно 32битный windbg брать и под него ставить 2.7 питон тоже 32битный.
        версия pykd-0.3.4.15 для mona.py вроде подошла.
        yashechka нравится это.
      4. Archimag 2 янв 2021
        PYKD_BOOTSTRAPPER я поставил, вопрос где сейчас взять pykd версии 0.2.0.29 для установки в питон чтобы mona работала?
        Даже 2.7 питон знает только о 0.3.0.11 версии

        c:\Python27\Scripts>pip install pykd==0.2.0.29
        DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
        Collecting pykd==0.2.0.29
        ERROR: Could not find a version that satisfies the requirement pykd==0.2.0.29 (from versions: 0.3.0.11, 0.3.0.12, 0.3.0.13, 0.3.0.14, 0.3.0.15, 0.3.0.16, 0.3.0.17, 0.3.0.18, 0.3.0.19, 0.3.0.20, 0.3.0.21, 0.3.0.22, 0.3.0.23, 0.3.0.24, 0.3.0.25, 0.3.0.26, 0.3.0.27, 0.3.0.28, 0.3.0.29, 0.3.0.30, 0.3.0.31, 0.3.0.32, 0.3.0.33, 0.3.0.34, 0.3.0.35, 0.3.0.36, 0.3.0.37, 0.3.1.3, 0.3.1.4, 0.3.1.5, 0.3.1.6, 0.3.1.7, 0.3.1.8, 0.3.1.9, 0.3.1.10, 0.3.2.0, 0.3.2.1, 0.3.2.2, 0.3.2.4, 0.3.2.5, 0.3.2.6, 0.3.2.7, 0.3.2.8, 0.3.3.0, 0.3.3.1, 0.3.3.2, 0.3.3.3, 0.3.3.4, 0.3.4.0, 0.3.4.1, 0.3.4.2, 0.3.4.3, 0.3.4.4, 0.3.4.5, 0.3.4.6, 0.3.4.7, 0.3.4.8, 0.3.4.9, 0.3.4.10, 0.3.4.11, 0.3.4.12, 0.3.4.13, 0.3.4.14, 0.3.4.15)
        ERROR: No matching distribution found for pykd==0.2.0.29
        WARNING: You are using pip version 19.2.3, however version 20.3.3 is available.
        You should consider upgrading via the 'python -m pip install --upgrade pip' command.
        c:\Python27\Scripts>

        кто то решал эту проблему на Windows 10 более менее недавно?
        yashechka нравится это.
      5. dreamseller 26 окт 2018
        Если в системе установлен только 64-bit WinDBG и ставился он из SDK, 32-битный лежит тут:
        C:\Program Files\Microsoft SDKs\Windows\v7.1\Redist\Debugging Tools for Windows\dbg_x86.msi

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

        З.З.Ы. Можно добавить в ярлык еще: windbg.exe -c ".load pykd.pyd"
        yashechka нравится это.
      6. dreamseller 26 окт 2018
        Если по каким-то причинам pykd.pyd у вас не работает:
        1. ищите PYKD_BOOTSTRAPPER
        2. pykd.dll нужной разрядности выкладывается в winext
        3. !load pykd (без .pyd)
        дальше по тексту
        yashechka нравится это.
      7. yashechka 28 фев 2018
        :preved::preved::preved:
      8. yashechka 27 фев 2018
        Ну и по поводу самого курса.
        Мы прошли больше половины, но только сейчас начинается самое интересное. И Нарваха ещё не закончил.
      9. yashechka 27 фев 2018
        Напоминаю, что идёт сбор средств на покупку мощного ПК. Меня спрашивают, а зачем такой мощный? 1) Потому что у меня техники дома вообще нет, кроме старого ПК, на котором я писал первый курс Нарвахи :lol: 2) Чтобы его на долго хватило. 3) Самое главное!!! Чтобы запускать много виртуальных машин, чтобы строить сложные сети, 3MPLS с MTU 4500 :lol: . Будем скрещивать Джун, Сисю и Мыкрот.
        Далее, если Вам ненравится способ Киви - пишите мне в личку. Вчера так и поступили ))
        И если положили крипту - то же пишите, потому что я должен знать, кто это сделал, чтобы потом списки составить, кто помогал. Вот уже больше месяца положили 600р в ETH, но узнал я про это на днях, но так и не знаю, кто это был.