freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

“易+”开源 | 简单可信赖,GameSentry 正式开源
2022-09-27 18:47:03
所属地 浙江省

导读:2022 年 9 月 15日,网易智企“易+”开源计划正式发布网易易盾游戏安全测试工具——GameSentry,本文将从技术角度分析 GameSentry 的设计逻辑与设计经验。

背景

GameSentry  诞生自网易易盾移动安全团队,源自团队多年在一线的经验和方法论沉淀。是一款简单、高效的工具,主要通过分析游戏协议内容、游戏函数逻辑和对应的地址、部分代码热更、自动化 Hook 等功能达到降低深层次安全测试门槛的目的。

GameSentry 目前已正式开源网易易盾 GameSentry 正式开源,做游戏安全保障的尖兵利刃),我们希望通过降低安全测试的复杂度,让游戏公司能够提前发现和感知漏洞和风险点,构建更成熟的安全保障体系,降低游戏风险,回馈玩家对游戏的热爱。

什么是安全测试 

通常游戏的生命周期可分为【开发】【测试】【发布】【运营】四个阶段。

在游戏发布之前,做好安全测试工作是非常关键的一环,好的【测试】不仅能更好加强外部防御,抵御发布后的外挂破解等侵害,同时还能查漏补缺,发现此前内部设计和代码架构上的疏忽,提前优化以期减少正式上线后的 bug,让玩家们获得更好的游戏体验,使得游戏的生命周期更为长久。

目前,常见的游戏安全测试有以下三种方向:

  • 游戏协议漏洞测试:通过修改协议内容来检查游戏在设计、数据校验、逻辑或数值设计上有无可被利用的风险点。这里与 QA 测试存在一定的重合,但侧重点不同。协议测试的输入不受客户端的限制。比如聊天功能,客户端的输入框是一定会有长度、类型限制的,而协议则没有这些限制。

  • 服务器健壮性测试:通过发送畸形、大量、无序的数据,校验服务器是否能正常运行。防止外挂或工作室恶意攻击,使服务器异常或宕机。

  • 外挂模拟测试:模拟外挂对游戏进行内存修改、变速、资源文件修改等操作,检测是否能在游戏中获得收益或降低游戏难度。

测试者们一般会根据需求选用合适的技术和工具,从攻击者的角度对游戏进行逆向分析和破解,进而主动发现和挖掘系统中存在的弱点、技术缺陷和安全漏洞,并进行缺陷放大和风险性评估,以期提前暴露游戏应用程序中潜在的安全风险,提供安全漏洞修复方案,最大程度降低事后危害与外挂打击成本。

通常有哪些测试方法

资源提取:AssetStudio、UABE

C# 代码:il2cppdumper、dnspy

Lua 代码:dump、load、reload

修改内存:GG、frida、hook技术、root 相关

下文将介绍主要的风险以及测试方法。

资源破解 

危害:游戏资源泄露

测试步骤:使用工具破解资源,观察是否存在未加密或可破解的资源,包括图片、音频、模型等;

注意:以游戏中不应该暴露的内容为判断,比如道具图标,背景音乐等;不因开场动画,主题曲,CG 这类的资源置为不通过。

unity3d 引擎使用:AssetStudio/GD Ripper;

UE4 引擎使用:umodel;

neox 引擎:GD Ripper/quickBMS;

npk 文件:NXPK 格式,EXPK 格式使用 NPKExtractor1.1.5.5;

使用 Extractor 工具提取

重签名校验 

危害:

  • 删除关键美术模型(怪物、角色、宠物等)文件,重打包,观察是否影响游戏逻辑-引发漏洞,且玩家因此获益。

  • 删除音频资源(战斗音效、背景音乐等)文件,重打包,观察是否影响游戏逻辑-引发漏洞,且玩家因此获益。

  • 删除特效资源(技能特效等)文件,重打包,观察是否影响游戏逻辑-引发漏洞,且玩家因此获益。

  • 如不能精确定位文件内容与类型,随机抽样测试。

  • 如果美术资源是多个文件分开放置,并可以从文件名中看出,尝试修改文件名,观察能否让免费皮肤或道具替换为收费资源。

测试步骤:

APK 解析后删除部分资源文件后依旧可以重打包,观察是否可以正常安装游戏、运行游戏。

dll 修改风险 

危害:修改游戏逻辑。

测试步骤:

  • 使用 ilspy 的 reflexil 插件修改 Assembly-Csharp.dll。

  • 重新编译为 dll,重命名替换原有 dll 文件。

  • 打包 APK,安装运行,观察是否生效。

SO 破解风险 

危害:修改游戏正常逻辑

测试步骤:

  • 观察函数列表,逻辑函数名是否被删除。例如:

    mono_image_open_from_data_with_name 、

    luaL_loadbufferx 、

    il2cpp_image_get_class 等。

  • 符号查找

    查找 data-%p,观察是否存在(il2cpp.so),一些特殊符号一定程度上能增加游戏被破解的概率。

反调试检测 

测试步骤:

  • 使用工具打开游戏。

  • 在 libc.so 和 open 处下断点。

  • 运行游戏,观察是否暂停。

存档移植 

测试步骤:

  • 将游戏目录下的文件拷贝到 PC 中。

  • 将文件拷贝到另外一台设备/模拟器中。

  • 观察是否继承(部分继承)原先游戏的进度。

存档文件明文存储 

测试步骤:

  • 观察是否存在存档文件,.sqlite, .db 后缀的文件,测试能否用 sqlitemanager 打开。

  • 观察是否存在其他存档文件,直接用 notepad 打开,查看是否存在明文。

  • 观察在配置文件中是否存在明文隐私信息,例如用户的账户密码,资源的存放路径等。

内存测试 

测试方法:分析游戏逻辑,修改对应位置的内存。(此过程需要使用工具对 APK 反编译、并 dump 内存内容,并使用 Hook 进行修改)

此内容需要根据不同游戏、不同逻辑进行测试。主要检测越权、数值、逻辑等异常。

协议测试 

测试方法:获取游戏中全部协议,并对其进行修改重发。(此过程需要工具对 apk 反编译,获取到协议发送相关代码,必要时需要对其进行解密。也需要使用到 Hook 对相关函数进行修改)

主要检测越权、畸形数据、重发等。不同游戏需要构造不同的测试用例。

GameSentry 有什么优势

普通安全测试需要测试人员有较高的逆向水平,对人员的技术要求较高。对于结果导向的测试,虽然逆向必不可少,但逆向费时费力,测试质量与逆向水平关系并不大。所以需要一款工具让工作内容不再放在逆向、Hook、Lua 修改这些技术上,而是直接关注游戏的逻辑

就以结果为导向的测试而言,虽然对逆向水平要求没那么高,但逆向却费时费力,也并非每个团队所能接受的。

GameSentry 主要通过分析游戏协议内容、游戏函数逻辑和对应的地址、部分代码热更、自动化 Hook 等功能达到降低深层次安全测试门槛的目的。可以简化内存测试、协议测试过程中对于 APK 逆向、Hook 编写、脚本修改、脚本 dump 的繁杂操作,大大降低测试人员的上手门槛和逆向工作。

而从实践效果上看,GameSentry 的设计思路是从攻击者的角度对游戏进行逆向分析和破解,主动发现和挖掘系统中的弱点、技术缺陷和安全漏洞,并进行缺陷放大和风险性评估,提前暴露游戏潜在安全风险,让安全团队可以在危害发生前就着手准备漏洞修复方案,可以最大程度降低事后外挂危害与外挂打击成本

为什么要开源

网易易盾在二十多年的一线实战经验中面对不同游戏类型场景痛点,沉淀了大量的经验、方法论,并基于此构建了一套成熟的工具集。这些年我们从社区吸取了很多营养,所以也想把这样一个融合团队多年经验的新一代产品回馈到社区。

作为一个开放的项目,我们认为将项目开源也有利于推动产品迭代,比如 Unity 的版本众多,且 il2cpp 改动比较频繁,在兼容性上面临着巨大的挑战。而开源,不仅能让大家能享受到集体的智慧成果,便捷了游戏开发者的测试工作,也可以通过社区的贡献,覆盖兼容更多的引擎版本,提升行业整体效率,不重复造轮子。

更重要的是,作为游戏热爱者,我们希望通过降低安全测试的复杂度,让游戏公司提前发现并感知到漏洞和风险,构建更成熟的安全保障体系,降低游戏风险,延长游戏生命周期,提升用户体验,回馈玩家对游戏的热爱!期待未来与更多游戏爱好者、游戏开发商们携手共进,生态共享。

目前版本的简要说明

功能
支持情况
函数展示
函数 Hook
内存实例展示
函数调用
函数修改
一键 Log 展示
dump(Lua、dll)
Lua 无重启修改
协议展示
协议修改
自定义

欢迎加入贡献

你是否正在规划新项目上线前的安全测试?

你是否正在头疼项目 APK 逆向的问题?

非常欢迎你参与游戏安全测试工具使用及意见反馈,我们期待你的加入。

# 移动安全 # 灰产圈
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录