Реферат: API Spying

Отсюда вывод: при проведении перехвата необходимо пропустить модули, которые вы сами прямо или косвенно используете. Идеально было бы менять таблицы импорта только в «нестандартных» модулях, так как, скорее всего, именно это вам и нужно: вряд ли вас интересует, какие функции ntdll.dll вызываются во время вызова WriteFile, обычно достаточно просто знать, что приложение вызвало WriteFile. Определять нестандартные модули можно разными способами, мне пришли в голову следующие:

По каталогу, в котором лежит файл.

По дате создания файла (системные файлы обычно имеют вполне определённые даты создания).

По фиксированному списку имён.

Кроме того, всегда есть радикальное решение: написать графический интерфейс и взвалить эту задачу на пользователя. :)

Функция сбора статистики

В соответствии с тем, как она используется функциями-шпионами, функция сбора статистики должна иметь следующие характеристики:

Принимает один четырёхбайтный параметр, передаваемый через стек.

Не возвращает значение (во всяком случае, оно игнорируется).

Сама очищает стек.

Очевидно, как-то собирает какую-то статистику. Как именно и какую, пока не важно.

На C++ это реализуется примерно так:

void __stdcall collectStatistic(unsigned long n)

{

// Что угодно, например такое

functions[n].count++;

printf(("called %s (%d)\n", functions[n].name.c_str(), functions[n].count);

}

В этом примере статистическая информация состоит из имени функции и количества вызовов, всё это хранится в массиве functions, отображением статистики занимается само исследуемое приложение.

Механизм сбора и отображения статистики

Что собирать

Потенциально, функция сборки статистики может для каждого вызова сохранять следующие параметры:

Имя функции.

Имя модуля.

Имя модуля, из которого произошёл вызов.

Идентификатор текущего потока.Время вызова.

Дамп стека.

Состояние регистров процессора

и так далее.

К-во Просмотров: 996
Бесплатно скачать Реферат: API Spying