Реферат: API Spying

записать в то же место адресного пространства образ dll.

молиться.

Это один из самых «грязных хаков», которые я когда-либо проворачивал :) Иногда оно работает, иногда – нет. И даже если всё на первый взгляд работает, я не берусь сказать, какие будут побочные эффекты.

Подводя итог: если задача и имеет хорошее решение, его описание выходит далеко за рамки этой статьи. Поэтому наша dll будет выгружаться, хотя иногда это и может привести к проблемам.

Неосвобождаемая память

С памятью проще: чтобы её точно никто не освободил, достаточно отказаться от стандартного оператора new, и использовать вместо него placement new, выделяя память как-нибудь иначе.

ПРИМЕЧАНИЕ

Во время тестов обнаружилось, что в Windows XP, при выделении памяти обычным new и статической линковке CRT, некоторые (не все и не всегда, но вполне воспроизводимо) блоки памяти с функциями-шпионами оказываются освобождены. При использовании CRT в dll этой проблемы не было, с чем всё это связано, я не знаю.

Результат

Yes! Оно работает!! :)

ПРЕДУПРЕЖДЕНИЕ

Нормального тестирования не проводилось, кроме того, у меня под рукой не оказалось Windows NT 4. Но на Windows 2000, XP и 2003 Server проверил, на первый взгляд всё путём… И даже XP SP2 не страшен :)

Для успешного старта надо положить spyloader.exe и apispy.dll в один каталог, после чего запустить spyloader, передав ему в командной строке путь к exe-файлу исследуемого приложения.

Только приготовьтесь к тому, что GetProcAddress – довольно популярная функция, и получить сотню функций-шпионов (то есть вызовов GetProcAddress) при исследовании notepad.exe – не вопрос, достаточно попытаться открыть какой-нибудь файл. А уж если вы запустите справку и немного по ней походите… У меня получилось 530 функций-шпионов за две минуты :) Поэтому, если вы действительно будете реализовывать нечто подобное, то лучше фиксировать не всё подряд, а фильтровать вызовы хотя бы по имени модуля.

Список литературы

Тихомиров В.А. «Перехват API-функций в Windows NT/2000/XP».

Игорь Филимонов «Методы перехвата API-вызовов в Win32»

Intel Corporation «IA-32 Intel Architecture Software Developer’s Manual», части 2A и 2B

Максим М. Гумеров «Загрузчик PE-файлов»

Сергей Холодилов «HOWTO: Вызов функции в другом процессе»

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