Нужен API режима ядра, который найдет базовый адрес пользовательского режима Win32 Dll - PullRequest
0 голосов
/ 24 ноября 2011

Я новичок в программировании драйверов устройств.Я следовал за доступными учебниками в Интернете, которые предоставили полезную информацию для начала.Однако теперь я приступил к новому проекту, где единственной целью является поиск функций, которые были перехвачены вредоносными программами или кейлоггерами.Поэтому я думаю, что я разобрался, что мне нужно для достижения этой цели, хотя мне все еще нужно иметь возможность определить адрес загрузки системных библиотек DLL (то есть kernel32.dll, user32.dll и т. П.), Которые уже загружены в память.Мне нужен адрес загрузки, чтобы я мог разобрать их PE, чтобы добраться до разделов экспорта и импорта.Кроме того, добавление адреса загрузки к размеру файла даст мне диапазон адресов для перекрестной ссылки на адреса функций экспорта.Перекрестные ссылки на адрес IMPORT будут немного сложнее, но это можно сделать по моим оценкам.Я думал, что создание драйвера режима ядра будет правильным путем, поскольку доступ к памяти вне диапазона адресов драйвера ядра не будет проблемой для драйвера в отличие от приложения в режиме пользователя.Как еще я смогу получить доступ к адресам, расположенным в EAT и IAT целевой библиотеки DLL?Я знаю, что существует API пользовательского режима, который может предоставить адрес загрузки, в основном, GetModuleHandle, но я хотел бы найти эквивалент в режиме ядра.Я мог бы написать приложение пользовательского режима, которое могло бы передавать эту информацию драйверу, но предпочел бы, чтобы все это было сделано в режиме ядра, если это возможно.Любые предложения или комментарии будут приветствоваться.

Заранее спасибо

Виктор

ps Это сообщение было отредактировано для большей ясности.Надеюсь, это станет более понятным, чем то, что я пытаюсь достичь.

Ответы [ 3 ]

3 голосов
/ 24 ноября 2011

Вероятно, это не очень хорошая идея для работы в режиме ядра.Когда вы собираетесь сделать это и гарантировать, что процесс находится в состоянии, когда вы можете пройти IAT?

Что если процесс находится в процессе загрузки DLL?Если вы выполняете в потоке (то есть из системного вызова или IOCTL устройства), что если другие потоки также выполняются?Делать это, когда у вас нет ОС, очень трудно правильно сделать, и очень легко дестабилизировать машины ваших клиентов (черт, это довольно сложно сделать, даже если вы ОС)

1 голос
/ 01 декабря 2011

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

1 голос
/ 24 ноября 2011

Взгляните на LdrGetProcedureAddress и остальных членов банды.

Редактировать:

MmGetSystemRoutineAddress также может быть полезным.

...