C語言newHook字段:typedefHMODULE(WINAPI*HOOKAPI)(INLPCSTR);
創(chuàng)新互聯(lián)公司專注于十堰鄖陽企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),成都商城網(wǎng)站開發(fā)。十堰鄖陽網(wǎng)站建設(shè)公司,為十堰鄖陽等地區(qū)提供建站服務(wù)。全流程按需求定制制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
#defineMYHOOKMETHOD(__fun)HMODULEWINAPI__fun
#defineDECLARE_REGISTER(__0bj,__lawfunc,__newfunc)Inline_Hook__Obj(__lawfunc,__newfunc)。
鉤子(Hook),是Windows消息處理機(jī)制的一個(gè)平臺(tái),應(yīng)用程序可以在上面設(shè)置子程以監(jiān)視指定窗口的某種消息,而且所監(jiān)視的窗口可以是其他進(jìn)程所創(chuàng)建的。當(dāng)消息到達(dá)后,在目標(biāo)窗口處理函數(shù)之前處理它。鉤子機(jī)制允許應(yīng)用程序截獲處理window消息或特定事件。
鉤子實(shí)際上是一個(gè)處理消息的程序段,通過系統(tǒng)調(diào)用,把它掛入系統(tǒng)。每當(dāng)特定的消息發(fā)出,在沒有到達(dá)目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數(shù)先得到控制權(quán)。這時(shí)鉤子函數(shù)即可以加工處理(改變)該消息,也可以不作處理而繼續(xù)傳遞該消息,還可以強(qiáng)制結(jié)束消息的傳遞。
Hook技術(shù)又叫做鉤子函數(shù),在系統(tǒng)沒有調(diào)用該函數(shù)之前,鉤子程序就先捕獲該消息,鉤子函數(shù)先得到控制權(quán),這時(shí)鉤子函數(shù)既可以加工處理(改變)該函數(shù)的執(zhí)行行為,還可以強(qiáng)制結(jié)束消息的傳遞。簡(jiǎn)單來說,就是把系統(tǒng)的程序拉出來變成我們自己執(zhí)行代碼片段。
要實(shí)現(xiàn)鉤子函數(shù),有兩個(gè)步驟:
1.利用系統(tǒng)內(nèi)部提供的接口,通過實(shí)現(xiàn)該接口,然后注入進(jìn)系統(tǒng)(特定場(chǎng)景下使用)
2.動(dòng)態(tài)代理(使用所有場(chǎng)景)
?
hook api有幾種方式 1、導(dǎo)入表hook,枚舉導(dǎo)入表,找到位置,替換函數(shù)指針即可,api加算法即可完成,因此c#也可以調(diào)用api來完成 2、inline hook,找到函數(shù)地址,開頭寫入跳轉(zhuǎn)指令跳轉(zhuǎn)到新位置,新位置執(zhí)行后可以選擇調(diào)用原函數(shù),原函數(shù)之前可以先.
用SetWindowsHookEx攔截QQ密碼框,這個(gè)我也試過,攔截的是亂碼。
原因據(jù)說是QQ用了nKey鍵盤保護(hù)。
QQ2011版的我沒有試過,10版的我試過,用WinIO可以攔截密碼。
不過WinIO加載了驅(qū)動(dòng),360會(huì)有提示,用DirectX監(jiān)視鍵盤也攔截不下來。
誰知道11版的WinIO還管事不?,你可以從網(wǎng)上下一個(gè)WinIO。
WinIO包含一個(gè)庫文件,一個(gè)動(dòng)態(tài)鏈接庫文件,一個(gè)驅(qū)動(dòng)文件。
我告訴你個(gè)天下最好的辦法吧:
1.將Kernel32.dll或者user32.dll替換成你的。
2.在鍵盤這個(gè)硬件上做手腳。
例子:
HWND hWnd = NULL; //定義成全局變量
HHOOK hKeyboard;
HHOOK hMouse;
LRESULT CALLBACK MouseProc( int nCode, WPARAM wParam, LPARAM lparam ) // 鼠標(biāo)鉤子函數(shù)
{
return 1; // 返回非零值表示已經(jīng)對(duì)當(dāng)前消息進(jìn)行了處理,這樣系統(tǒng)就不會(huì)再將這個(gè)消息傳遞給目標(biāo)窗口過程
}
LRESULT CALLBACK KeyboardProc( int nCode, WPARAM wParam, LPARAM lparam )
if( VK_F4 == wParam (1 == (lparam291)) ) // 系統(tǒng)后門:Alt+F4鍵退出程序
{
::SendMessageA( hWnd, WM_CLOSE, 0, 0 );
定義鉤子函數(shù)
鉤子函數(shù)是一種特殊的回調(diào)函數(shù)。鉤子監(jiān)視的特定事件發(fā)生后,系統(tǒng)會(huì)調(diào)用鉤子函數(shù)進(jìn)行處理。不同事件的鉤子函數(shù)的形式是各不相同的。下面以鼠標(biāo)鉤子函數(shù)舉例說明鉤子函數(shù)的原型:
LRESULT CALLBACK HookProc(int nCode ,WPARAM wParam,LPARAM lParam)
參數(shù)wParam和 lParam包含所鉤消息的信息,比如鼠標(biāo)位置、狀態(tài),鍵盤按鍵等。nCode包含有關(guān)消息本身的信息,比如是否從消息隊(duì)列中移出。 我們先在鉤子函數(shù)中實(shí)現(xiàn)自定義的功能,然后調(diào)用函數(shù) CallNextHookEx.把鉤子信息傳遞給鉤子鏈的下一個(gè)鉤子函數(shù)。CallNextHookEx.的原型如下:
LRESULT CallNextHookEx( HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam ) 參數(shù) hhk是鉤子句柄。nCode、wParam和lParam 是鉤子函數(shù)。
當(dāng)然也可以通過直接返回TRUE來丟棄該消息,就阻止了該消息的傳遞。
標(biāo)題名稱:c語言實(shí)現(xiàn)hook函數(shù) hook printf
文章路徑:http://vcdvsql.cn/article18/doicgdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、全網(wǎng)營(yíng)銷推廣、網(wǎng)站收錄、標(biāo)簽優(yōu)化、靜態(tài)網(wǎng)站、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)