亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何用HOOK鉤子替換掉原來的函數功能?

如何用HOOK鉤子替換掉原來的函數功能?

慕哥6287543 2019-02-07 15:07:35
如何用HOOK鉤子替換掉原來的函數功能?
查看完整描述

2 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

WINDOW下可進行掛接的過濾函數有
WH_CALLWNDPROC,WH_CBT ,WH_DEBUG,WH_GETMESSAGE ,
WH_HARDWARE ,WH_JOURNALPLAYBACK ,
WH_JOURNALRECORD ,WH_MOUSE ,
WH_MSGFILTER ,WH_SYSMSGFILTER ,
WH_KEYBOARD
鍵盤過濾函數 WH_KEYBOARD 是最常用最有用。

利用函數SetWindowsHookEx()將其掛接在函數鏈首。
攔+截到消息是否傳遞給函 數鏈的下一個函數是由每個具體函數功能確定,用API函數的CallNextHookEx()來傳遞。

掛接函數是全局的,那么必須將其放在一個.DLL 動態鏈接庫中。

鍵盤掛鉤函數為例:
int FAR PASCAL KeyboardProc( int nCode,WORD wParam,DWORD lParam)
其中KeyboardProc為定義掛接函數名,該函數必須在模塊定義文件中利用 EXPORTS命 令進行說明;nCode決定掛接函數是否對當前消息進行處理;wParam和lParam為具體 的消息內容。

卸鉤 調用一次 UnhookWindowsHookEx(iProc)

動態鏈接庫調用有3種方法。
1.在DEF定義文件中直接用函數名或序號說明:
EXPORTS WEP @1 RESIDENTNAME InitHooksDll
@2 InstallFilter
@3 KeyboardProc
@4
用序號說明格式為:鏈接庫名.函數名(如本例中說明方法為KEYDLL.KeyboardProc)。

2.在應用程序中利用函數直接調用:
首先在應用程序中利用LoadLibrary(LPSTR "鏈接庫名")將動態鏈接庫裝入,并取得 裝載庫模塊句柄hInst,
然后直接利用GetProcAddress(HINSTANCE hInst,LPSTR "函 數過程名")獲取函數地址,然后直接調用該地址即可,
程序結束前利用函數 FreeLibrary( )釋放裝入的動態鏈接庫即可。

3.利用輸入庫.LIB方法 利用IMPLIB.EXE程序在建立動態鏈接庫的同時建立相應的輸入庫.LIB,然后直接在 項目文件中增加該輸入庫。



查看完整回答
反對 回復 2019-03-26
  • 2 回答
  • 0 關注
  • 1417 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號