Александр Тарасенко, Использование python для...

19
АВТОМАТИЗАЦИЯ ОТЛАДКИ C/C++ ПРИЛОЖЕНИЙ С ПОМОЩЬЮ PYTHON PYKD – РАСШИРЕНИЕ ДЛЯ ОТЛАДЧИКА WINDBG Александр Тарасенко ст. разработчик

Transcript of Александр Тарасенко, Использование python для...

Page 1: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

АВТОМАТИЗАЦИЯ ОТЛАДКИ C/C++ ПРИЛОЖЕНИЙ С ПОМОЩЬЮ PYTHONPYKD – РАСШИРЕНИЕ ДЛЯ ОТЛАДЧИКА WINDBG

Александр Тарасенкост. разработчик

Page 2: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

КОМУ ЭТО БУДЕТ ИНТЕРЕСНО?

Вы:Разработчик приложений под WindowsПишите на С/C++Знакомы с отладчиком windbg Знаете Python или хотели бы с ним познакомится

Вы бы хотели узнать:Как автоматизировать рутинные операции при отладкеКак расширить функциональность WinDBG

Page 3: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

РАЗРЕШИТЕ ПРЕДСТАВИТЬ:

PyKD – расширение для WinDBG интегрирующее Pythonhttp://pykd.codeplex.com

Факты о PyKD: Проект стартовал в 2010 Язык разработки: C++, MSVC Для интеграции с Python используется Boost.Python Текущая версия 0.3.0.37, поддерживает Python 2.7

Page 4: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

ИНСТАЛЛЯЦИЯ И НАСТРОЙКА

Предустановленное ПО: windbg + python

http://pykd.codeplex.com/releases1. Установить через PyPI

- неудобно использовать внутри windbg

2. Использовать bootstrapper- при первом запуске нужно выполнить команду !pykd.install

3. Установить вручную- нужно задать для python пути к каталогу к pykd

Page 5: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

“HELLO WORLD!”

Page 6: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

PYKD “CHEAT SHEET”

dbgCommand(str) - выполнить любую команду windbgreg(str) – возвратить знaчение регистраptrByte, ptrWord, … - доступ к памятиloadBytes, loadWords, - доступ к регионам памятиclass module - информация о бинарном модулеclass typeInfo - информация о типеclass typedVar – доступ к памяти с учетом информации о типе

Page 7: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

РАБОТА С ТИПАМИ: КЛАСС TYPEINFO

Конструктор:typeInfo( имя_типа )

Назначение:- интроспекция типов ( аналог команды dt )- конструирование объектов typedVar- динамическое определение типов

Page 8: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

ИССЛЕДУЕМ СТРУКТУРУ

Page 9: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

ТИПИЗИРОВАННЫЕ ПЕРЕМЕННЫЕ

Конструктор:typedVar( тип, адрес)typedVar( имя_типа, адрес)typedVar( имя_переменной)Назначение:доступ к памяти отлаживаемого приложения с учетом информации о типах, это позволяет сделать скрипт относительно независимым от версии отлаживаемого модуля

Page 10: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ С КЛАССАМИ PYKD

Классы могут использоваться в арифметический операцияхprint module(‘ntdll’) + 0x100print typedVar(my_var) & 0xFF00Классы могут использоваться в операциях сравненияassert( typedVar(my_test_var) < 100 )Классы могут выступать в качестве целочисленных аргументов функцийtypedVar(“MyType”, g_var.field1)Классы могут использоваться в качестве индексовlistOfVars[ typedVar(my_test_var ]Внимание: «арифметика указателей» не поддерживается

Page 11: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

ПРИМЕР: СПИСОК КРИТИЧЕСКИХ СЕКЦИЙ (!LOCKS -V)

def listCritSections():

ntdll = module("ntdll") dbglst = ntdll.typedVarList( ntdll.RtlCriticalSectionList, "_RTL_CRITICAL_SECTION_DEBUG",

"ProcessLocksList" ) crtlst = [ ntdll.typedVar( "_RTL_CRITICAL_SECTION", critDbg.CriticalSection ) for critDbg in dbglst ] for crtsec in crtlst: dprintln("") dprintln( "CRITICAL SECTION address = %#x ( %s ) " % ( crtsec, findSymbol( crtsec ) ) ) dprintln( " Owning thread = %x" % crtsec.OwningThread ) dprintln( " Lock count = %d" % crtsec.LockCount )

Page 12: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

ОБРАБОТКА ОШИБОК

Все ошибки в pykd возвращаются в виде исключений!!!

DbgExceptionMemoryExceptionSymbolExceptionTypeException

Page 13: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

ДИНАМИЧЕСКАЯ ОТЛАДКА

Управление состоянием отладчикаgo(), trace(), step()

Условные точки остановаbp = setBp( myFunctionAddr, predicat )

Монитор отладочных событийclass eventHandler

Page 14: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

ПОДВОДНЫЕ КАМНИ

Указатели всегда 64 битные ( даже на 32 битной платформе )при работе с адресами памяти необходимо использовать функцию addr64

Объекты в pykd не являются «живыми»после изменения состояния отладчика не гарантируется правильное состояние объекта -> объекты нужно пересоздавать

В pykd существует ограничение на длину вывода

При работе в windbg интерпретатор python может запускаться в «глобальном» и «лоакальном» режимахповедение можно явно задать с помощью ключей –global и –local

Есть ограничения на работу с несколькими потоками

Page 15: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

ИСПОЛЬЗОВАНИЕ PYKD ВНЕ WINDBG

pykd.initialize()Функции управления отладкой:

startProcessattachProcessloadDump

killProcessdetachProcesscloseDump

Page 16: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

ОТЛАДКА СКРИПТОВ С PYKD

Консольный отладчик pdb

Отладка с помощью визуальных отладчиков ( VS+PyTools, PyCharm, Eclipse, … )

KarmaDBG pip install karmadbg

Page 17: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

ПРОЕКТЫ, ИСПОЛЬЗУЮЩИЕ PYKD

Mona.py https://github.com/corelan/monaVolatilityhttps://github.com/volatilityfoundation/volatilityFlare-dbghttps://github.com/fireeye/flare-dbgЕще >10 проектов на github

Page 18: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

НАШИ КООРДИНАТЫ

https://pykd.codeplex.comTwitter: @pykd_devE-mail: [email protected]

Page 19: Александр Тарасенко, Использование python для автоматизации отладки С/C++ кода в Windows

LET'S TALK?Штаб-квартира «Лаборатории Касперского»Ленинградское ш. 39А с2-3

125212, МоскваТел: +7 (495) 797-8700www.kaspersky.ru