西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開(kāi)發(fā)VC|VC++ → 在VC中 Hook Api lib 0.5 源代碼

在VC中 Hook Api lib 0.5 源代碼

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2011/4/11 14:27:26字體大小:A-A+

作者:海風(fēng)月影點(diǎn)擊:197次評(píng)論:0次標(biāo)簽: Hook api

HOOK iPhone版appv1.03蘋(píng)果版
  • 類型:休閑益智大。42.4M語(yǔ)言:英文 評(píng)分:10.0
  • 標(biāo)簽:
立即下載

 使得hook更加靈活,支持卸載

計(jì)算指令長(zhǎng)度使用另一個(gè)LDE32,代碼簡(jiǎn)潔,很容易看懂

Stub更加簡(jiǎn)潔,保存了寄存器,可以支持hook __fastcall的函數(shù)

增加了一個(gè)結(jié)構(gòu)體HOOKENVIRONMENT,一般情況下用不到,主要用來(lái)卸載的^_^

使用中有什么問(wèn)題跟帖說(shuō)明

/*
//////////////////////////////////////////////////////////////////////////
HookApi 0.5

thanks to xIkUg ,sucsor

by 海風(fēng)月影[RCT] , eIcn#live.cn
2008.04.15

//////////////////////////////////////////////////////////////////////////
//更新內(nèi)容
2008.04.15 0.5

1,重新寫(xiě)了Stub,換了一種模式,使hook更加自由,將hookbefore和hookafter合并
HookProc的定義方式與以前有所不同:

HookProc的函數(shù)類型和原來(lái)的api一樣,只是參數(shù)比原API多2個(gè)
DWORD WINAPI HookProc(DWORD RetAddr ,__pfnXXXX pfnXXXX, ...);

//參數(shù)比原始的API多2個(gè)參數(shù)
RetAddr //調(diào)用api的返回地址
pfnXXX //類型為_(kāi)_pfnXXXX,待hook的api的聲明類型,用于調(diào)用未被hook的api

詳見(jiàn)My_LoadLibraryA
原始的LoadLibraryA的聲明是:

HMODULE WINAPI LoadLibraryA( LPCSTR lpLibFileName );

那么首先定義一下hook的WINAPI的類型
typedef HMODULE (WINAPI __pfnLoadLibraryA)(LPCTSTR lpFileName);

然后hookproc的函數(shù)聲明如下:
HMODULE WINAPI My_LoadLibraryA(DWORD RetAddr,
__pfnLoadLibraryA pfnLoadLibraryA,
LPCTSTR lpFileName
);

比原來(lái)的多了2個(gè)參數(shù),參數(shù)位置不能顛倒,在My_LoadLibraryA中可以自由的調(diào)用未被hook的pfnLoadLibraryA
也可以調(diào)用系統(tǒng)的LoadLibraryA,不過(guò)要自己在hookproc中處理好重入問(wèn)題

另外,也可以在My_LoadLibraryA中使用UnInstallHookApi()函數(shù)來(lái)卸載hook,用法如下:
將第二個(gè)參數(shù)__pfnLoadLibraryA pfnLoadLibraryA強(qiáng)制轉(zhuǎn)換成PHOOKENVIRONMENT類型,使用UnInstallHookApi來(lái)卸載

例如:
UnInstallHookApi((PHOOKENVIRONMENT)pfnLoadLibraryA);


至于以前版本的HookBefore和HookAfter,完全可以在自己的HookProc里面靈活使用了


2,支持卸載hook
InstallHookApi()調(diào)用后會(huì)返回一個(gè)PHOOKENVIRONMENT類型的指針
需要卸載的時(shí)候可以使用UnInstallHookApi(PHOOKENVIRONMENT pHookEnv)來(lái)卸載

在HookProc中也可以使用UnInstallHookApi來(lái)卸載,參數(shù)傳入HookProc中的第二個(gè)參數(shù)

注意:當(dāng)HookProc中使用UnInstallHookApi卸載完后就不能用第二個(gè)參數(shù)來(lái)調(diào)用API了~~,切記!

2008.04.15 0.41
1,前面的deroko的LdeX86 有BUG,678b803412 會(huì)算錯(cuò)
換了一個(gè)LDX32,代碼更少,更容易理解

2,修復(fù)了VirtualProtect的一個(gè)小BUG


0.4以前
改動(dòng)太大了,前面的就不寫(xiě)了
*/

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)