Трассировка вызовов Windows API - PullRequest
3 голосов
/ 13 апреля 2011

В настоящее время я работаю над инструментом в .NET / Python, который отслеживает определенные события в системе, такие как написание определенных разделов реестра или создание файлов со специальным именем.

Я оценил множество возможностей, и, поскольку мне не нужно заботиться о поддержке WinXP, я использую Event Tracing для Windows, чтобы получить в режиме реального времени поток всех операций с файлами и реестром, и это прекрасно работает (потребляя события из регистратора ядра NT).

Теперь я должен расширить свой инструмент для отслеживания всех вызовов некоторых функций Windows API, таких как WriteProcessMemory, NtUnmapViewOfSection или VirtualAllocEx. Я нашел много инструментов, которые позволяют мне отслеживать все вызовы API из одного процесса, но перехватывать все процессы не очень хорошая идея, правда?

Теперь мне интересно, есть ли возможность использовать ETW для этого. Есть ли какой-либо поставщик, предоставляемый ядром, который уведомляет меня о вызовах API? Если нет, что еще я могу сделать?

Резюме: Если я хочу перехватывать вызовы API, нужно ли перехватывать каждый отдельный процесс?

1 Ответ

2 голосов
/ 13 апреля 2011

Вообще говоря, существует два подхода к перехвату системных вызовов API;или пользовательский режим или перехват режима ядра.Для перехвата API пользовательского режима вам придется подключить каждый процесс, чтобы точно перехватывать / перенаправлять каждый вызов на нужную вам функцию API.Перехват в режиме ядра исключает необходимость перехвата каждого процесса, но также требует дополнительных знаний низкого уровня (и кросс-подписанного сертификата подписи кода для запуска вашего кода в режиме ядра).

Доступен ряд библиотекэто обеспечит функциональность перехвата API, но я считаю, что те, которые мне известны, работают в основном в пользовательском режиме, то есть требуют внедрения общесистемной DLL в процессы.

...