detours軟件介紹
detours professional 3.0是一個微軟官方開發(fā)的著名HOOK庫,擁有兩大功能,一是攔截x86機器上的任意的win32 API函數;二是插入任意的數據段到PE文件中,修改DDL文件的導入表。軟件主要用于實現(xiàn)復雜的Hook操作,達到一般WIN32 API實現(xiàn)不了的一些效果,另外可以編譯成lib。
detours使用方法
detours是微軟開發(fā)的一個函數庫,專門用于捕獲系統(tǒng)API。在使用之前,必須做以下相關準備工作:
1、下載本站提供的detours professional 3.0軟件;
2、安裝detours,一直NEXT
3、生成detours庫,
在安裝后的文件夾下找不到直接可以拿來用的LIB文件,但是卻有SRC文件(在**Microsoft ResearchDetours Express 2.1src下)。該文件夾下還有Makefile,可以直接用來生成庫。將Detours路徑下的SCR文件夾拷貝到**Microsoft Visual Studio 9.0VC路徑下,注意是整個文件夾(其它版本VC自己照著復制)在system32目錄找到cmd右鍵以管理員身份運行,切換至 c:Program FilesMicrosoft Visual Studio 9.0VCbin目錄運行vcvars32.bat,切換到Microsoft Visual Studio9.0VCSRC,然后輸入..binnmake指令,編譯成功后在Microsoft Visual Studio9.0VCLib文件下就能找到detoured.lib與detours.lib文件了。
detours庫可以攔截任意的API調用,攔截代碼是在動態(tài)運行時加載的。detours替換目標API最前面的幾條指令,使其無條件的跳轉到用 戶提供的攔截函數。被替換的API函數的前幾條指令被保存到trampoline 函數(就是內存中一個數據結構)中. trampoline保存了被替換的目標API的前幾條指令和一個無條件轉移,轉移到目標API余下的指令。
當執(zhí)行到目標API時,直接跳到用戶提供的攔截函數中執(zhí)行,這時攔截函數就可以執(zhí)行自己的代碼了。當然攔截函數可以直接返回,也可以調用 trampoline函數,trampoline函數將調用被攔截的目標API,目標API調用結束后又會放回到攔截函數。下圖就是Detours API攔截的邏輯流程:
detours軟件說明
Hook基本原理
Windows 鉤子的本質是一段用以處理系統(tǒng)消息的程序,通過系統(tǒng)調用,將其掛入到系統(tǒng)。鉤子的種類有很多,每一種鉤子負責截獲并處理相應的消息。鉤子機制允許應用程序截獲并處理發(fā)往指定窗口的消息或特定事件,其監(jiān)視的窗口即可以是本進程內的也可以是由其他進程所創(chuàng)建的。在特定的消息發(fā)出,并在到達目的窗口之前,鉤子程序先行截獲此消息并得到對其的控制權。此時在鉤子函數中就可以對截獲的消息進行各種修改處理,甚至強行終止該消息的繼續(xù)傳遞。
Detours庫是Microsoft研究院的一個開發(fā)庫,最新版本為3.0。它可以攔截任意的API調用,攔截代碼是在動態(tài)運行時加載的,替換目標API最前面的幾條指令,使其無條件的跳轉到用戶提供的攔截函數。
detours更新日志
1.修改用戶提交bug
2.添加新功能