Detours Hook
Detours是微軟開發(fā)的一個函數(shù)庫,主要用于動態(tài)Hook運行中的程序,其具體介紹參見http://research.microsoft.com/en-us/projects/detours/。
在游戲或外掛分析中,可以利用Detours庫提供的接口來動態(tài)Hook任意地址,截獲函數(shù)調(diào)用并輸出打印信息。
Detours Hook的3個關(guān)鍵概念
要理解Detours Hook,必須先理解Detours中的3個關(guān)鍵概念。
ØTarget函數(shù):即要Hook的目標函數(shù)或目標地址。
ØTrampoline函數(shù):即跳板函數(shù),主要負責保存原始Target函數(shù)頭的若條指令,并加上一個跳轉(zhuǎn)指令以保持對原始Target函數(shù)調(diào)用的語義完整性。
ØDetour函數(shù):即截獲Target函數(shù)的調(diào)用之后,所要執(zhí)行的自定義函數(shù)。
在Detours Hook中,生成Trampoline函數(shù)與Target函數(shù)之間的關(guān)系如圖6-10所示。
圖6-10 Trampoline函數(shù)與Target函數(shù)的關(guān)系
從圖6-10中可以看出,Trampoline函數(shù)是由Target函數(shù)頭加jmp指令組成的。
Target函數(shù)、Detour函數(shù)以及Trampoline函數(shù)之間的關(guān)系如圖6-11所示。
圖6-11 Target函數(shù)、Detour函數(shù)和Trampoline函數(shù)間關(guān)系
從圖6-11中可知,一旦Target函數(shù)被執(zhí)行,程序?qū)凑?→2→3,即Traget→Detour→Trampoline的順序執(zhí)行,最后再回到Target函數(shù)的執(zhí)行過程。
Detours Hook引擎
Detours Hook引擎采用上面介紹的Detours Hook機制,經(jīng)過精心的設(shè)計,使這個Hook引擎支持動態(tài)Hook幾乎任意地址,以方便管理,而不用為了Hook一個地址去增加代碼以及重新編譯代碼(注意:這里的“任意地址”在可以被修改的地址區(qū)域內(nèi))。
首先還是讓我們看看如圖6-12所示的這個引擎的概要設(shè)計,然后再詳細介紹一下每一塊的具體內(nèi)容。
圖6-12 Detours Hook引擎概要設(shè)計
如圖6-12所示的Detours Hook引擎,從涉及的內(nèi)存結(jié)構(gòu)上看,主要由4個塊組成,分別是JMP塊、HOOK_INFO塊、Trampoline塊和HKC塊,而從處理函數(shù)上看,主要由DispatchHook和ProcessHook組成。
具體細節(jié)見<<游戲外掛***藝術(shù)>>6.4節(jié)。
電子工業(yè)出版社出版
文章題目:DetoursHook
分享網(wǎng)址:
http://weahome.cn/article/pcoeco.html