免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
上一个内容: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;
}
