Как я могу получить список всех API, используемых конкретным процессом (Windows 7)

Я использую C ++ для решения следующей задачи:

Я хотел бы получить список всех функций API, которые используются конкретным процессом. Это может быть любой процесс Windows 7 — 32 или 64, включая системные процессы.

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

Этот метод выглядит опасным и неэффективным.

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

Спасибо.

0

Решение

Нет, это невозможно, по крайней мере, в каком-либо осмысленном или общем смысле.

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

Обратите внимание, что хотя использование интерактивного ввода для чтения имен функций довольно необычно, чтение их из какого-либо внешнего файла встречается довольно часто.

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

Одна возможность состоит в том, чтобы создать «теневую» DLL для каждой библиотеки DLL, на которую программа статически ссылается. Тогда, если это вызывает LoadLibrary/GetProcAddressвы можете динамически перехватывать эти вызовы, чтобы определить, какие функции он вызывает в них, и так далее.

Это все равно не даст абсолютного результата, так как он может (как описано выше) получать данные во время выполнения, чтобы найти функции в одном исполнении, которые он не использует в другом.

Если вы хотите, чтобы существующий инструмент делал (приблизительно) это, подумайте depends.exe. Это было вокруг в течение долгого времени, и работает довольно хорошо.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]