WeTest腾讯质量开发平台 建一座安全的 “天空城” ——揭秘腾讯 WeTest 如何与祖龙共同挖掘手游安全漏洞

腾讯WeTest · 2017年09月20日 · 最后由 jie 回复于 2018年01月23日 · 3700 次阅读

作者:腾讯 WeTest 手游安全测试团队
商业转载请联系腾讯 WeTest 获得授权,非商业转载请注明出处。
原文链接:http://wetest.qq.com/lab/view/335.html

WeTest 导读

《九州天空城 3D》上线至今,长期稳定在 APP Store 畅销排行的前五,本文将介绍腾讯 WeTest 手游安全团队在游戏上线前为《九州天空城 3D》挖掘安全漏洞的全过程。


《九州天空城 3D》(下文简称《九州》)是祖龙娱乐的一款正版授权次世代 3D 飞行手游,在 8 月,正式向全平台开放。作为一个前身是端游研发工作室的研发商,祖龙娱乐在《九州》中将端游中经典的 “飞行功能” 重新展现给了玩家,《九州》以东方幻想元素为基调,熟练运用了 PBR 材质渲染、全局动态光影、超清粒子特效、真实物理碰撞等技术,实现了 “双人飞行”,“360°全方位自由空战” 等创新玩法。在这款手游推出时,我们发现,祖龙娱乐在手游的研发技术上正变得越来越娴熟。

游戏设计方面,《九州》设计了很大的地图,不做任何的地形限制;另外玩家在飞行过程中也能发生战斗,全方位的空战体验在手游中还是相对比较少见的。

玩法方面,《九州》设计了 “双人飞行” 的特色功能,将玩家之间的互动与这款游戏的核心卖点 “飞行” 巧妙地结合到一起。不过,《九州》的游戏策划很清楚,作为一款 MMO 游戏,为了留住玩家,其最终的落脚点还是在社交上,为了让玩法和社交能够更好的结合,游戏的平衡性和游戏社区内的氛围建设非常重要。为了保证游戏的健康运转,祖龙娱乐对反外挂的工作非常重视。

《九州天空城 3D》安全测试的开端

安全问题相比游戏的其他问题,由于其测试的门槛较高,经常会被手游开发者忽略。一些手游开发者会抱有 “等出现了问题之后再去修复” 的想法, 然而等到问题出现的时候,往往对游戏的收入、口碑已经产生了很大的影响,常见的外挂危害包括以下几点:

腾讯游戏从进入游戏行业之后,就遭遇过不少外挂的侵袭,因为不断的踩坑,腾讯在进入手游领域之初,非常的重视安全测试。腾讯 WeTest 手游安全测试团队从 2011 年就开始对手游安全领域进行探索和技术积累,旨在通过提前发现游戏版本的安全漏洞,预警风险,帮助提高腾讯游戏的品牌和口碑。目前腾讯 WeTest 团队对腾讯内部所有游戏都会进行详尽的安全测试,《王者荣耀》、《乱世王者》、《穿越火线:枪战王者》以及《火影忍者手游》等精品游戏每个对外版本都会进行严格的安全测试。

在端游领域沉淀多年的祖龙娱乐,同样非常清楚外挂对于游戏平衡性的危害,由于在游戏质量测试方面与 WeTest 有过多次成功的合作,因此在《九州》上线前,祖龙方面很果断的就决定与腾讯 WeTest 手游安全测试进行合作,腾讯 WeTest 也希望能将自己在手游安全领域的经验传递给《九州》团队。

本文整理了《九州》安全测试过程中的一些思路和实践内容,与手游开发者分享,希望手游开发者能够了解安全测试,重视安全测试。(文中的漏洞均已修复,仅做学习交流参考)

技术难点

手游的使用场景与传统 APP 有着巨大的差异,不同的游戏玩法, 技术实现都不一样,因此手游安全测试团队需要对《九州》所有模块进行比较全面的风险分析,针对游戏核心玩法和游戏中高价值产出点重点进行漏洞挖掘,提前暴露游戏中潜在的安全风险,最大程度降低线上外挂打击成本。

《九州》游戏客户端使用 Unity3D 引擎开发,但是手游安全测试团队在接入协议工具中发现客户端并不是 100% 用 C# 实现,仅从 C# 层接入工具无法获取游戏所有通信协议数据。逆向分析游戏客户端后发现实际还有大量游戏逻辑使用 Lua 开发,对应功能的协议数据也在 Lua 层进行组包。接入协议工具必须从 C# 和 Lua 层进行 Hook,获取协议明文数据。

另外,在对协议数据的解析中也遇到一些挑战,游戏同时使用了自定义和 PB 两种协议结构,需优先对自定义协议结构进行格式转换,实现针对自定义协议 Decoder 进行解析,PB 部分则直接用 PB Decoder 进行解析。

测试方案

测试分析及规划

确定游戏核心玩法
《九州》的核心玩法主要是组队副本及各种活动,另外还有战斗外角色技能学习、装备、宠物等。

确定安全测试策略
《九州 》是一款使用 Unity 引擎开发的 RPG 游戏,游戏采用自定义的二进制协议(XML +PB),逻辑使用 c#+lua 开发。

本次安全测试目标覆盖整个游戏模块,主要分为周边系统和局内战斗逻辑,针对该游戏类型,本次测试以协议为主,针对部分游戏内的战斗逻辑,采用逻辑修改的方式进行测试。

WeTest 手游安全测试针对三方面进行检查:
1)游戏客户端资源安全测试
2)游戏逻辑安全测试
3)服务器稳定性

测试的实施

腾讯 WeTest 手游安全测试团队将审核的内容分为静态安全漏洞和动态安全漏洞。

静态漏洞扫描
主要通过静态扫描的方式,对游戏 apk 中配置档、资源文件、脚本文件、manifest.xml、so 文件,通过自动扫描的方式来进行检查项的确认。(目前此块内容已集成到 SR 手游安全测试方案中,覆盖了 120+ 条安全检查项和信息安全测试项)

动态风险分析
主要根据游戏特定的内容和玩法,针对性地分析安全风险点,通过协议、函数、内存、脚本等技术,多维度检查游戏服务器对相应的风险点是否有完善的校验或反外挂策略。

根据对漏洞类型的提炼,WeTest 手游安全测试团队根据《九州》具体玩法,推导出相应的获益方式。通常根据风险点分析的方式,可以完整覆盖到游戏中涉及到安全的部分,结合检查点,就生成了可以在实际操作中执行的用例,形成闭环。

SR 手游安全测试深度覆盖

其中比较典型的检测方式有:

1、双端协议修改
手游安全测试工具通过直接注入游戏的组包函数,自动解析协议结构,免去了需要依赖测试人员分析二进制数据进行协议破解。在没有协议结构文件时也能自动解析协议结构。手机和 web 端都可以进行协议数据展示,在手机上可以实施地显示协议发包的效果,在 web 上可以动态一键修改相应字段,互补不足。

双端协议修改工具 web 效果展示

2、函数动态修改

函数动态修改原理

对于单局类玩法的手游,函数动态修改具备最强的漏洞能力。但是早期的测试方法效率非常低下,需要每个函数单独编写 hook 函数、定义函数指针变量、申请独立 hook 资源、重新编译代码。同时,使用门槛很高,只有专业的安全专项测试人员才能操作。手游安全测试团队的函数动态修改工具通过动态通用 hook 技术,不需要测试人员再进行 hook 函数编码。

函数动态 web 效果展示

3、内存对象修改
WeTest 手游安全测试团队为测试人员直接展示出游戏中对象列表、对象属性名称、属性值等信息,并且可以以对象为单位进行搜索,告别传统手游内存测试工具搜索 “内存数值” 方式定位目标内存地址的低效方案,实现该项测试成本降低 70%。

WeTest 手游安全测试团队为《九州》挖掘出的部分漏洞和修复方案

客户端安全漏洞

1、游戏逻辑 DLL 未加密,可直接被反编译,降低了外网破解游戏的难度,也存在被外挂利用的风险。

2、游戏 LUA 脚本未加密,可直接从内存中 dump 出源码,增加了游戏被外挂利用的风险。

游戏逻辑问题

1、部分协议字段冗余,且校验不严格,存在严重逻辑问题。如生活制作功能中,物品 随机应该由服务器下发,而非客户端上报,否则存在制作指定物品的风险;对物品等级缺失 校验,导致低等级可制作高等级物品 。

2、部分验证逻辑只存在于客户端。客户端是不可信任的,客户端验证只能用于 UI 显示 控制,后台应该同样增加校验,防止客户端伪造或构造数据来绕过验证。如 “宠物更名” 中,服务器应该检查长度限制,否则由于该数据会写入 DB,可能被利用造成客户端对服务器数据库攻击。

问题示例

问题一:生活技能制作漏洞 ,低等级技能可生产高等级物品

【漏洞类型】:越权操作
【问题描述】
生活技能存在漏洞,使用道具制作请求篡改 recipeXXX 参数,可生产高于现有等级的道具

【影响面】
属于越权操作风险,利用漏洞可在游戏中获益。

问题二:一个同伴可以重复助战,存在刷评分排行榜的风险
【漏洞类型】:刷战力
【问题描述】
使用一个同伴 ID 通过 forXXXXX_pos 多次发送,可用一个同伴重复助战

【影响面】
可用于刷评分,影响游戏平衡

问题三:对达到购买上限的道具,可修改购买方式无限购买
【漏洞类型】:无限购买
【问题描述】
用其他货币可以无限购买道具

操作方法:
1.录制交易系统—商铺购买协议 “MalXXXXping”
2.修改协议字段 “pa_type” 参数为 “1”
3.发送协议

银币购买达到上限:

修改用金币购买成功:

【影响面】
突破游戏限制,使用元宝可加快成长。

强调文字解决办法

1、游戏客户端安全方面,需对客户端进行加壳,dll 代码文件加密,Lua 脚本则建议改为 Luac 或 Jit 模式,有效提升客户端被分析和破解的难度。

2、其他协议漏洞大部分属于后台检验疏忽型,需针对性完善后台逻辑校验。

最终效果

在项目测试阶段,手游安全测试团队为《九州天空城 3D》发现了数个漏洞,并针对这些漏洞产生的原因和修正都提供了专业意见,并很快顺利修正了问题,与开发商一起将隐患消除。《九州》的技术负责人表示:“外挂问题一直是祖龙在做游戏过程中要跨越的雷区,MMO 类型游戏内容很多,需要专业的安全团队来对游戏进行一个全方位的检测,WeTest 手游安全测试为《九州天空城 3D》正式开启不删档,创造安全、公平、健康的游戏环境提供了坚实支撑和保障。”


关于腾讯 WeTest 手游安全测试团队

腾讯 WeTest 手游安全测试团队从 2011 年初开始对手游安全领域进行探索和技术积累,旨在通过提前发现游戏版本的安全漏洞,预警风险,打造出业界领先的手游安全测试技术方案,在工具上已经支持所有腾讯在研和运营的手游项目。团队通过使用与正式服同样的游戏客户端和服务器,模拟外挂工作室制作外挂的过程,依靠自身的技术积累来提高专业程度,持续保持漏洞的发现率。

目前提供了专家测试服务,希望通过提前发现游戏版本的安全漏洞,预警风险,帮助提高腾讯游戏的品牌和口碑。

服务目前已经对外开放,欢迎前来使用http://wetest.qq.com/product/sr
如果对使用当中有任何疑问,欢迎联系腾讯 WeTest 企业 qq:800024531

共收到 1 条回复 时间 点赞

学习了 感谢分享

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册