Руководство пользователя API Logger
Утилита предназначена для отслеживания вызовов API-функций из других программ, причем функция не обязательно должна быть API, т.е. можно отследить вызов внутренних функций из EXE или DLL

Использование:
1. Выберите файл EXE или DLL
2. После запуска в папке с программой появится файл с расширением .apilog.txt (Если отслеживали DLL, то файл будет лежать в папке injector.exe и будет называться injector.apilog.txt Связано с тем что шпион загружает длл в самого себя и ведет лог)

Что такое база данных и для чего она нужна?
Под базой данных понимается текстовый файл, определенного содержания. В ней хранятся имена dll-ок и функций из этих библиотек, которые вас интересуют. Самые общеупотребительные лежат в db.txt. Формат простой:
[имя1_dll]
 Функция_1, количество параметров, опции
 Функция_2, количество параметров, опции

[имя2_dll]
 Функция_1, количество параметров, опции
 Функция_2, количество параметров, опции
Опции могут отстутствовать. Если не указано количество параметров, то считается что их нет.

; - Символ точки с запятой означает комментарий. После него все до конца строки будет игнорироваться
Примеры:
;Функция задана по имени из user32.dll
[user32.dll]
    LoadBitmapA ,1
    LoadBitmapW ,1
; Функция задана ординалом (1A) из user32.dll
[user32.dll]
!1A , FunctionName , 1
Функция задана относительным адресом из user32.dll
+A1DC , FuncName , 4

;Функция задана абсолютным адресом
@4010CA, FuncName, 4

Опции:

Регистры могут логироваться, для этого есть опции:
#reg - общего назначения (eax, ecx, edx..........)
#ecx – только ECX(this у MSVC)
#eax – только EAX(this у Borland)
#fpu – FPU регистры
#mmx – MMX регистры
#xmm – XMM регистры
#tacts - Показывает сколько тактов занимает функция, может быть полезен для профилировки функции

Формат базы гибкий, т.е не обязательно все указывать, а только те что надо, можно и комбинировать
Например типа этого:
@401000 MySuperPuperFunction 4 #reg
@401230 Super 2 #fpu #reg #mmx
@401230 Ultra 3

Дампим в лог регистры, количество тактов функции, регистры FPU
[user32.dll]
    LoadBitmapA ,2 ,#reg, #tacts, #fpu
По умолчанию в файле db.txt содержатся имена функций из двух библиотек: kernel32.dll и user32.dll, которые я создал.
Что делать, если нам нужно исследовать программу, которая использует свои DLL?
Есть как минимум три варианта:

1. Если это стандартная dll, и для неё существует свой .inc файл (я брал из поставки masm32), то считайте вам немножко повезло. Просто запускаете parseinc.pl из папки Tools приблизительно так: perl parseinc.pl incfile.inc dbfile.txt У вас должен быть установлен perl.
2. У вас есть просто dll, и Вам нужно узнать, как программа работает с этой dll. Тогда берете утилиту imex2spy.exe из папки Tools и получаете готовую базу. Количество параметров у функции нужно подправить самим
3. Наберите в текстовом редакторе

API Logger Options
settings.ini
[Settings]
;Имя файла с базой или полный путь
DBFile="db.txt"
;Режим работы. Допустимые значения=0,1,2,3
;0-обычный режим
;1-режим совместимости(выходное значение не логируется, нет дерева вызовов)
;2, 3 – дополнительные режимы. (если не сработал)
Mode=0
;Длины строк для анализа
MinStrLen=3
MaxStrLen=100

;Выводить в лог идентификатор потока. Допустимые значения=0,1
;Не выводить/выводить
TID=1

;Выводить или нет только корневую функцию. Допустимые значения=0,1
RootFunc=0

;Количество хуков устанавливаемых плагином (Можно взять большое число и не менять)
PluginHooks=200

;Вывод расширенных имен. Допустимые значения=0,1. Например user32.MessageBoxA вместо MessageBoxA
ExtFuncNames=0

;Выводить в лог только вызовы из EXE
OnlyExeCalls=0
;Не создавать лог (Сделано для плагинов, если плагином создается другой лог)
DisableLog=0

;Список модулей для исключения вывода. Например "kernel32.dll, user32.dll, gdi32.dll"
ExcludeModules=""

;Список модулей для включения в вывод. Например "kernel32.dll, user32.dll, gdi32.dll"
IncludeModules=""



Как улучшить читаемость лога шпиона

1. Уменьшайте размер базы до минимальной, – меньше глюков, выше читабельность отчета и.т.п.
Можно закомментировать ненужные функции в базе.

2. Отфильтровать каким-нибудь парсером, например, написанным на том же perl.

Создайте свою базу, в которой будут только интересующие вас функции.Например, если вас интересуют только, как программа работает с файлами, зачем перехватывать все остальные?
Например, база типа этой:
[kernel32.dll]
        CreateFileA, 5
        CreateFileW,5
        SetFilePointer,5
        ReadFile,5
        WriteFile, 5
        CloseHandle,1

© black_ninja    http://blackninja2000.narod.ru

Используются технологии uCoz