19.0环保护进程-Windows驱动

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

上一个内容:18.0环实现线程和进程的监控(ObRegisterCallbacks函数)-Windows驱动

不管是进攻方还是防守方为了防止能够读写关闭某一个进程,我们可以把它们的权限,把别人修改它的权限按死,让它没有权限去修改去读写去关闭去执行创建、复制等一系列操作,也就是说别人没有读取我的权限就被保护起来了

用到的函数:

PsGetProcessImageFileName:它的作用是把一个进程的结构体传进去可以得到进程的名字,它是微软没有公开的函数,就是说这个函数微软它实现了,但是没有告诉我们,这些未公开的函数都是前辈们找的,这种未公开的函数需要自己声明,详情看代码

效果图:

下方是未开启保护时,可以看得到图标

CE可以正常读写内存

加载驱动开启保护后,如下图红框CE看不到图标了

内存里的数据也都变成了问号

使用任务管理器也关不掉我们am.exe程序,直接提示拒绝访问

注意如果在任务管理器进程的界面点击结束任务,am.exe会进入挂起状态上图里可以看到有多个am.exe都是通过下图的进程界面进行关闭的,但是实际上am.exe程序是没有关闭的,它处在挂起状态了,任务管理器是没办法关闭我们保护的程序的

如下图红框我们的驱动是可以正常读取内存的,这说明我们驱动的攻击比保护更强,所以到这应该清楚为什么有些软件使用CE附加后什么都看不到

保护代码:

代码说明:

c++ 复制代码
// 函数声明:获取进程的镜像文件名(比如xxx.exe)
// 入参:arg1 - 进程的EPROCESS结构体指针(内核中描述进程的核心对象)
// 返回值:char* - 进程的短文件名(ANSI字符串,比如"am.exe")
// 注意:该函数是内核未导出的函数(需手动映射/解析),不同系统版本偏移可能不同
const char* PsGetProcessImageFileName(PEPROCESS arg1);

// 【进程句柄前置回调函数】- 拦截所有进程句柄的创建/复制操作
// 核心作用:识别目标进程"am.exe",并将其句柄的访问权限置0(拒绝任何访问)
// 入参1:RegistrationContext - 注册回调时传入的自定义参数(你代码中传NULL,暂无用)
// 入参2:OperationInformation - 句柄操作详情结构体(包含操作对象、操作类型、访问权限等核心信息)
OB_PREOP_CALLBACK_STATUS PobPreOperationCallback(
	 PVOID RegistrationContext,
	 POB_PRE_OPERATION_INFORMATION OperationInformation
)
{
	// 第一步:获取当前操作的进程的镜像文件名(比如"am.exe")
	// OperationInformation->Object:指向被操作进程的EPROCESS结构体(进程内核对象)
	// PsGetProcessImageFileName:从EPROCESS中提取进程的短文件名(ANSI格式,如"notepad.exe")
	char* nName = PsGetProcessImageFileName(OperationInformation->Object);

	// 第二步:判断进程名是否为"am.exe"(不区分大小写)
	// _strnicmp:忽略大小写的字符串比较函数(避免"AM.EXE""Am.exe"等大小写变体漏拦截)
	// 入参1:待比较的进程名;入参2:目标进程名;入参3:比较的字符数(这里用"am.exe"的长度)
	// 返回值=0:表示两个字符串在指定长度内完全匹配
	if (_strnicmp(nName,"am.exe",strlen("am.exe")) == 0) {
		// 调试打印:确认拦截到了目标进程(方便WinDbg查看)
		DbgPrintEx(DPFLTR_IHVDRIVER_ID, 0, "进入nName = %s\n", nName);

		// 第三步:将句柄的访问权限置0(核心拦截逻辑)
		// CreateHandleInformation:对应"创建进程句柄"操作的参数
		// DesiredAccess:想要获取的访问权限(置0=拒绝所有权限,比如读内存、写内存、终止进程等)
		OperationInformation->Parameters->CreateHandleInformation.DesiredAccess = 0;
		// DuplicateHandleInformation:对应"复制进程句柄"操作的参数
		// DesiredAccess:置0=拒绝复制后的句柄拥有任何访问权限
		OperationInformation->Parameters->DuplicateHandleInformation.DesiredAccess = 0;
	}
	// 【严重坑点】:该函数必须返回OB_PREOP_CALLBACK_STATUS类型值,当前代码无返回,会导致系统蓝屏!
}

完整代码去百度网盘中查找


相关推荐
忧虑的小蚂蚁32 分钟前
dll文件32位64位检测工具以及Windows文件夹SysWow64的坑
windows
杨云龙UP3 小时前
Windows SQL Server 备份无法传输至异地共享目录排查处理
运维·服务器·数据库·windows·共享·smb·异地备份传输
AI行业学习3 小时前
Notepad++ 官方纯净下载+完整安装教程(Windows)【2026.7.5】
开发语言·windows·python·前端框架·html·notepad++
站在墙头上3 小时前
Windows下安装 龙虾-Openclaw
windows·ai·openclaw
骑士雄师5 小时前
大模型:MessagesPlaceholder 是什么?
服务器·windows·microsoft
木木子2216 小时前
# 待办事项应用深度解析:ForEach 列表渲染与 CRUD 操作实战
windows·华为·harmonyos
l1t18 小时前
在linux和windows中解决duckdb 1.6dev版本输出执行计划报错问题
linux·运维·数据库·windows·duckdb
love530love18 小时前
WorkBuddy + 本地 ComfyUI MCP:免订阅费的自建方案
人工智能·windows·mcp·comfy cloud
假如梵高是飞行员20 小时前
WSL2 从 img 镜像文件启动特定 Linux 发行版完整指南
linux·windows·wsl
Omics Pro1 天前
首个针对生物医药LLM智能体的全流程过程级评测框架
数据库·人工智能·windows·redis·量子计算