-
-
[原创]ROP(Return-Oriented Programming)返回导向编程 · 游戏安全相关技术边界探索【4】
-
发表于: 1天前 64
-
ROP(Return-Oriented Programming)返回导向编程 · 游戏安全相关技术边界探索【4】
系列目录(共四篇)
- ROP 是什么,原理,初步认识 ROP
- 初步探索 — 基于 ROP 技术弹个 MessageBox & 安全退出
- 深入探索 — 挖掘 ROP 在游戏安全领域的能力边界
- 反作弊对抗相关思考 & 检测手段(本文)
历史回顾:第 3 期:深入探索 — 挖掘 ROP 在游戏安全领域的能力边界
这一期(也是最后一期),我们从游戏反作弊的视角来探讨如何检测基于 ROP 技术的外挂。
基于上面几期对 ROP 技术的探讨,我们已经深入了解其无与伦比的强大,可以无视常规特征码的定位。同时,我们也不得不正视其硬伤,即:小零件特征的高明显性。
链布局与小零件(图 1~3)

*图 1 · 主链 ROP 栈布局
*图 2 · 子链 ROP 栈布局
*图 2 · 任选其中一个小零件
图 1、2、3 可以明显地观察到:
- 小零件特征明显,几乎满足形如 X; ret 这样的组合
- ROP 链中包含大量小零件
- 本系列 Demo 中,链与小零件主要落在堆内存
从游戏反作弊工程师的角度,可以完全基于上面的特征进行检测。
下面先谈 检测端工程问题(性能、误报),再逐条看 常见对抗思路 是否靠谱:VAD、页表、内核藏页、链内填料等。
- 一 · 性能问题和误报
- 二~五 · 常见对抗
- 补充 · 链内填料
- 六 · Lab 闭环验证
- 七 · 还有没有隐藏并过检测?(开放讨论)
一、性能问题和误报
性能也要考虑。毕竟是游戏相关,检测耗时、耗资源过多也是不可接受的;不过可以采取一些策略,比如 延迟检测、一局一检测、分批检测 等,规避掉这样的问题。
误报方面:可控。 ROP 外挂仍属注入类;即便像本系列 Demo 这样逻辑并不复杂的链,小零件数量级也往往在 几十。小零件形态又足够显眼,检测侧把 小零件个数(再配合 链识别度、间距 等约束)写进上报条件,就能滤掉大量「偶发像链」的布局,误报可以压在工程上可接受的范围。
二、VAD 欺骗:PAGE_NOACCESS,可以绕过检测么?
答: 很难当作可靠绕过。 有人会把链所在内存区域在 VAD 里标成 PAGE_NOACCESS 等,以期望反作弊在 VirtualQuery(ZwQueryVirtualMemory)枚举时把属性呈现为「不可读」,从而使依赖枚举的检测跳过、达到过检目的;思路是正确的,只不过忽视了反作弊检测 往往是成体系的(多维度的)。VAD 标签和真实 PTE 信息对不上,其本身就已经是高风险现象。这种用一个谎言掩盖另一个谎言的行为,不可取。
补充: 在我们团队截获到的外挂样本中,使用这种技术手段的外挂作者不在少数。
三、VT-EPT 技术能保护住么?
答: 从我的认知角度讲,不能。EPT 多在 可执行页 上做读/执行分视图;而扫 ROP 链本质是 读,链页也 不必可执行——这套很难用来护住链。VT 外挂更常栽在内核堆里的 字符串等静态特征 没藏干净。
四、自己构造 PTE 插游戏进程页表树能过检测么?
答: 很难当作可靠绕过。 能力足够的反作弊不会只信 ZwQueryVirtualMemory 枚举(弱基准);对游戏进程做 四级页表 walk 是常规手段,若页客观存在而 VAD 枚举不到,其本身就说明问题。实际上,使用此技术手段的外挂作者不多,可能也是觉得费力巴拉地搞半天,性价比不高。
五、能不能内核态构造一些应用层可以访问的内存,来过检测?
答: 不能指望稳定过检,但可以试试。 内核申请应用层可访问的页来藏链,就这套技术本身,外挂作者也是零星使用,结果就是反作弊工程师或许本身也不会太重视;一旦对方截获到外挂样本并分析,写针对性检测或许也就是一次热更。老话:不要用一个谎言掩盖另一个谎言——脑补出来的「高科技」,可能就是强特征,甚至坑早已经挖好。
补充:特征混淆与链内填料
Shellcode 可以在体里插入混淆指令、无效指令(例如 NOP 等),让反作弊工程师暂时依赖的 字节特征 失效。
ROP 也可以:在链中插入 无效数据 或 杂乱地址;执行时用 切 RSP(或等价的跳栈 gadget)跳过 这些槽位,保证正常链仍按设计跑通。
这类做法本质是 无休止的对抗——检测方收紧 gadget 形态、链识别度、间距/密度 等规则,对抗方再加填料;很难有一劳永逸的「藏住」。
第 3 期 draw-test 的双 ROP 链,可在 Hawkeye Lab 中用 !rop 对照验证,见 六。
六、最终的闭环
目前 Hawkeye Lab 已支持对 ROP 类注入外挂的检测,控制台命令 !rop。
图 4 · 与第 3 期 draw-test 双 ROP 链一致,两段各 26 个小零件
七、还有没有办法隐藏并过检测?
答: 同学们如果有更多的奇思妙想,可以评论区分享,一起完善这个技术体系。
本期总结
- ROP 强在 规避传统特征码,弱在 小零件与 ROP 链的高可识别性。
- 检测面:gadget 形态 与 ROP 链的高识别度。
- 性能 上可用延迟检测、一局一检测、分批检测等策略规避开销;误报 可通过「小零件个数阈值 + 链形态约束」等方式控制。
- 系列四篇至此收束:从认识 gadget → MessageBox 闭环 → draw-test 复杂链 → 反作弊视角的检测与对抗思考。
介绍下 Hawkeye Lab
Hawkeye 围绕 Windows 安全 打造相关产品;Hawkeye Lab 重点围绕 游戏安全,在近 5 年的对抗中不断完善和沉淀。
作为专业的游戏安全检测分析工具,它可以告诉反作弊程序员外挂的 行为特征、使用的 技术手段;同时也可以告诉外挂测试人员:你的「小聪明」会害了自己——Lab 会对样本 评估 并 打分,便于对照改进。
Hawkeye Lab 不做任何系统 hook,不会触发 PG(PatchGuard),不使用 VT;典型工作流下,一次自动化检测分析往往可以在 数分钟量级 内跑完(视样本与命令组合而定)。
开源
本系列 Demo 与 gadget 搜索依赖以下开源仓库:
- github.com/hawkeye-Leo/hawkeye-rop — Hawkeye ROP(gadget 搜索工具)· Releases
- github.com/hawkeye-Leo/hawkeye-community — Hawkeye Community(Lab 的基础运行时)
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
赞赏
- [原创]ROP(Return-Oriented Programming)返回导向编程 · 游戏安全相关技术边界探索【4】 64
- [原创]Return-Oriented Programming)返回导向编程 · 游戏安全相关技术边界探索【3】 593
- [原创]ROP(Return-Oriented Programming)返回导向编程 · 游戏安全相关技术边界探索【2】 4287
- [原创]ROP(Return-Oriented Programming)返回导向编程 · 游戏安全相关技术边界探索 1486
- [原创]【开源】Hawkeye TFE:双缓冲 minifilter 文件透明加解密(GPL-3.0) 1737