2013-02-23 100 views
3

有沒有辦法檢查單個(C++編譯的)DLL文件並找出Win32函數調用它的內容?如何檢查DLL的信息

我有MyDll.dll文件。我知道在這個DLL的某個地方,有一段代碼從Windows註冊表中檢索信息。

有沒有辦法找出DLL正在訪問的註冊表項?

回答

3

您可以訪問DLL的PE Imports表以確定DLL靜態鏈接到哪個Win2 API函數,但這並不能保證函數實際上是在DLL的代碼中調用的,並且這也不包含Win32 API函數通過GetProcAddress()動態加載。

要找出註冊表項中的DLL正在訪問它,您可以:

  1. 拆機/反編譯的DLL,如用IDA,並期待在所有的代碼中RegOpenKeyEx()RegQueryValueEx()的地方,和其他註冊表功能正在被調用。
  2. 編寫一個應用程序,該應用程序將DLL加載到內存中並動態修補註冊表函數導入,以便攔截輸入參數值。
  3. 使用SysInternals Process Monitor,像Ben建議的那樣。
3

您需要執行DLL;如果你這樣做了,那麼Sysinternals(現在是Microsoft的一部分)進程監視器將顯示進程所做的所有註冊表訪問,並捕獲每個堆棧跟蹤(可用於查找來自該DLL的調用)。

0

有來自Heaventools Software的PE Explorer

導出功能列表查看器顯示可能由其他應用程序調用的那些功能。

有關更多詳細信息,請參見DLL Export Viewer頁面。