先來簡單比較一下EasyHook與Detour鈎取后程序流程
Detours:鈎取API函數后。產生兩個地址,一個地址相應真Hook函數地址。一個相應真實API地址
EasyHook:鈎取API函數后,所有API指向同一地址。通過ACL控制是否跳轉到真實API地址
Detour:僅僅要鈎取之后,相關於一個API變成兩個函數
EasyHook:鈎取之后,相關於還是一個API,通過控制ACL來推斷是否跳轉到真實API
EasyHook使用中的一種特殊情況:
須要實現這樣一個功能,截獲打開文件(CreateFile)和獲取文件大小(GetFileSize)函數,且在打開文件時須要獲取文件的大小,即在HookCreateFile中同一時候使用CreateFile和GetFileSize。
此時問題來了。
CreateFile此時調用的是真實的API,而GetFileSize將會調用HookGetFileSize。
假設存在很多其它的函數,必將導致問題。
EasyHook的啟動與停止
EasyHook兩種ACL表。一種是包括方式(
LhSetExclusiveACL
),一種是排除方式(
LhSetExclusiveACL
),包括方式。對於增加到ACL中的線珵。所有Hook。排除方式。對於增加到ACL中的線程,所有取消Hook。
通過動態調整開關狀態就可以實現Hook的啟動與停止