Windows 7 перехват драйверов - PullRequest
       38

Windows 7 перехват драйверов

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

Мой вопрос касается разработки драйверов для Windows 7.

Мне нужно перехватить системные вызовы драйвера.Теоретически в таких случаях рекомендуется создавать драйвер фильтра, однако в моем случае драйвер не предоставляет интерфейс, совместимый с фильтром.Точнее, это драйвер минипорта дисплея Vista / 7.

Драйвер дисплея загружается как стандартный драйвер WDM.В его DriverEntry ожидается, что он вызовет системную подпрограмму DxgkInitialize (я предполагаю, что она экспортирована win32k.sys).Моя цель - перехватить этот вызов.

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

Ключ к победе, вероятно, заменяет DxgkInitialize враздел импорта исполняемого драйвера с адресом моей функции.Проблема заключается в том, что это должно быть сделано после загрузки исполняемого файла (отображение + перемещение при необходимости + все записи таблицы импорта подготовлены), но за до вызывается точка входа драйвера.

Я подумал о следующих параметрах:

  • Отобразить исполняемый файл в системную память и «подготовить» его вручную (т.е. выполнить работу загрузчика).Затем подключите необходимые функции и запустите точку входа.
  • С некоторым усилием ZwSetSystemInformation может быть использовано для загрузки модуля (?)
  • Возможно, исправьте export раздел модуля, который экспортирует DxgkInitialize.Так что загрузчик автоматически перенаправит каждый загруженный модуль в мои руки.

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

1 Ответ

0 голосов
/ 14 июня 2013

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

Шаги, которые я бы предпринял, вероятно, будут включать:

  1. Кто экспортирует DxgkInitialize? Не угадывайте win32k, посмотрите. (Я не дам вам ответ). Может быть, вы можете легко подключить вызываемого, а не вызывающего абонента.

  2. Есть ли у меня какие-либо обратные вызовы, когда загружается модуль драйвера, но до его запуска? Поиск PsSetLoadImageNotifyRoutine. Возможно, он предоставит вам подходящий временной интервал для исправления IAT драйверов (если вы не знаете, что такое таблица адресов импорта, пересмотрите перехват).

Я вижу из комментариев, что вы в первую очередь заинтересованы в "шпионаже на показах". Я не уверен, что это разрешено на компьютерах, которые вы не полностью контролируете. Но давайте предположим ради вопроса, что это законно.

В зависимости от разрешения, которое вы хотите получить, вам не нужен драйвер. Черт возьми, вам едва нужна DLL. Ищите оконные хуки для частичных решений и обратных вызовов доступности.

...