![]() |
[Python plugin for OllyDbg]
Сабж. Плаг позволяет писать скрипты на питоне под ольгу.
Нашла 2 плага 2007 года под 2.4 питон, но увидеть воочию их работу мне так и не удалось. У меня стоял 2.5, а потому решила переписать под него. Проверила некоторые функции и написала небольшую либу, чтобы упростить работу. Понятное дело, что вам для теста требуется отладчик OllyDbg+Python 2.5+знание питона (у меня питон, который устанавливался с immunity dbg, отдельно не качала). В папке system32 обязательно должна быть либа Python25.dll Для тех, кто принципиально не заглядывает в readme [Install] 1.Файл ODBG_pyth.py и ollylib.py положите в папку \Python25\Lib 2.Файл _ODBG_pyth.pyd положите в папку \Python25\DLLs 3.Либу Python_Int.dll в директорию с плагинами OllyDbg Интерпретатор должен быть нормально настроен, чтобы все либы находились в вышеуказанных директориях и нормально работали. Запускать скрипт командой меню OllyDbgPython plugin -> Run script. И выбираем скрипт. Чтобы проверить работу плагина - воспользуйтесь примерами из папки example. *В этот момент в отладчик должно быть что-то загружено. В ollylib - те функции, которые я проверила. качаем, кому интересно http://0x0c0de.net/plugin_python.rar Пишем, что хотелось бы увидеть. Для каких функций требуются примеры. Багрепорты и пожелания лучше в осеку пишите, ибо там я в последнее время бываю чаще, чем на форуме. Набор апишек у ольги немаленький, потому за несколько дней кодеса обработать, проверить на работоспособность и привести в норм вид все просто нереально. Писалось для интереса, так как ничего подобного никогда не делала. И у меня уже за эти несколько дней были активные разборки со SWIG из-за типов данных) Видео по настройке и запуск примера http://0x0c0de.net/Ollypy.rar #-------Добавлено 4.07.2008------------------------ Перезалито. Добавлены новые функции в ollylib.py. В плагине и разделяемой библиотеке отключила прилинковку msvcp80, так что теперь не нужно доп либ никаких. #----Добавлено 6.07.2008--------------- 1. Добавлена функция Attach_by_name(имя_процесса_в_памя ти) 2. Добавлена функция dump_mem(имя_файла_для_дампа,ад ес_начала_региона, размер_региона) 3. Добавлен еще один пример использования И еще некоторые мелкие исправления *Иногда примеры нужно модифицировать (в зависимости от базового адреса загрузки загруженной под отладку проги) Nice try! #------Добавлено 7.07.2008----------------- 1. Все перезалито. Перекроила все примеры. Добавила доку по ollylib, которую вы можете лицезреть ниже #----------Добавлено 9.07.2008----------- 1. Снова апдейт. Добавлены новые функции. Смотрим последний пост #----------Добавлено 10.07.2008--------- Добавлена справка. немного модифицированы примеры #----------Добавлено 11.07.2008---------------- Перезалито, теперь более полную информацию можно получить в ollylib.py. Там есть прототипы функций... Добавлены новые примеры и функции. Смотрим последний пост |
[Описание плагина]
Делаю небольшое описание функций либы ollylib.py. [Скриптинг] 1. Начало работы Любой скрипт нужно начинать с подключении ollylib.py. Делается это так Код:
2. Получение значений всех регистров Для этих целей я написала функцию GReg. Вызывать так Код:
GReg(имя_регистра)Код:
eax = GReg("Eax")Полностью пример в Get_Regs.py Функции вывода подробнее смотреть в п.4 3. Анализ текущего модуля AnalyseCurrentModule() Не знаю, нужно ли это было здесь, но все равно. Пример в файле Analyse.py 4.Результат работы скрипта – информационные функции Код:
Log(”message”) – запись в лог5. Получение адреса библиотечной функции Пример: Код:
addr_ = Getfuncaddr("kernel32.LoadLibraryA")Код:
Info("LoadLibraryA address %X" %int(addr_))Код:
Asm(“команда”,адрес)Код:
Asm("sub eax,eax",0x0401000)7. Постановка хардварного бряка Код:
Sethardbp(address,size,type)Код:
HB_CODE бряк на исполнение Код:
Вся работа с бряками в файле breaks.py 8. Удаление хардварного бряка Удалить хардварный бряк можно двумя способами. Используя функцию Код:
Deletehardbp(index)Код:
9. Исполнение программы Функция Run () – эквивалент F9 Функция StepF8() – F8 Функция StepF7() - F7 Функция RunRet() – Ctrl+F9 Пример в файле ex.py 10. Атач к процессу Можно осуществить двумя способами. Если вам известен ProcessId, то воспользуйтесь функцией Код:
Attach(pid)Код:
Attachbyname(procname)11. Постановка мемори-бряков Функция Код:
Setmembp(type,addr,size)Код:
MEMBP_READ мемори-бряк на чтениеСначала вызов диалога открытия файла Код:
Browsefile(title,buf,ext,mode)buf – буфер для имени ext – расширение файла Пример Код:
buf = ""Затем нужно вызвать функцию Код:
Runfile(path)В нашем случае Код:
Runfile(buf)13. Приостановка процесса Код:
Код:
Restoreallthrd()Код:
Runthread(thread_id)16. Дамп региона в файл Код:
Dumpreg(file_name,base,size)base – адрес начала региона size – размер региона Чтобы получить адрес начала региона воспользуйтесь функцией Код:
Findmem(адрес_принадлежащий_региону)Код:
typedef struct t_memory { // Memory block descriptorВ этой структуре нам надо 2 поля base и size… Пример в файле dump.py |
17. Запись в память
Код:
Writemem(addr,buf,size)buf – откуда копируем байты size – размер буфера 18. Дизассемблирование команды Код:
Disassm(addr,type)Второй параметр – тип дизасма Код:
DISASM_SIZE получение длины командыКод:
typedef struct t_disasm { // Results of disassemblingНебольшой пример в файле disasm_test.py 19. Ввод числа Для этих целей существует функция Код:
Getlng(title,size)size – размер вводмого значения в байтах (1,2,4) Возвращаемое значение функции – введенное число Пример в файле example_input.py 20.Постановка темпового бряка Код:
21.Обычные бряки Код:
Setbp(addr,type,cmd) |
22. Получение информации о модуле
Код:
Findmod(addr)Код:
typedef struct t_module { // Executable module descriptorПример использования в файле modul.py 23.Получение ид текущей нити Код:
Getcputhrdid()Код:
Findthrd(id)thrd.py 25. Получение имени треда Код:
Decodethrdname(buf, tid,mode)26. Обнаружение VmWare Обнаружение VmWare. Код:
IsVmWare()Пример в файле vmWarecheck.py. 27. Ввод строки пользователем Функция Код:
28. Поиск команды “вперед” от текущей инструкции Код:
Disasmin(addr,str)Пример можно посмотреть в файле disasm_test.py 29. Поиск команды “назад” от текущей инструкции Код:
Disasmback(addr,str)Пример можно посмотреть в файле disasm_test.py 30. Поиск команда по опкоду "вперед" Код:
31. Поиск команда по опкоду "назад" Код:
|
32. Получение информации об инструкции
Код:
Вы вводите инструкцию в окно ввода, функция заполняет структуру t_asmmodel информацией об этой команде. Напомню, что структура имеет вид Код:
typedef struct t_asmmodel { // Model to search for assembler command33. Поиск команды Код:
Findallcmds(pd,model,origin,title)Второй параметр - заполненная структура t_asmmodel (см. п. 32) Третий параметр - адрес, которого следует начинать поиск Четвертый параметр - заголовок окна Поиск команды. Следует заполнить структуру t_dump (первый параметр) для того, чтобы все работало. Структура t_dump Код:
typedef struct t_dump { // Current status of dump windowПример в файле find_cmds.py 34. Преобразование виртуального адреса в смещение в исполняемом файле Код:
Searchfileoffset(pmod,addr)35. Ввод 64-битного MMX числа Код:
GetMmx(title,data,mode)Код:
GetMmxXY(title,data,mode)Вторая функция тож самое, что и первая, ток можно координаты указать окна Пример в файле get_mmx.py Добавила прототипы функций в либу ollylib.py. Так что теперь удобней. Это лучшая справка =) |
Справку перезалила отдельно от основного архива, сделала скрины, обновила набор функций. За прототипами go to ollylib.py. Сам плаг тоже перезалила
download http://0x0c0de.net/Plugin_Python.chm |
Полезное дополнение. 4 новых функции.
Первая фукция Код:
Getnumberofmods()Далее функция, напрямую зависящая от предыдущей Код:
Getmodule(number)Возвращаемое значение - структура mod_info [я еще в нормальный вид не до конца привела - вот руки дойдут и будут вам, товарищи, все поля] Код:
typedef struct mod_info { Далее две аналогичные функции, только для блоков памяти Код:
Getnumberofblocks()Код:
Getmemoryblock(number)Возвращаемое значение - структура mem_blocks Структура mem_blocks Код:
Все перезалито. |
Все, что ты делаешь, это конечно круто, но:
http://www.python.org/dev/peps/pep-0008/ Naming Conventions |
>>http://www.python.org/dev/peps/pep-0008/
>>Naming Conventions Оо, спасибо. не видела этого. Дельно, исправлю имеющиеся косяки в ближайшее время. |
| Время: 00:36 |