20.过保护句柄提权和黑客工具检测-Windows驱动

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

本次游戏没法给

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

上一个内容:19.0环保护进程-Windows驱动

效果图:注意先前的值是2,紧接着就变成了问号,这个愿意是,软件的检测通过全局句柄表给我降级了,所以还需要搞一下全局句柄表,本次只可以做到破图标正常附加,无法正常读写内存

首先CE原本的名字是 cheatengine-x86_64-SSE4-AVX2,如下图红框,需要给它改一下名字(随便改),否则检测软件会检测到黑客工具

检测原理就是,它会检测运行的进程是否存在 cheatengine-x86_64-SSE4-AVX2 这个名字,给改一下就可以了

修改文件名后,如下图

如下图红框,有时候CE没有权限,下图红框都不会显示图标

然后附加后只可以看得到进程id,看不到名字,这就是被降权的特征

然后我们使用代码对CE进行提权,提权的代码,如下图红框是在监控函数中,原理是当我们使用CE附加某进程时,CE会得到一个句柄,然后检测软件就会把句柄设置成0,跟之前我们使用0环保护进程的代码一样,使用下方的代码,如果检测到CE后(aaaa.exe就是CE改的名字),我们给它最高权限1FFFFF,这样就进行了句柄提权

代码说明:

c++ 复制代码
// 函数声明:内核未公开函数,用于从EPROCESS结构体中提取进程的短文件名(如"aaaa.exe")
// 入参:arg1 - 进程的EPROCESS内核对象指针;返回值:char* - 进程的ANSI格式短文件名
const char* PsGetProcessImageFileName(PEPROCESS arg1);

// 进程句柄前置回调函数:所有进程句柄创建/复制操作发生前触发
// 核心逻辑:判断「当前执行回调的进程」是否是"aaaa.exe",如果是则给其句柄请求设置最大访问权限
OB_PREOP_CALLBACK_STATUS PobPreOperationCallback(
	PVOID RegistrationContext,  // 注册回调时传入的自定义参数(你代码中传NULL,无实际作用)
	POB_PRE_OPERATION_INFORMATION OperationInformation  // 句柄操作详情(被操作进程、操作类型等)
)
{
	// 1. IoGetCurrentProcess():内核公开函数,无参数,返回PEPROCESS类型
	//    作用:获取「当前执行该回调函数的进程」的EPROCESS内核对象(即"发起句柄操作的进程",操作方)
	//    关键区别:OperationInformation->Object 是"被操作的进程"(目标方),而此处是"发起操作的进程"
	//    举例:A进程打开B进程句柄 → 此处拿到A进程EPROCESS,OperationInformation->Object拿到B进程EPROCESS
	PEPROCESS pep = IoGetCurrentProcess();

	// 2. 提取当前发起操作进程的短文件名(如"aaaa.exe")
	char* nName = PsGetProcessImageFileName(pep);

	// 3. 不区分大小写判断:当前发起操作的进程是否是目标进程"aaaa.exe"
	if (_strnicmp(nName, "aaaa.exe", strlen("aaaa.exe")) == 0) {
		// 调试打印:确认匹配到目标进程,方便WinDbg验证逻辑
		DbgPrintEx(DPFLTR_IHVDRIVER_ID, 0, "进入nName = %s\n", nName);

		// 4. 设置句柄的DesiredAccess(访问权限掩码)为0x1FFFFF
		//    【0x1FFFFF权限核心讲解(含1F来源)】:
		//    - 等价于PROCESS_ALL_ACCESS(Windows内核宏定义),是进程句柄的"最大权限";
		//    - 数值完整拆解(重点:1F的来源):
		//      PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED + SYNCHRONIZE + 0xFFF
		//      ① STANDARD_RIGHTS_REQUIRED = 0x000F0000(十六进制,对应"标准必需权限",如删除、读写属性等)
		//      ② SYNCHRONIZE = 0x00100000(十六进制,对应"同步权限",允许等待进程结束)
		//      ③ 0xFFF = 0x0000FFF(十六进制,对应"进程专属权限",如读内存、创建线程等)
		//      → 组合计算:0x000F0000 + 0x00100000 = 0x001F0000(这就是"1F"的来源!1对应0x100000,F对应0x0F0000)
		//      → 最终值:0x001F0000 + 0x0000FFF = 0x001FFFFF(简写为0x1FFFFF)
		//    - 1F的大白话含义:1(SYNCHRONIZE同步权限) + F(STANDARD_RIGHTS_REQUIRED标准必需权限),是权限的"基础核心段";
		//    - 包含的核心权限(常用):
		//      PROCESS_VM_READ (0x10)    - 读取进程内存
		//      PROCESS_VM_WRITE (0x20)   - 写入进程内存
		//      PROCESS_TERMINATE (0x01)  - 终止目标进程
		//      PROCESS_CREATE_THREAD (0x02) - 在目标进程创建线程
		//      PROCESS_QUERY_INFORMATION (0x400) - 查询进程信息
		//      PROCESS_SUSPEND_RESUME (0x80000) - 挂起/恢复目标进程
		//    - 效果:设置该值后,aaaa.exe拿到的进程句柄拥有所有操作权限,可无限制操作目标进程

		// CreateHandleInformation:对应"创建进程句柄"(如OpenProcess)操作的权限参数
		OperationInformation->Parameters->CreateHandleInformation.DesiredAccess = 0x1FFFFF;
		// DuplicateHandleInformation:对应"复制进程句柄"(如DuplicateHandle)操作的权限参数
		OperationInformation->Parameters->DuplicateHandleInformation.DesiredAccess = 0x1FFFFF;
	}

	// 【致命坑点】:该函数必须返回OB_PREOP_CALLBACK_STATUS类型值,当前无返回会导致系统蓝屏!
	// 建议补充:return OB_PREOP_SUCCESS;
}

相关推荐
守城小轩2 小时前
Chromium 142 编译指南 Windows篇:Git 配置与安装(二)
windows·chrome devtools·指纹浏览器·浏览器开发
zzcufo4 小时前
wincc VBS 中的 Round() 函数详解
windows·笔记
love530love6 小时前
【笔记】ComfyUI 启动时端口被占用(PermissionError [winerror 10013])解决方案
人工智能·windows·笔记·stable diffusion·aigc·端口·comfyui
进击大厂的小白7 小时前
59.使用设备树描述中断
驱动开发
Biehmltym7 小时前
【AI】02实现AI Agent全栈:十分钟,跑通Python调用 Gemini(大模型)的小型Web项目
人工智能·windows·python
无限进步_7 小时前
C++ Vector 全解析:从使用到深入理解
开发语言·c++·ide·windows·git·github·visual studio
Halo_tjn9 小时前
Java Set集合知识点
java·开发语言·数据结构·windows·算法
YJlio9 小时前
CSDN年度总结2025:技术逐梦不止,步履坚定向前
windows·学习·流程图
十五年专注C++开发9 小时前
QProcess在Windows下不能正常启动exe的原因分析
开发语言·c++·windows·qprocess·createprocess