首页
社区
课程
招聘
[原创]ROP(Return-Oriented Programming)返回导向编程 · 游戏安全相关技术边界探索【4】
发表于: 1天前 64

[原创]ROP(Return-Oriented Programming)返回导向编程 · 游戏安全相关技术边界探索【4】

1天前
64

ROP(Return-Oriented Programming)返回导向编程 · 游戏安全相关技术边界探索【4】

系列目录(共四篇)

  1. ROP 是什么,原理,初步认识 ROP
  2. 初步探索 — 基于 ROP 技术弹个 MessageBox & 安全退出
  3. 深入探索 — 挖掘 ROP 在游戏安全领域的能力边界
  4. 反作弊对抗相关思考 & 检测手段(本文)

历史回顾:第 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;典型工作流下,一次自动化检测分析往往可以在 数分钟量级 内跑完(视样本与命令组合而定)。

了解与订阅:Lab 中文版 · 订阅入口


开源

本系列 Demo 与 gadget 搜索依赖以下开源仓库:


← 第 3 期 · ROP 系列


冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

收藏
点赞 ・1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回