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;
}

相关推荐
h39743 小时前
DirectShow过滤器开发-视频源过滤器
c++·windows·音视频·directshow
java资料站9 小时前
二、Spring AI Alibaba · ChatModel
java·windows·spring
北冥you鱼10 小时前
Go 语言空接口(interface{})使用场景与最佳实践
开发语言·windows·golang
2401_8628808211 小时前
iMX6ULL 驱动工程搭建 + LED 灯驱动
c语言·驱动开发·嵌入式硬件
夏虫不可与之言冰12 小时前
Windows WSL2 (Ubuntu) 搭建 ESP‑IDF 6.1 开发环境全过程演示
linux·windows·ubuntu·esp32·乐鑫科技·乐鑫eim·乐鑫代理商
打工仔折腾 AI15 小时前
FaceFusion本地换脸实战:Windows整合包、模型选择与遮罩调参记录
人工智能·windows·后端·python·深度学习·性能优化·ai agent 实战
硅基手札16 小时前
【串口技术系列文档 07】UART控制器寄存器详解
驱动开发·stm32·单片机·嵌入式硬件·mcu·计算机外设
硅基手札16 小时前
【串口技术系列文档 09】FIFO管理与流控
驱动开发·stm32·单片机·嵌入式硬件·mcu·计算机外设
硅基手札16 小时前
【串口技术系列文档 08】中断驱动vs轮询vs DMA
驱动开发·stm32·单片机·嵌入式硬件·mcu·计算机外设
小蜗牛狂飙记17 小时前
Windows 双击 Jar 包无反应,不用写 bat 脚本!Jarfix 一键修复(以 Struts2 扫描工具为例)
windows·struts·jar