为了账号安全,请及时绑定邮箱和手机立即绑定

如何用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 关注
  • 1327 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信