建一座安全的“天空城” :揭秘腾讯 WeTest 如何与祖龙共同挖掘手游安全漏洞

作者:腾讯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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏BestSDK

如何以更少的成本、更便捷的方式构建私有云?

这些选项与传统的服务器部署模式类似:你可以部署在自己的服务器上,也可以在一个联合本地中心部署,你甚至可以在“托管但是专用”的基础上使用一个传统的托管服务。   ...

3527
来自专栏java一日一条

为什么我要写自己的框架?

其实说白了框架就是使用别人造好的轮子。在软件开发里面就是command+C/command+V。

1171
来自专栏CSDN技术头条

Dropbox存储架构:扩展至EB级别的实践

多年前,我们将 Dropbox 称为“魔力口袋”,因为它设计的初衷就是让用户将所有文件放在一个顺手的地方。一路发展下来,Dropbox 已经从一个简单的东西发展...

2986
来自专栏CSDN技术头条

视频监控“入云”11个理由

VSaaS(视频监控作为一种服务),是指基于云托管的视频监控。该服务通常包括视频录制、存储、远程查看、管理警报、网络安全等内容。据统计,93%的企业已经采用了云...

9555
来自专栏轮子工厂

给新手程序员的一些建议

解决问题是一个通用的能力,本应在学生时代习得,若是不擅长解决问题,怕是短时间内很难提升,但在一个具体的领域里,往往「途径」更加重要。

912
来自专栏ThoughtWorks

微服务 | Martin Fowler

“微服务架构”这一术语在前几年横空出世,用于描述这样一种特定的软件设计方法,即以若干组可独立部署的服务的方式进行软件应用系统的设计。尽管这种架构风格尚无明确的定...

4296
来自专栏腾讯技术工程官方号的专栏

腾讯研发效率领先的秘密:高效率的工具

1K14
来自专栏芋道源码1024

女博士工程师:聊聊硅谷互联网公司的开发流程

之前很多文章或多或少已经说了一些点,现在很多国内公司也参考了一些流程,最近从始至终参与并负责了两个比较大的项目。这篇文章就系统的说一下开发始终吧。总的说来,我们...

1434
来自专栏Java技术栈

DevOps到底是什么鬼?DevOps介绍及工具推荐。

什么是DevOps DevOps是Development和Operations的组合,是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营...

3985
来自专栏腾讯开源的专栏

【开源公告】Unity手游自动化测试框架GAutomator于12月6日正式开源

GAutomator是为Unity游戏量身定制的自动化测试框架。类似于UIAutomator操作Android标准控件,GAutomator通过Gameobje...

4226

扫码关注云+社区

领取腾讯云代金券