Member 13881816 Ответов: 2

Как показать все связанные API-интерфейсы DLL запущенных процессов?


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

Любая ссылка на соответствующую веб-страницу будет оценена по достоинству. Заранее спасибо.

Что я уже пробовал:

Я сделал показ Dll-файлов и потоков запущенных процессов.Что я хочу, так это показать API-интерфейсы DLL, используемые в запущенных процессах.

2 Ответов

Рейтинг:
12
Рейтинг:
10

Jochen Arndt

Вы должны обработать IMAGE_IMPORT_DESCRIPTORх Формат PE (Windows)[^].

Обратите внимание, что это (и, вероятно, также ваш фактический код, обнаруживающий используемые библиотеки DLL) не будет работать для библиотек DLL, загруженных с поздним привязыванием (с использованием LoadLibrary() и GetProcAddress()) и библиотеки DLL, связанные статически.


Member 13881816

Я также использую функцию загрузки библиотеки.
Итак, что я должен сделать для этого, если будет сделано позднее связывание ??

Jochen Arndt

Если вы знаете, что используется конкретная библиотека DLL, вы можете получить экспортированные символы из этой библиотеки DLL и найти их в EXE-файле. Поскольку они являются нулевыми завершенными строками ASCII, это не должно давать слишком много ложных срабатываний; особенно с приложениями Unicode, которые содержат в основном строковые литералы Unicode.

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

Вы также можете искать в EXE-файле имена DLL, которые могут быть аргументами для LoadLibrary(). Но это, вероятно, будет работать только тогда, когда программист использовал расширение ".dll". Но когда LoadLibrary() вызывается с именем файла без расширения, ".dll" добавляется по умолчанию, так что многие программисты не включают это расширение.

Member 13881816

Для меня было бы более полезно, если бы все это было описано через кодирование, потому что я застрял особенно в этой концепции.

Jochen Arndt

Какая концепция?

Код для разбора PE-заголовков был бы слишком большим для "быстрых ответов". Но существующий код и статьи можно найти в интернете.

Аналогично для получения экспортированных символов из библиотеки DLL.

Загрузка EXE - файла в память и поиск строк - довольно простая задача.