Реферат: API Spying

Политика отображения

Два принципиально разных подхода:

Данные доступны в реальном времени (посредством какого-нибудь GUI).

Данные доступны после завершения исследуемого приложения (в файле на диске).

Оба подхода имеют свои плюсы и минусы: с точки зрения получения данных, очевидно, что первый обладает всеми возможностями второго (если уж данные отображаются, параллельно сохранять их в лог не проблема), а, с точки зрения влияния на исследуемое приложение, второй может получиться гораздо мягче, и в какой-то ситуации это может оказаться критичным. Кроме того, второй подход может оказаться значительно проще в реализации.

ПРИМЕЧАНИЕ

Например, если данные можно в течение всего времени выполнения хранить в памяти, а запись на диск сделать только в самом конце (в DllMain). Или, чуть более интеллектуально, попытаться записывать/передавать данные только в те моменты, когда исследуемое приложение само обращается к диску.

Но, поскольку первый подход гораздо эффектнее (real-time, on-line, и даже мультимедиа, если постараться, – все эти слова можно обоснованно употребить в пресс-релизе :) ), далее рассматривается в основном он.

Где хранить и как отображать статистику

Есть три варианта реализации «сбора и отображения»:

Данные хранятся и отображаются dll, внедрённой в исследуемое приложение.

Данные хранятся dll, внедрённой в исследуемое приложение, для отображения она пересылает их внешнему приложению.

И хранением, и отображением занимается внешнее приложение, dll просто пересылает ему данные по мере поступления.

Наиболее интересен последний вариант (рассматриваем отображение в реальном времени), так как за счёт выноса части логики во внешнее приложение dll получается относительно простой, в результате чего снижается риск случайно испортить что-нибудь в исследуемом приложении, упрощается отладка и повышается надёжность системы в целом.

Реализация

Ограничимся простым случаем:

Отслеживаем только вызовы функций, адреса которых исследуемое приложение получает через GetProcAddress.

Сохраняем только имена функций и модулей.

Отображаем данные в реальном времени. В качестве GUI выступает консоль. :)

Данные хранятся и отображаются во внешнем приложении.

Генерация функции-шпиона

Основную работу по генерации выполняют следующие несложные классы:

// Класс, позволяющий работать с относительными адресами.

// Позволяет копировать относительные адреса, сохраняя их корректными.

struct relative_address

{

relative_address() : value(0) {}

// Корректнокопируетотносительныйадрес.

relative_address(const relative_address& a)

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