此文的產生花費了大量時間對EasyHook進行深刻了解同一時候參考了大量文檔
先來簡單比較一下EasyHook與Detour鉤取後程序流程
Detours:鉤取API函數後。產生兩個地址,一個地址相應真Hook函數地址。一個相應真實API地址
EasyHook:鉤取API函數後,全部API指向同一地址。經過ACL控制是否跳轉到真實API地址
Detour:僅僅要鉤取以後,相關於一個API變成兩個函數
EasyHook:鉤取以後,相關於仍是一個API,經過控制ACL來推斷是否跳轉到真實API
EasyHook使用中的一種特殊狀況:
需要實現這樣一個功能,截獲打開文件(CreateFile)和獲取文件大小(GetFileSize)函數,且在打開文件時需要獲取文件的大小,即在HookCreateFile中同一時候使用CreateFile和GetFileSize。
此時問題來了。html
CreateFile此時調用的是真實的API,而GetFileSize將會調用HookGetFileSize。函數
假設存在不少其它的函數,必將致使問題。spa
EasyHook的啓動與中止
EasyHook兩種ACL表。一種是包括方式(
LhSetExclusiveACL
),一種是排除方式(
LhSetExclusiveACL
),包括方式。對於增長到ACL中的線珵。全部Hook。排除方式。對於增長到ACL中的線程,全部取消Hook。
經過動態調整開關狀態就能夠實現Hook的啓動與中止