乐趣区

关于安全测试:易开源-简单可信赖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 逆向的问题?

十分欢送你参加游戏平安测试工具应用及意见反馈,咱们期待你的退出。

扫描二维码查看开源源码。

扫描社群二维码退出社群互动。

github 二维码

开源交换群

退出移动版