Показать сообщение отдельно

  #2  
Старый 07.07.2008, 21:51
0x0c0de
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
Провел на форуме:
4226446

Репутация: 1564
Отправить сообщение для 0x0c0de с помощью ICQ
По умолчанию

[Описание плагина]

Делаю небольшое описание функций либы ollylib.py.

[Скриптинг]

1. Начало работы

Любой скрипт нужно начинать с подключении ollylib.py. Делается это так

Код:
 
from ollylib import*
Таким образом вы сможете использовать в вашем скрипте api OllyDbg.

2. Получение значений всех регистров
Для этих целей я написала функцию GReg.
Вызывать так

Код:
GReg(имя_регистра)
Например (и сразу вывод в лог значения):

Код:
eax = GReg("Eax")
Log("eax is %X" % int(str(eax)))
esp = GReg("eSp")
Log("esp is %X" % int(str(esp)))
ebp = GReg("ebp")
Log("ebp is %X" % int(str(ebp)))
esi = GReg("esi")
Log("esi is %X" % int(str(esi)))
edi = GReg("edi")
Log("edi is %X" % int(str(edi)))
eip = GReg("eip")
Log("eip is %X" % int(str(eip)))
ss = GReg("ss")
Log("ss is %X" % int(str(ss)))
ds = GReg("ds")
Log("ds is %X" % int(str(ds))) 
efl = GReg("efl")
Log("efl is %X" % int(str(efl)))
и так далее ....
Полностью пример в Get_Regs.py

Функции вывода подробнее смотреть в п.4

3. Анализ текущего модуля

AnalyseCurrentModule()

Не знаю, нужно ли это было здесь, но все равно. Пример в файле Analyse.py

4.Результат работы скрипта – информационные функции

Код:
Log(”message”) – запись в лог
Flashmes(“message”)  
msg(адрес,”message”)
Err(“message”) – вывод сообщения об ошибке 
Info(“message”)
Пример работы в файле Inf_func.py

5. Получение адреса библиотечной функции
Пример:

Код:
addr_ = Getfuncaddr("kernel32.LoadLibraryA")
и вывод в лог

Код:
Info("LoadLibraryA address %X" %int(addr_))
6. Ассемблирование команды

Код:
Asm(“команда”,адрес)
Пример:

Код:
Asm("sub eax,eax",0x0401000)
Теперь по адресу 0x0401000 инструкция sub eax,eax

7. Постановка хардварного бряка

Код:
Sethardbp(address,size,type)
Варианты типа бряка (последний аргумент)

Код:
HB_CODE  бряк на исполнение      
HB_ACCESS  бряк на доступ     
HB_WRITE                    бряк на запись
Пример постановки бряка на библиотечную функцию

Код:
 
laddr = Getfuncaddr("kernel32.LoadLibraryA")
Sethardbp(long(laddr),4,HB_CODE)

Вся работа с бряками в файле breaks.py

8. Удаление хардварного бряка

Удалить хардварный бряк можно двумя способами. Используя функцию

Код:
Deletehardbp(index)
или

Код:
  
Deletehardbpbyaddr(адрес)
В первом случае указываете значение от 0 до 3 – номер бряка. Во втором – адрес, по которому поставлен бряк.

9. Исполнение программы

Функция Run () – эквивалент F9
Функция StepF8() – F8
Функция StepF7() - F7
Функция RunRet() – Ctrl+F9

Пример в файле ex.py

10. Атач к процессу

Можно осуществить двумя способами. Если вам известен ProcessId, то воспользуйтесь функцией

Код:
Attach(pid)
Если же вам известно имя процесса в памяти, то

Код:
Attachbyname(procname)
Пример в файле Attach.py

11. Постановка мемори-бряков

Функция

Код:
Setmembp(type,addr,size)
Варианты первого параметра

Код:
MEMBP_READ               мемори-бряк на чтение
MEMBP_WRITE              мемори-бряк на запись
12.Выбор и загрузка файла в отладчик

Сначала вызов диалога открытия файла

Код:
Browsefile(title,buf,ext,mode)
title – заголовок окна
buf – буфер для имени
ext – расширение файла

Пример

Код:
buf = ""
Browsefile("Test browse",buf,".exe",0)
Если вы выберете какой-то файл – в переменной buf будет путь к этому файлу

Затем нужно вызвать функцию

Код:
Runfile(path)
Производная от OpenEXEfile из Олиного апи=)
В нашем случае

Код:
Runfile(buf)
Пример в файле open.py

13. Приостановка процесса

Код:
 
Suspend()
14. Восстановление всех нитей процесса

Код:
Restoreallthrd()
15. То, же, что 14, только для 1 треда

Код:
Runthread(thread_id)

16. Дамп региона в файл

Код:
Dumpreg(file_name,base,size)
file_name – имя файла
base – адрес начала региона
size – размер региона

Чтобы получить адрес начала региона воспользуйтесь функцией

Код:
Findmem(адрес_принадлежащий_региону)
Функция возвращает структуру

Код:
typedef struct t_memory {      // Memory block descriptor
  ulong      base;             // Base address of memory block
  ulong      size;             // Size of block
  ulong      type;             // Service information, TY_xxx
  ulong      owner;            // Address of owner of the memory
  ulong      initaccess;       // Initial read/write access
  ulong      access;           // Actual status and read/write access

  ulong      threadid;         // Block belongs to this thread or 0
  char       sect[SHORTLEN];   // Name of module section
  char       *copy;            // Copy used in CPU window or NULL
  ulong      reserved[8];      // Reserved for plugin compatibility
} t_memory;



OllyDbg Plugin API v1.10
*взято из PluginSDK OllyDbg (так как не у всех читающих он есть)

В этой структуре нам надо 2 поля base и size…

Пример в файле dump.py

Последний раз редактировалось 0x0c0de; 10.07.2008 в 13:19..
 
Ответить с цитированием