2012-04-03 25 views
2

我需要區分兩個二進制文件 - 一個驅動程序和一個常見的DLL。據我所知,我需要查看這些文件的部分(例如通過DumpBin),看看是否有一個INIT部分。這個標準是否完整?如何區分Windows驅動程序與DLL

+2

只要看看IMAGE_OPTIONAL_HEADER.SubSystem字段。 Dumpbin.exe /頭文件也會顯示它。 – 2012-04-03 17:31:47

回答

1

您需要解析二進制文件並查看IMAGE_OPTIONAL_HEADER的子系統字段,如果它是NATIVE,那麼它是一個驅動程序。看看下面的鏈接瞭解詳細信息:

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

+0

並非完全如此。它可能是一個本地程序或DLL或內核模式DLL。除了「* no *子系統」之外,「本地」其實並不意味着什麼。這不是一個神奇的子系統生活在每臺Windows機器上:) – 0xC0000022L 2012-04-03 17:54:00

0

你將不得不使用啓發式確立這一事實,並肯定儘可能。問題在於,確實存在本地用戶模式程序(例如autochk.exe)和DLL(坦率地說,沒有任何東西可以讓人想起,但我已經將它們看作本地程序的一部分,它在winlogon.exe運行之前執行)以及內核模式對應(bootvid.dllhal.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.exehal.dllbootvid.dll)以確定它是否以內核模式或用戶模式運行。

結構和定義都包含在winnt.h中。

要點:

  • 建立子系統(僅IMAGE_SUBSYSTEM_NATIVE是你的案子有意思)
  • 建立它是一個DLL或不
  • 確定它是否鏈接對用戶或內核模式組件