Как отличить драйвер Windows от DLL - PullRequest
2 голосов
/ 03 апреля 2012

Мне нужно различать два бинарных файла - драйвер и общую DLL.Насколько я понимаю, мне нужно просмотреть разделы этих файлов (например, через DumpBin) и посмотреть, есть ли раздел INIT.Этот критерий завершен?

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Вам нужно проанализировать двоичный файл и посмотреть в подсистему IMAGE_OPTIONAL_HEADER, если она является NATIVE, то это драйвер.Смотрите следующую ссылку для деталей:

http://msdn.microsoft.com/en-us/library/ms809762.aspx

0 голосов
/ 03 апреля 2012

Вы должны будете использовать эвристику, чтобы установить этот факт и быть уверенным, насколько это возможно. Проблема в том, что буквально существуют собственные программы пользовательского режима (например, autochk.exe) и библиотеки DLL (откровенно ничего не приходит в голову, но я видел их как часть нативных программ, которые делают вещи до запуска winlogon.exe ), а также аналоги режима ядра (bootvid.dll, hal.dll и ядро ​​в одной из его различных форм ntoskrnl.exe).

Итак, чтобы установить это драйвер, вы можете попробовать следующее:

  1. IMAGE_OPTIONAL_HEADER::SubSystem, как указывалось, должно означать, что он "нативный" (т.е. не имеет подсистемы: IMAGE_SUBSYSTEM_NATIVE)
  2. Убедитесь, что IMAGE_FILE_HEADER::Characteristics - это , а не DLL (что означает, что это DLL ядра или пользовательского режима, проверьте по IMAGE_FILE_DLL)
  3. Убедитесь, что он делает или делает не импорт ntdll.dll или другую DLL пользовательского режима или наоборот, что он импортирует один из модулей режима ядра (ntoskrnl.exe, hal.dll, bootvid.dll ), чтобы установить, будет ли он работать в режиме ядра или пользователя.

Все структуры и определения включены в winnt.h.

Суть:

  • установить подсистему (для вашего случая интересна только IMAGE_SUBSYSTEM_NATIVE)
  • установить это DLL или нет
  • устанавливает, ссылается ли он на компоненты режима пользователя или ядра
...