2009-05-28 70 views
39

我對如何在Windows中查找未記錄的API感到好奇。在Windows中查找未記錄的API

我知道使用它們涉及的風險,但這個問題的重點是找到它們,而不是是否使用它們。

+0

-1糟糕的問題:這是*從來不是一個好主意,使用未公開的API;他們由於某種原因沒有記錄,風險不在你身上,而在於你的操作系統供應商(如果他們關心app compat的話)。 – 2009-05-28 17:29:10

+30

+1不是一個壞問題。在操作系統的內部或其他任何東西上撥動都沒有錯。好奇心是一件好事。只是不要依賴無證行爲。 – 2011-02-04 13:05:23

回答

32

使用工具從共享庫中轉儲導出表(例如,一個.dll如KERNEL32.DLL)。您會看到指定的入口點和/或有序入口點。通常對於窗口來說,命名的入口點是未加密的(extern「C」)。您很可能需要對彙編代碼進行一些窺視,並從堆棧框架(如果存在的話)和註冊使用情況中派生參數(類型,數量,順序,調用約定等)。如果沒有堆棧框架,它會有點困難,但仍然可行。請參閱以下鏈接爲引用:

  1. http://www.sf.org.cn/symbian/Tools/symbian_18245.html
  2. http://msdn.microsoft.com/en-us/library/31d242h4.aspx

退房工具,如dumpbin調查出口部分。

也有網站和書籍,在那裏,儘量保持無證的Windows API的更新列表:

  1. The Undocumented Functions
  2. A Primer of the Windows Architecture
  3. How To Find Undocumented Constants Used by Windows API Functions
  4. Undocumented Windows
  5. Windows API

編輯: 這些相同的原理適用於多種操作系統,但是,您需要替換您用於轉儲導出表的工具。例如,在Linux上,您可以使用nm轉儲一個目標文件並列出其導出部分(以及其他內容)。您也可以使用gdb來設置斷點並逐步通過入口點的彙編代碼來確定參數應該是什麼。

+0

您也可以將這一個添加到您的列表中:http://www.codeproject.com/KB/system/Win32.aspx – claws 2010-03-22 12:31:08

+0

第2和第4鏈接是相同的。 – claws 2010-03-22 18:01:00

1

看看系統DLL以及它們輸出的功能。每個API函數,無論是否有文檔,都會導出其中的一個(用戶,內核,...)。

1

對於用戶模式API,您可以打開Kernel32.dll User32.dll Gdi32.dll,特別是dependancy walker中的ntdll.dll,並查找所有導出的API。但是你不會有文件的偏差。

剛剛發現一個很好的文章Native APIS由Mark Russinovich編寫

8

IDA Pro在這裏是您最好的選擇,但請請加倍請實際上並沒有將它們用於任何事情。

他們是內部的,因爲他們改變;他們甚至可能因修補程序而發生更改,因此您甚至不能保證您的未公開API將適用於您爲其編寫的特定操作系統版本和服務包級別。如果你運送這樣的產品,你就靠借來的時間生活。

6

到目前爲止,每個人都缺少一些實質性功能,其中包括Windows操作系統RPC的大量未記錄部分。通過LPC端口或其他接口,RPC(認爲rpcrt4.dll,lsass.exe,csrss.exe等)操作非常頻繁地發生在所有子系統中,它們的功能被埋藏在各種類型/子類型的神祕主義咒語中/ struct-typedef的等等......由於異步性質或者它們註定要處理的事實,如果要通過單步調試或者你有什麼調試,實際上它們更難以調試,你會發現整個系統由於阻止鍵盤或其他I/O被傳遞而導致鎖定;)

ReactOS可能是調查未公開API的最便捷方式。他們有一個相當成熟的內核,並建立了其他高管。 IDA相當耗時,並且不太可能會發現ReactOS人員還沒有發現任何東西。

下面是鏈接頁面的簡介;

ReactOS®是一個免費的,現代操作系統 基於W indows XP/2003的設計系統。從 完全寫出,其目的是遵循 Windows®體系結構設計,由 微軟從硬件級別 直到應用程序 級別。這不是基於Linux的 系統,並且不共享unix 體系結構。

ReactOS項目的主要目標是提供與Windows兼容的二進制 操作系統 。這將使 允許您的Windows應用程序和 驅動程序像在您的Windows系統上運行一樣運行。另外,使用系統的外觀 和Windows操作系統 ,使得熟悉Windows®的熟悉的用戶界面的人可以直接使用 ReactOS。 ReactOS的終極目標 旨在允許您刪除Windows®並安裝ReactOS ,而最終用戶不會注意到 更改。

當我調查一些罕見的Windows構造時,ReactOS通常是唯一可信的參考。