虎克原理
Windows的大多数APP应用程序都基于消息传递机制,每个消息都有不同的消息传递过程函数。
Windows操作系统提供的挂接机制的作用是监听和监视这些系统中的消息。 Windows挂钩种类繁多,可以应对各种新闻。
根据吊钩的作用范围,可分为局部吊钩和全局吊钩。 本地挂接面向线程
全局挂接是作用于整个系统的基于消息的APP应用程序。 全局挂接必须使用DLL文件在DLL中实现相应的挂接函数。
在操作系统中安装全局挂接后,当进程收到可以发出挂接的消息时,操作系统会自动或强制将全局挂接的DLL文件加载到进程中。
因此,也可以通过设置消息挂钩来实现DLL注入的目的。
胡克函数
HHOOK SetWindowsHookEx (
int idHook,
HOOKPROC lpfn,
HINSTANCE hMod,
dword dw萨德
);
删除挂接函数
BOOL UnhookWindowsHookEx (
HHOOK hhk
);
参数介绍
此函数的返回值是挂接句柄。 参数介绍如下。
lpfn:指定Hook函数的地址。 如果dwThreadId参数设置为0或设置为另一个进程的线程ID,则lpfn属于DLL的函数过程。
如果dwThreadId是当前进程的线程ID,则lpfn可以指向当前进程模块中的函数。 当然,也可以指向DLL模块中的函数。
指定包含hMod:挂接函数的模块的模块句柄。 也就是说,lpfn所在的模块句柄。 如果dwThreadId是当前进程的线程ID,而lpfn指向的函数位于当前进程中,
此参数设置为NULL。
dwThreadId:指定要挂接的线程ID号。 如果设置为0,则在所有基于消息的线程中挂接。 如果设置了特定线程ID,则表示已在指定线程上挂接。
此参数影响上述两个参数的可能值,同时确定挂钩是全局挂钩还是本地挂钩。
idHook:此参数表示挂接的类型。 常用的有:
WH_CALLWNDPROC //当目标线程调用SendMessage发送消息时,将调用挂接函数。
当返回wh_callwndprocret//sendmessage时,将调用挂接函数。
在WH_KEYBOARD //消息队列中查询WM_KEYUP或WM_KEYDOWN时。
WH_GETMESSAGE //目标线程调用GetMessage或PeekMessage时
WH_MOUSE //在查询消息队列中的鼠标事件消息时。
如果挂接函数处理消息后可以继续向目标窗口传递消息,则必须选择继续传递消息。 传递消息的函数定义如下:
LRESULT CallNextHookEx (
HHOOK hhk,//handle to current hook
int nCode,//hookcodepassedtohookprocedure
WPARAM wParam,//value passed to hook procedure
lparam lparam//valuepassedtohookprocedure
);
键盘源:
3359 download.csdn.net/download/QQ _ 37957965/10800911