当前位置:   article > 正文

“易+”开源 | 简单可信赖,GameSentry 正式开源_npkextractor

npkextractor

导读: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 改动比较频繁,在兼容性上面临着巨大的挑战。而开源,不仅能让大家能享受到集体的智慧成果,便捷了游戏开发者的测试工作,也可以通过社区的贡献,覆盖兼容更多的引擎版本,提升行业整体效率,不重复造轮子。

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

目前版本的简要说明

在这里插入图片描述

欢迎加入贡献

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/718960
推荐阅读
相关标签
  

闽ICP备14008679号