Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Автоматизация отладки в
windbg
windbg scripts, использование python и расширение pykd, и многое
другое
Задачи автоматизированной отладки
• Визуализация данных
• Обработка аварийных дампов
• Динамическое управление отладкой
• ...
WinDBG – универсальный отладчик для
Windows
• Поддерживает все типы отладки: локальная ( usermode/kernel
mode), удаленная ...
Архитектура Windbg
Local Debugging Remote Debugging Remote Kernel Mode
Debugging
Dump Analysis
Debug Engine (dbgeng.dll )
...
WinDBG scripts
Основные команды и конструкции
• Комментарии
$$ это комментарий
• Форматированный вывод
.printf “hello world %x”, 2
• Цикл...
Использование информации о типах
• Проверить настройку символов: .sympath !sym noisy !chksym
• dt – display type
• r? Прис...
Полезные инструменты
• !list -t [Module!]Type.Field -x "Commands" -a “Arguments“ StartAddress
• !for_each_module "Commands...
Условные брейкпойнты
• bp Address ".if (Condition) {OptionalCommands} .else {gc}«
• Использование скриптов
bp Address"$$><...
+/- использования встроенных скриптов
Плюсы
• Работают «из коробки»
• Относительно просты в
использовании
• «Заточены» на ...
Дополнительные материалы
• Using Debugger Command Programs:
https://msdn.microsoft.com/en-
us/library/windows/hardware/ff5...
Pykd
Python extension for windbg
Устройство pykd
• Pykd это модуль для CPython
• Pykd это WinDBG extension
• Pykd использует Boost.Python
• Pykd использует...
Инсталляция и использование pykd в
WinDBG
• Ручная установка
• Установка через PyPI:
pip install pykd
pip install –upgrade...
Основные возможности pykd
• Доступ к регистрам: reg(name), cpu().regname
• Доступ к памяти: ptrByte, ptrWord … loadBytes, ...
Пример: таблица экспортов
IMAGE_DOS_HEADER
e_lfanew
IMAGE_NT_HEADERS64
OptionalHeader
DataDirectory[16]
IMAGE_EXPORT_DIREC...
Динамическая отладка
• Условные точки остановки
setBp( offset, callback )
• Монитор отладочных событий
class eventHandler
...
Определение типов
• Производные типы
typeInfo.ptrTo() typeInfo.deref(), typeInfo.arrayOf()
• Базовые типы:
baseTypes
• Опр...
Подводные камни при работе с pykd
• Нормализованные адреса
использование ф. addr64()
• Глобальный и локальный интерпретато...
Прикладное использование
pykd
Стандартные скрипты pykd
https://pykd.svn.codeplex.com/svn/branch/0.3.x/snippets
• просмотр справки help.py
• экспорты и и...
Pykd без windbg
• pykd.initialize()
• pykd.startProcess()
• pykd.loadDump()
• pykd.killProcess()
• pykd.closeDump()
Отладка скриптов
• pdb - стандартный консольный отладчик
h(elp), s(tep), c(ontinue), r(return), p(rint), b(reak), w(here)
...
IPython
• Сайт проекта: http://ipython.org
• Инсталляция: pip intsall ipython[notebook]
• Запуск web сервера: ipython note...
Mona.py
Exploit Development Swiss Army Knife
• https://github.com/corelanc0d3r
• https://www.corelan.be/
Volatility
An advanced memory forensics framework
• https://github.com/volatilityfoundation
Заключение
Всем спасибо!
Наши координаты:
• http://pykd.codeplex.com
• http://karmadbg.codeplex.com
• Twitter: @pykd_dev
• E-mail: pykd.codeplex@ho...
Upcoming SlideShare
Loading in …5
×

Автоматизация отладки в windbg

1,235 views

Published on

Автоматизация отладки в windbg

Published in: Technology
  • Be the first to comment

Автоматизация отладки в windbg

  1. 1. Автоматизация отладки в windbg windbg scripts, использование python и расширение pykd, и многое другое
  2. 2. Задачи автоматизированной отладки • Визуализация данных • Обработка аварийных дампов • Динамическое управление отладкой • Диагностика при автоматизированном тестировании
  3. 3. WinDBG – универсальный отладчик для Windows • Поддерживает все типы отладки: локальная ( usermode/kernel mode), удаленная отладка ядра ( COM/1394/USB/NET ), отладка по сети ( клиент/сервер ), анализ дампов • Все Windows платформы x86/x64 • Поддержка native и managed • Распространяется как часть Windows Kits
  4. 4. Архитектура Windbg Local Debugging Remote Debugging Remote Kernel Mode Debugging Dump Analysis Debug Engine (dbgeng.dll ) DbgHelp (dbghelp.dll) SymSrv SrcSrv DIA Extensions
  5. 5. WinDBG scripts
  6. 6. Основные команды и конструкции • Комментарии $$ это комментарий • Форматированный вывод .printf “hello world %x”, 2 • Циклы и ветвления .if ( condition ) {} .else {} .while( condition ) { .break .continue } .for ( loop init; loop condition; loop increment) {} • Контроль ошибок .catch { .leave } • Алиасы установка as, aS удаление ad перечислить al ${ } - интерпретатор алиасов • Предустановленные алиасы $ntsym и др. • Псевдорегистры r $t1 = @$t2 • Автоматические псевдо регистры $ea $ip и др. • Интерпретаторы @@C++() @@masm() • Операторы MASM not, hi, low, poi и др $iment, $spat, $vvalid • Запуск скрпита $$>< $$>a< аргументы: ${$argn}
  7. 7. Использование информации о типах • Проверить настройку символов: .sympath !sym noisy !chksym • dt – display type • r? Присвоение значение псевдорегистру с использованием информации о типе • Используем ?? и @@C++ C++ макросы: #CONTAINING_RECORD #FIELD_OFFSET #RTL_CONTAINS_FIELD
  8. 8. Полезные инструменты • !list -t [Module!]Type.Field -x "Commands" -a “Arguments“ StartAddress • !for_each_module "Commands" алисаы: @#Base, @#LoadedImageName и др • !for_each_frame • !for_each_local • !for_each_process • !for_each_thread • .foreach
  9. 9. Условные брейкпойнты • bp Address ".if (Condition) {OptionalCommands} .else {gc}« • Использование скриптов bp Address"$$><script_file“ • Пример: логер API ф NTSTATUS NtCreateFile( PHANDLE FileHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes, // x64 - r8, x86 – [esp + 0xC] PIO_STATUS_BLOCK IoStatusBlock, PLARGE_INTEGER AllocationSize, ULONG FileAttributes, ULONG ShareAccess, ULONG CreateDisposition, ULONG CreateOptions, PVOID EaBuffer, ULONG EaLength );
  10. 10. +/- использования встроенных скриптов Плюсы • Работают «из коробки» • Относительно просты в использовании • «Заточены» на использование в windbg Минусы • Бедные инструментальные средства • Отсутствуют какие-либо библиотеки • Неудобно отлаживать • Скорость (???)
  11. 11. Дополнительные материалы • Using Debugger Command Programs: https://msdn.microsoft.com/en- us/library/windows/hardware/ff560096(v=vs.85).aspx • Debugging toolbox http://blogs.msdn.com/b/debuggingtoolbox/ • Kernel Debugger Antirootkit: http://kdar.codeplex.com
  12. 12. Pykd Python extension for windbg
  13. 13. Устройство pykd • Pykd это модуль для CPython • Pykd это WinDBG extension • Pykd использует Boost.Python • Pykd использует kdlibcpp ( http://kdlibcpp.codeplex.com )
  14. 14. Инсталляция и использование pykd в WinDBG • Ручная установка • Установка через PyPI: pip install pykd pip install –upgrade pykd • Загрузка расширения: .load pykd • Pykd bootstrapper !pykd.install • !pykd.py - основная команда ( или просто !py )
  15. 15. Основные возможности pykd • Доступ к регистрам: reg(name), cpu().regname • Доступ к памяти: ptrByte, ptrWord … loadBytes, loadWords, …. • Работа с модулями: class module() • Работа с типами: class typeInfo() • Типизированные переменные: class typedVar()
  16. 16. Пример: таблица экспортов IMAGE_DOS_HEADER e_lfanew IMAGE_NT_HEADERS64 OptionalHeader DataDirectory[16] IMAGE_EXPORT_DIRECTORY …. +0x014 NumberOfFucntions +0x018 NumberOfNames +0x01C AddressOfFunctions +0x020 AddressOfNames +0x024 AddressOfNamesOrdinals
  17. 17. Динамическая отладка • Условные точки остановки setBp( offset, callback ) • Монитор отладочных событий class eventHandler onBreakpoint onLoadModule/onUnloadModule onException onExecutionStatusChanged onThreadStart/onThreadStop
  18. 18. Определение типов • Производные типы typeInfo.ptrTo() typeInfo.deref(), typeInfo.arrayOf() • Базовые типы: baseTypes • Определение новых структур createStruct, createUnion
  19. 19. Подводные камни при работе с pykd • Нормализованные адреса использование ф. addr64() • Глобальный и локальный интерпретатор ( --global и –local ) • Ограничения на длину вывода
  20. 20. Прикладное использование pykd
  21. 21. Стандартные скрипты pykd https://pykd.svn.codeplex.com/svn/branch/0.3.x/snippets • просмотр справки help.py • экспорты и импорты ( export.py, iat.py ) • регистры CR ( cr0.py, cr4.py ) • для разработчиков драйверов: ctlcode.py, findtag.py • для разработчиков сетевых драйверов: nbl.py
  22. 22. Pykd без windbg • pykd.initialize() • pykd.startProcess() • pykd.loadDump() • pykd.killProcess() • pykd.closeDump()
  23. 23. Отладка скриптов • pdb - стандартный консольный отладчик h(elp), s(tep), c(ontinue), r(return), p(rint), b(reak), w(here) • IDLE, Eclipse, PyTools, …. • karmadbg ( karmadbg.codeplex.com )
  24. 24. IPython • Сайт проекта: http://ipython.org • Инсталляция: pip intsall ipython[notebook] • Запуск web сервера: ipython notebook [--ip=0.0.0.0]
  25. 25. Mona.py Exploit Development Swiss Army Knife • https://github.com/corelanc0d3r • https://www.corelan.be/
  26. 26. Volatility An advanced memory forensics framework • https://github.com/volatilityfoundation
  27. 27. Заключение Всем спасибо!
  28. 28. Наши координаты: • http://pykd.codeplex.com • http://karmadbg.codeplex.com • Twitter: @pykd_dev • E-mail: pykd.codeplex@hotmail.com

×