最近在做API hook相關(guān)的東西,用了inline hook后感覺不錯(cuò),但是查找資料發(fā)現(xiàn)inline hook并不穩(wěn)定 inline hook 的原理是在系統(tǒng)訪問一個(gè)函數(shù)的時(shí)候先替換原函數(shù)入口處的內(nèi)容跳轉(zhuǎn)到自己設(shè)計(jì)的hook函數(shù)中,然后在自己函數(shù)中進(jìn)行hook工作??墒窃诓⑿邢到y(tǒng)中,很可能有個(gè)線程就在這個(gè)時(shí)候調(diào)用了被自己改掉的系統(tǒng)函數(shù),出現(xiàn)我們無法預(yù)期的結(jié)果。 所以打算學(xué)習(xí)一下inline hook升級(jí)版:detour庫hook,其實(shí)hook過程原理基本一樣,只是微軟做了封裝和相關(guān)的沖突檢查,所以這種api hook穩(wěn)定些。 (當(dāng)然其他apihook方式還有modifying the Import Address Table (link provided later),using proxy DLLs and manifest files)
用detour庫進(jìn)行hook必須先部署Detour, 電腦環(huán)境:win7 64bit 1.從http://research.microsoft.com/sn/detours下載detour professional 3.0?。?!不是Express版的哈~ 2.安裝(此流程無腦) 3.生成detour.lib:安裝detour后,目錄中有src文件夾,把文件夾拷貝到\Microsoft Visual Studio 10.0\VC下 3.1打開cmd進(jìn)入Microsoft Visual Studio 10.0\VC\bin目錄輸入命令vcvars32.bat,運(yùn)行后可以設(shè)置好編譯環(huán)境 3.2切換到\Microsoft Visual Studio10.0\VC\SRC,然后輸入nmake指令(這里可能會(huì)有錯(cuò)誤 未找到文件“..\system.mak”,解決方法在下面) 4.部署lib文件,上一步\Microsoft Visual Studio10.0\VC\lib中會(huì)生成lib文件,將\Microsoft Visual Studio10.0\VC\src中的detours.h復(fù)制到..\include目錄下(如果include中沒有該頭文件) 整個(gè)部署完成了
detour的使用: 自己寫的源碼中添加如下內(nèi)容就可以使用detour了: #include <detours .h> //*IMPORTANT: Look at path if compiler error #pragma comment(lib, "detoured.lib") #pragma comment(lib, "detours.lib")
未找到文件“..\system.mak”解決方法:
將detours安裝目錄中的system.mak和Makefile復(fù)制到Microsoft Visual Studio 10.0\VC目錄就解決了
技術(shù)相關(guān)更多文章猛擊:哇啦天堂論壇技術(shù)區(qū)
|
|