背景
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 二维码
开源交换群