【C++】代码实现:全局钩子注入技术

一、概述

在 Windows  中大部分的应用程序都是基于消息机制的,它们都有一个过程函数,根据不同的消息完成不同的功能。

Windows 操作系统提供的钩子机制就是用来截获和监视系统中这些消息的。

按照钩子作用的范围不同,它们又可以分为局部钩子和全局钩子。局部钩子是针对某个线程的,而全局钩子则是作用于整个系统的基于消息的应用。

全局钩子需要使用 DLL 文件,在 DLL 中实现相应的钩子函数。

二、实现原理

如果创建的是全局钩子,那么钩子函数必须在一个 DLL 中。这是因为进程的地址空间是独立的,发生对应事件的进程不能调用其他进程地址空间的钩子函数。

如果钩子函数是实现代码在 DLL 中,则在对应事件发生时,系统会把这个 DLL 加载到发生事件的进程地址空间中,使它能够调用钩子函数进行处理。

为了能够让 DLL 注入到所有的进程中,程序设置 WH_GETMESSAGE 消息的全局钩子。因为 WH_GETMESSAGE 类型的钩子会监视消息队列,并且 Windows 系统是基于消息驱动的,所以所有进程都会有自己的一个消息队列,都会加载 WH_GETMESSAGE 类型的全局钩子 DLL。

三、主要代码

  • 设置全局钩子:
// 设置全局钩子
BOOL SetGlobalHook()
{
	g_hHook = ::SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)GetMsgProc, g_hDllModule, 0);
	if (NULL == g_hHook)
	{
		return FALSE;
	}
	return TRUE;
}
  • 钩子回调函数:
// 钩子回调函数
LRESULT GetMsgPro
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值