C++监控注册表信息

  • 首先,监控注册表信息的作用在于防止他人篡改数据,因为多数木马程序都是通过修改注册表信息来对电脑进行攻击,在WindowsAPI中,系统提供了RegNotifyChangeKeyValue这个函数方法来实现对注册表相关信息的监控。

RegNotifyChangeKeyValue (
    __in HKEY hKey,
    __in BOOL bWatchSubtree,
    __in DWORD dwNotifyFilter,
    __in_opt HANDLE hEvent,
    __in BOOL fAsynchronous
    );

的API各个参数的含义如下:

  • ·hKey:指的是注册表项,这个可以通过RegOpenKeyEx去获取注册表项的句柄
  • bWatchSubtree指的是是否监控子注册表项的内容 可选参数为true或false
  • dwNotifyFilter:指的是监控项的监控方式,可选的参数有:
#define REG_NOTIFY_CHANGE_NAME          (0x00000001L) //监控名称是否发生改变
#define REG_NOTIFY_CHANGE_ATTRIBUTES    (0x00000002L) //监控属性值是否改变
#define REG_NOTIFY_CHANGE_LAST_SET      (0x00000004L) // time stamp
#define REG_NOTIFY_CHANGE_SECURITY      (0x00000008L)
  • hEvent:指的是创建事件的句柄
  • fAsynchronous:False 表示监听到变化才返回,True:则是会立即返回,但是还会监听,本质上就是异步和同步的区别,然后可以通过监控事件hEvent的方式。这个参数一般情况下True即可

  • 实现步骤:
    1.创建事件
    2.打开注册表对应位置
    3.使用RegNotifyChangeKeyValue进行监控

  • 实现代码:
#include <Windows.h>
#include <iostream>
#include <string>

using namespace std;
bool RegeditNotifyChanged(HKEY hKey_,std::wstring path_)
{
	// 1.创建事件
	HANDLE hNotify = CreateEvent(NULL,FALSE,TRUE,L"RegeditNotifyChanged");
	if (hNotify == INVALID_HANDLE_VALUE)
	{
		cout << "监控事件创建失败" << endl;
		CloseHandle(hNotify);
		return false;
	}

	//2. 打开注册表对应位置
	HKEY hRegKey ;
	if (RegOpenKeyEx(hKey_,path_.c_str(),0,KEY_NOTIFY,&hRegKey)!=ERROR_SUCCESS)
	{
		cout << "打开注册表失败" << endl;
		CloseHandle(hNotify);
		RegCloseKey(hRegKey);
		return false;
	}

	//3.使用RegNotifyChangeKeyValue进行监控
	if (RegNotifyChangeKeyValue(hRegKey,TRUE,REG_NOTIFY_CHANGE_NAME|REG_NOTIFY_CHANGE_ATTRIBUTES|REG_NOTIFY_CHANGE_LAST_SET,hNotify,TRUE)!=ERROR_SUCCESS)
	{
		cout << "监控失败" << endl;
		CloseHandle(hNotify);
		RegCloseKey(hRegKey);
		return false;
	}

	if (WaitForSingleObject(hNotify,INFINITE)!=WAIT_FAILED)
	{
		cout << "监控项发生改变" << endl;
		CloseHandle(hNotify);
		RegCloseKey(hRegKey);
		return true;
	}
	CloseHandle(hNotify);
	RegCloseKey(hRegKey);
	return false;
}
发布了382 篇原创文章 · 获赞 122 · 访问量 40万+

猜你喜欢

转载自blog.csdn.net/Giser_D/article/details/104552606