如何獲取Windows中全局安裝的鉤子列表(使用SetWindowsHookEx API)?已安裝的窗口鉤子列表
回答
見
尋找掛鉤相對於其他操作,枚舉installe d 掛鉤非常容易。
線程特定的鉤子記錄在win32k每線程數據中 結構標記爲THREADINFO 1,而且富有想象力。這基本上是ETHREAD/TEB類似結構,但是專門爲用戶和gdi信息量身定製的 。它的一個成員 (aphkStart)是一個16個元素的指針數組,它們分別是 或者指向NULL,或者是一個HOOK結構鏈表的頭部。枚舉掛鉤只是衡量這些鏈條的行爲。
爲了方便起見,並大概所以看到 如果任何鉤設置不要求迭代中,一個ThreadInfo包含另一個構件,fsHooks, 其是位字段。如果有一位打開,則 掛鉤數組中的對應索引有效。而不是33比較(NULL爲16,而for循環爲 ),告訴是否有鉤子只需要一個,漂亮!
全球鉤,這是每桌面2,也存儲在一個 每個對象結構,也想象力命名(DESKTOPINFO),並且 也被存儲在具有伴隨位域的陣列。橋接 兩個是pDeskInfo,是THREADINFO的成員,它指向它擁有的 DESKTOPINFO。
儘管在介紹中腹瀉,但與所有這些 一起工作,實際上並不太難。 win32k.sys的Windows 7符號包含它們的佈局,這很好。 雖然Vista/Server 2008時代的標誌不是,但這是 學習的組件來節省一天。
知道這些結構,看起來就像是一兩件事,在他們獲得 是另一個...
已經得到了他們我們的骯髒的手套,我們發現鉤狀結構記錄 大部分的相關信息本身:
struct tagHOOK
{
THRDESKHEAD head; // info about the creator
struct tagHOOK* phkNext; // next entry in linked list
int iHook; // WH_ hook type
UINT_PTR offPfn; // RVA to hook function in ihmod library
UINT flags; // HF_ flags (GLOBAL, ANSI)
int ihmod;
THREADINFO* ptiHooked; // the hooked thread
PVOID rpDesk; // saved desktop pointer
ULONG nTimeout :7;
ULONG fLastHookHung :1;
};
您也可以下載software here
,用於檢測安裝全局鉤子概述如下:
- 呼叫PsGetCurrentThread,並獲得當前線程的ETHREAD結構。根據MSDN文檔 ,ETHREAD是一個不透明的數據結構。
- 通過調用PsGetThreadWin32Thread來提取THREADINFO結構。他們兩人都沒有證件。
- 提取DESKTOPINFO。
- 在那裏你可以找到所有全局安裝的鉤子。他們被組織在一個陣列中。每個元素都是一個鏈表,並對應於 一個特定的鉤子(WH_ *)。
,用於檢測安裝在本地鉤的概述如下:
- 給定線程ID。
- 呼叫PsLookupThreadByThreadId並獲得指定線程的ETHREAD結構。
- 通過調用PsGetThreadWin32Thread提取的ThreadInfo結構。
- 在那裏你可以找到指定線程的所有本地安裝的鉤子。他們被組織在一個陣列中。每個元素都是一個 鏈表,並對應於一個特定的鉤子(WH_ *)。
可以看到source here
插件過程哈克2(http://processhacker.sourceforge.net) 顯示系統的鉤和能夠解開(右點擊菜單)。
抓取Process Hacker源並編譯它,然後將 HookTools.vcxproj添加到Plugins.sln。 VS 2013被使用。在VC++目錄中設置您的庫 路徑。
或相關與答題這裏
- Detecting Keyboard Hooks
- https://security.stackexchange.com/questions/17904/what-are-the-methods-to-find-hooked-functions-and-apis
但我還沒有找到一個可靠的方式來做到這一點。
*「此網頁不可用」*。請參閱[如何編寫好的答案?](http://stackoverflow.com/help/how-to-answer),具體爲:*「爲鏈接提供上下文:鼓勵與外部資源的鏈接,但請添加上下文圍繞鏈接,所以你的同行用戶會有一些想法是什麼,爲什麼它在那裏。**如果目標站點無法訪問或永久離線**,請始終引用重要鏈接中最相關的部分**。「* – IInspectable 2015-10-27 00:22:57
- 1. 如何獲取已安裝的窗口小部件列表?
- 2. 鉤子安裝錯誤
- 3. 電子窗口安裝程序太慢
- 4. 在原生鉤子之前加載可安裝的鉤子
- 5. MongoDB窗口服務安裝
- 6. 在窗口上安裝XAMPP
- 7. C#窗口安裝項目
- 8. 在窗口中安裝gevent
- 9. 爲窗口安裝pylinkgrammar
- 10. 在窗口上安裝Django
- 11. 窗口安裝掛起
- 12. 在窗口中安裝Mojito
- 13. 在窗口上安裝LogStash
- 14. 在窗口上安裝Ocamlgraph?
- 15. Ruby窗口安裝程序
- 16. MDB2梨形窗口安裝
- 17. 在窗口上安裝ejabberd
- 18. 安裝leiningen窗口cygwin
- 19. Pgagent安裝在窗口
- 20. Watir安裝錯誤窗口
- 21. 安裝libpuzzle窗口wampserver
- 22. 安裝pyomo窗口10
- 23. 窗口上Psycopg安裝
- 24. 在模式窗口中選擇已安裝的證書
- 25. 自定義安裝鉤子和rpmbuild
- 26. 如何確保Branch.io安裝Web鉤子?
- 27. 如何在gitolite中安裝鉤子
- 28. CollabNet預先安裝鉤子 - 新手
- 29. 需要在WIX Bootstrapper Bundle安裝窗口(無提示安裝)前面安裝SQL SERVER 2008 R2安裝窗口
- 30. OpenCV的安裝問題的窗口
@DavidStratton我想他要求一個名爲'SetWindowsHookEx'的列表。例如鍵盤 – vcsjones 2011-12-19 17:25:20
。 SetWindowsHookEx將應用程序定義的掛鉤過程安裝到掛鉤鏈中。我想獲得這個鉤鏈。 – lightstep 2011-12-19 17:26:51
你不能這樣做;你想達到什麼目的? – Michael 2011-12-19 17:29:45