Мне нужно отличать два двоичных файла - драйвер и общую dll. Насколько я понимаю, мне нужно просмотреть разделы этих файлов (например, через DumpBin) и посмотреть, есть ли раздел INIT. Являются ли эти критерии завершенными?Как отличить драйвер Windows от dll
ответ
Вам нужно разобрать двоичный файл и посмотреть в подсистему, зарегистрированную в IMAGE_OPTIONAL_HEADER, если это NATIVE, то это драйвер. Посмотрите на следующую ссылку для деталей:
Не совсем верно. Это может быть родная программа или DLL или DLL в режиме ядра. «Родной» на самом деле означает ничего, кроме «* no * подсистемы». Это не какая-то волшебная подсистема, живущая где-то на каждой машине Windows :) – 0xC0000022L
Вы должны использовать эвристику, чтобы установить этот факт и быть уверенным, насколько это возможно. Проблема в том, что в буквальном смысле существуют собственные программы пользовательского режима (например, autochk.exe
) и библиотеки DLL (откровенно ничего не приходит в голову, но я видел их как часть собственных программ, которые делают вещи до запуска winlogon.exe
), а также (bootvid.dll
, hal.dll
и ядро в одной из его различных форм ntoskrnl.exe
).
Так установить его драйвер, вы можете попробовать следующее:
IMAGE_OPTIONAL_HEADER::SubSystem
, как отмечалось, должно означать, что это «родной» (т.е. не имеет подсистемы:IMAGE_SUBSYSTEM_NATIVE
)- Убедитесь, что
IMAGE_FILE_HEADER::Characteristics
является не DLL (который будет означать, что это ядро или пользовательский режим DLL, сверятьIMAGE_FILE_DLL
) - Убедитесь, что он делает или делает не импорта
ntdll.dll
или другой пользовательский режим DLL или наоборот, что он импортирует один из модулей режима ядра (ntoskrnl.exe
,hal.dll
,bootvid.dll
), чтобы установить, будет ли он работать в режиме ядра или пользователя.
Структуры и определения все включены в winnt.h
.
Суть:
- установить подсистему (только
IMAGE_SUBSYSTEM_NATIVE
интересен для Вашего случая) - установить его является DLL или не
- установить ссылки ли он против режима ядра пользователя или компонентов
Просто просмотрите поле IMAGE_OPTIONAL_HEADER.SubSystem. Dumpbin.exe/headers также отображает его. –