executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
re-anti-cheat反作弊对抗分析:EAC/BattlEye 驱动、内存校验、检测机制还原。 触发词:反作弊、EAC、BattlEye、内存校验、anti-cheat
Independent GitHub snapshot · Automated classification · Original documentation governs
反作弊分析=驱动逆向 + 内核调试,全程隔离沙箱([[re-analyze/platform-tips]] 最高原则)。所有工具先验证再使用。
lm 能看到目标反作弊驱动模块,.reload /f <驱动名> 加载符号GetProcessInformation(..., ProcessProtectionLevelInfo, ...) / Process Explorer / WinDbg),只有非 PROTECTION_LEVEL_NONE 才是 PPL(见坑 1)x64dbg 能打开普通目标 exesc query / driverquery / fltmc(文件系统过滤驱动列表)process explorer 查看受保护进程标记)、Sysmondriverquery 输出驱动列表;sc query EasyAntiCheat(EAC 服务名按版本变化)按顺序执行,每步产物(组件清单、IRP 表、校验逻辑笔记)记录证据路径 + sha256(见 [[re-triage]]),供报告引用。所有步骤在授权范围与沙箱内进行(授权边界见「何时使用」)。
反作弊组件识别(驱动 / 服务):
driverquery /v | findstr /i "anti cheat easy battle" # 驱动层组件
sc query | findstr /i "anti cheat easy battle vanguard" # 服务层组件
fltmc # 文件系统过滤驱动(完整性校验常在此)
驱动校验分析(内存扫描 / 完整性):
IRP_MJ_DEVICE_CONTROL 等)→ 用户态 IOCTL 交互界面;重点找:
MmCopyVirtualMemory/KeStackAttachProcess 类读取目标进程内存后计算)PsSetCreateProcessNotifyRoutine(监控进程创建)、PsSetLoadImageNotifyRoutine(监控模块加载)——校验逻辑的触发入口检测规避思路(授权范围内研究):
内核对抗([[re-kernel]] 联动):
!dr)/ 蓝屏诱饵——分析时记录反制手段(防御视角的"检测面"组成部分),应对一律在沙箱 + 快照([[re-analyze/platform-tips]] 最高原则)分析报告(合规边界):
!analyze -v、断点与现场恢复(观察内核驱动执行路径的主要手段)PROCESS_PROTECTION_LEVEL_INFORMATION 区分 PROTECTION_LEVEL_NONE=未受保护、PROTECTION_LEVEL_PPL_APP=第三方应用启用了进程保护等),不存在"加载了反作弊驱动 ⇒ 游戏自动成为 PPL"这样的通用规则——反作弊完全可以只在内核侧做访问过滤、对象回调、完整性校验和反调试,而目标进程仍是普通进程;attach 被拒只是现象,不能据此反推 PPL;对策——先查真实 protection level(GetProcessInformation(..., ProcessProtectionLevelInfo, ...)、Process Explorer 的 Protection 列、WinDbg 读 EPROCESS.Protection),只有非 PROTECTION_LEVEL_NONE 才叫 PPL;普通进程 attach 失败时分别排查:反作弊的句柄访问过滤 / 对象回调(ObRegisterCallbacks 剥调试权限)、用户态反调试、自终止策略、调试器检测(调试端口、调试寄存器、NtQueryInformationProcess 调试状态)bf_dec 成线上密文,接收方再跑 bf_dec 还原);构造包时必须先 scramble 再算 CRC2(CRC2 校验的是 descramble 之后的载荷);密钥编排离线确定 → 纯脱机心跳可行_KPROCESS.DirectoryTableBase 拿到的是错误 CR3,遍历进程内存全乱/访问异常;原因——反作弊接管内核异常并把 DirectoryTableBase 写错值,附加/读进程等需访问该字段的操作触发异常时,在接管后的异常回调里才修复真值;对策——获取真实 CR3 的常用法:页帧 ListEntry.Flink 指向加密后的进程 K/EPROCESS 结构指针,遍历 MmPfnDataBase 逐页帧比对 Flink 解密值是否为目标进程结构,命中即得真实 CR3;注意版本差异:Win11 24H2 及部分高版本 Win10/11 的加密算法(MiSetPageTablePfnBuddy 可见)与其他版本不同,需按版本适配;分析前先确认目标系统版本(见 [[re-kernel]] 结构随版本变化坑)