win10下驱动进程保护

3 篇文章 1 订阅
1 篇文章 0 订阅

网上可以查到很多WIN7下的驱动后台进程保护代码,而那些代码在WIN10下并不适用,故写此篇来文章来总结我在编写WIN10下后台进程保护驱动程序的过程与经验,因为源码文件结构比较杂乱,在此文章里我粘部分代码,在最后再给出完整项目的github地址。

首先说进程关闭,通常会用三种方法:
1.利用进程管理器关闭
2.打开CMD,调用taskkill指令关闭
3.调用taskkill加上-t参数,进行强行进程关闭

在代码方面与网上其他大神在win7下的进程保护驱动的代码与思路完全一致,都是调用 ObRegisterCallbacks()回调函数

OB_CALLBACK_REGISTRATION obReg;
	OB_OPERATION_REGISTRATION opReg;

	memset(&obReg, 0, sizeof(obReg));
	obReg.Version = ObGetFilterVersion();
	obReg.OperationRegistrationCount = 1;
	obReg.RegistrationContext = NULL;
	RtlInitUnicodeString(&obReg.Altitude, L"321000");
	memset(&opReg, 0, sizeof(opReg)); //初始化结构体变量

	//下面请注意这个结构体的成员字段的设置
	opReg.ObjectType = PsProcessType;
	opReg.Operations = OB_OPERATION_HANDLE_CREATE | OB_OPERATION_HANDLE_DUPLICATE;

	opReg.PreOperation = (POB_PRE_OPERATION_CALLBACK)&preCall; //在这里注册一个回调函数指针

	obReg.OperationRegistration = &opReg; //注意这一条语句

	return ObRegisterCallbacks(&obReg, &obHandle); //在这里注册回调函数

preCall回调函数定义为

OB_PREOP_CALLBACK_STATUS preCall(PVOID RegistrationContext, POB_PRE_OPERATION_INFORMATION pOperationInformation)
{
	//获取pid,这里的HANDLE保存的其实是一个进程pid
	HANDLE pid = PsGetProcessId((PEPROCESS)pOperationInformation->Object);
	char szProcName[16] = { 0 };
	UNREFERENCED_PARAMETER(RegistrationContext);
	strcpy(szProcName, GetProcessImageNameByProcessID((ULONG)pid));
	//比较字符串,返回0,则字符串相同
	if (!_stricmp(szProcName, "Project1.exe"))
	{
		//如果创建句柄
		if (pOperationInformation->Operation == OB_OPERATION_HANDLE_CREATE)
		{
			//OriginalDesiredAccess为原本权限,DesiredAccess为即将要更改的新权限
			//如果要结束进程,进程管理器结束进程发送0x1001,taskkill指令结束进程发送0x0001,taskkil加/f参数结束进程发送0x1401
			int code = pOperationInformation->Parameters->CreateHandleInformation.OriginalDesiredAccess;
			if ((code == PROCESS_TERMINATE_0) || (code == PROCESS_TERMINATE_1) || (code == PROCESS_KILL_F))
				//给进程赋予新权限
				pOperationInformation->Parameters->CreateHandleInformation.DesiredAccess = 0;
			//DbgPrint("hello %x", pOperationInformation->Parameters->CreateHandleInformation.OriginalDesiredAccess);
			
		}
	}
	return OB_PREOP_SUCCESS;
}

要注意的是在这里负责获取进程名称以用于比较的函数GetProcessImageNameByProcessID为自定义的·,我会在结尾贴上代码的github地址。
看到这就会有人发现我这里的代码与网上win7下的代码别无二致,其实两者区别的关键就是三个值:
PROCESS_TERMINATE_0,
PROCESS_TERMINATE_1,
PROCESS_KILL_F
这三个值在我的自定义头文件myhead.h里是这样定义的

//进程管理器结束代码
#define PROCESS_TERMINATE_0       0x1001
//taskkill指令结束代码
#define PROCESS_TERMINATE_1       0x0001 
//taskkill指令加/f参数强杀进程结束码
#define PROCESS_KILL_F			  0x1401

这就是我与网上win7下的代码不一样的地方,如果照搬网上win7下的代码编译后在win10下运行可能会出现被保护进程连打都打不开的现象

最后,程序虽然有了一定成果,但是还有不足,有待后续的改正,首先说说成果
1.可以成功防止cmd指令taskkill -pid xxx以及
taskkill -f -pid xxx来关闭进程
(pid为9912)
效果图:
在这里插入图片描述从此可以看出虽然指令行反馈为成功,实际上后台进程依然在运行,再看看taskkill -f -pid
在这里插入图片描述从此可以看出加上-f参数的强制关闭直接反馈拒绝访问,进程管理器的后台进程也是依然在运行的,说明没有问题
再看看进程管理器结束进程的效果,在这里我要分成两种情况,一种是直接打开win10下的进程管理器显示给我们的界面,也就是进程管理器菜单栏那一栏显示“进程”的那个页面,还有一种情况则是菜单栏显示“详细信息“的那一栏,为什么我要分为两种情况,因为我刚刚提到的不足就在这里,再“详细信息”一栏关闭程序,驱动可以正常拦截并阻止进程的关闭,而在“进程”一栏的界面直接结束进程,则会出现被保护的用户层程序突然出现CPU占用爆炸的情况CPU占用甚至可能会出现90%以上的现象,到底是为什么我也还没有搞清楚,如果有大神可以指点一二小弟感激不尽,我在后续也会继续进行调试研究,然后看效果图:
在”详细信息“一栏:
在这里插入图片描述可以看到弹出的拒绝访问的错误弹窗,说明是没问题的。
在“进程“一栏:
在这里插入图片描述
CPU占用会高达90%,我用这个驱动程序去保护Qt编写的运行在后台的窗口程序,被保护的窗口程序也无法继续在前台正常运行最后崩溃停止运行,事实上这种情况感觉就好像是随机发生的,有时会出现这种情况,有时又不会,让人摸不着头脑。

补充:
在Windows进程管理器下会出现CPU调用过高导致程序崩溃的原因是,内存资源已被强制释放,而进程又没被关闭,进程又没有任何读写权限导致程序崩溃,解决此问题的办法是,先捕获结束进程返回码0x1001 捕获到此值后先将进程权限变为0阻止进程被关闭,再进行捕获返回码0x1041如果捕获到说明就是在是在“进程”页面结束进程,所以在捕获到0x1041后,再恢复进程的本来所有权限就能完美解决问题了。

代码地址:
github

  • 13
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 34
    评论
### 回答1: Win10隐藏进程的方法有多种,以下是其中几种比较常用的方法: 1. 使用任务管理器。按下“Ctrl+Shift+Esc”组合键打开任务管理器,在“进程”选项卡中找到需要隐藏的进程,右键点击选择“详细信息”,在打开的“详细信息”窗口中单击“隐藏”即可隐藏该进程。 2. 使用命令行。打开命令提示符窗口,输入“taskkill /f /im 进程名.exe”命令,即可结束该进程并隐藏它。 3. 使用第三方软件。有些第三方软件可以帮助用户隐藏进程,如“Process Hacker”、“Process Explorer”等,使用这些软件可以更加便捷地隐藏进程。 需要注意的是,隐藏进程并不是一个常规的操作,一般只有在特殊情况下才需要使用。同时,隐蔽进程可能会引起一些意料之外的问题,如系统不稳定、病毒入侵等,因此在操作之前一定要谨慎。 ### 回答2: Win10隐藏进程的方法如下: 1.按下“Ctrl + Alt + Del”组合键,打开任务管理器。 2.在任务管理器中,点击“详细信息”选项卡,展开所有正在运行的进程。 3.在列表中找到需要隐藏的进程,右击它,选择“打开文件位置”。 4.在打开的文件夹中,找到这个进程的可执行文件(通常是.exe文件),右键点击该文件,选择“属性”。 5.在文件属性对话框中,选择“安全”选项卡,然后点击“高级”按钮。 6.在高级安全设置对话框中,选择“禁止继承权限”选项,并选择“转移所有权”选项。 7.在打开的对话框中,选择当前用户或管理员账户,勾选“替换所❤有子容器和对象的所有权限项”。 8.确认设置后,点击“确定”按钮并关闭对话框。 9.返回到任务管理器中,刷新进程列表,该进程即被隐藏。 值得注意的是,隐藏进程可能涉及到系统安全和稳定性问题,请谨慎使用。一旦隐藏的进程对系统产生危害,可能会导致一系列问题产生。如果不熟悉相关知识,最好不要私自修改系统文件。 ### 回答3: Win10隐藏进程的方法有多种,以下介绍其中两种比较常见的方法。 一、使用任务管理器 1. 打开任务管理器:按下"Ctrl+Shift+Esc"组合键或者右键任务栏空白处,选择“任务管理器”。 2. 切换到“详细信息”选项卡:如果没有“详细信息”选项卡,可以点击“展开”或者“更多详情”。 3. 找到要隐藏的进程:在进程列表中找到要隐藏的进程,右键点击该进程,选择“打开文件位置”。 4. 隐藏进程:在弹出的文件夹窗口中,选中该进程的可执行文件,右键点击该文件,选择“属性”->“安全”->“高级”。 5. 更改文件所有者:在“高级安全设置”窗口中,点击“更改”按钮,输入你的用户名并点击“检查名称”和“确定”。 6. 更改文件权限:在“高级安全设置”窗口中,点击“确认”按钮,在“权限”选项卡中,选择你的用户名,然后点击“编辑”按钮。 7. 隐藏文件:在“编辑”权限窗口中,将“读取和执行”、“读取”、“写入”、“创建文件夹/添加数据”权限都勾选上,然后将“删除”、“更改权限”、“取得所有权”权限都取消勾选,点击“确定”。 二、使用第三方工具 Win10隐藏进程的另外一种方法是使用第三方工具,比如Process Hacker、Process Explorer等工具。这些工具可以隐藏进程、服务和驱动程序,常用于保护系统安全、保密性和操作隐私等方面。 总之,Win10隐藏进程的方法有很多,通过运用不同的技巧和工具,可以实现多种层次的进程隐藏,提高系统安全和保密性。但是需要注意的是,若因不当使用或其他原因导致系统出现故障,后果自负。
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值