在这里跟各位游戏测试人分享、探讨下游戏协议安全测试方面的内容,下文简称协议测试。
一、协议测试是什么?
测试人员通过第三方工具篡改游戏客户端发送给服务器的协议,达到测试服务器逻辑、挖掘游戏漏洞的一种测试行为,称之为游戏协议安全测试。
二、协议测试的作用是什么?
协议测试的作用是测试服务器逻辑的漏洞,避免游戏上线后被外挂团队针对性的开发损害游戏利益的 “封包” 挂(外挂圈习惯将客户端发送给服务器的协议称为封包)。
举几个我工作中提交的 BUG 例子:
1.
如上图所示,修改背包中道具使用协议的数量字段为负数,服务器没有校验负数,使用-1 个则增加一个道具,实现道具盗刷。
2.A申请B加好友,B点击同意A申请,录制B产生的协议,然后更改ID为其他玩家ID,可以实现强制加他人为好友。
3.录制领取成就奖励的协议,将ID更改为没有完成的成就任务ID,发协议直接领取成功。
4.之前还发现过导致服务器宕机的BUG。
5.商店购买协议,将数量字段修改为 2147483647,发送协议后,钻石数量直接变为21亿。
等等,协议测试可以发现的BUG种类非常多。
如果上述 BUG 在研发期间没有被发现,发布到外网,一旦被外挂团队利用,游戏将遭受重大经济损失,被迫回档,严重的甚至可以让游戏直接倒闭。换句话说,协议测试可以帮游戏公司挽回重大损失,跟利益直接挂钩,发现一个致命级别的可以挽回几万到几十万的潜在损失。
三、协议测试怎么进行?
有能力的测试同学可以自己开发工具,可以参考我的另一篇文章,其中第二点介绍的内容(https://testerhome.com/topics/25293)。
不具备开发能力的测试同学,可以提开发需求单给开发,完善的协议测试工具应该包括以下功能:
1、录制协议并展示协议内各个字段的值。
2、修改协议中字段的值。
3、发送功能。
4、拦截协议,开启拦截后,在游戏中触发的协议会被拦截,不会发送给服务器,该需求是因为某些功能的协议对一个角色来说是唯一性的,比如创建角色,比如一次性奖励。有了拦截会比较方便测试。
5、储存用例,录制到的协议可以存放起来,像用例一样。
6、并发功能,将一条协议并发 10 次、100 次的能力。
7、过滤功能,心跳协议、移动协议等频繁出现的协议非常干扰测试,需要屏蔽他们。
8、选择性拦截特定的协议,比如某些游戏消耗体力是客户端上报给服务器来触发,选择性拦截消耗体力的协议,可以实现体力无消耗。
四、什么时候进行协议测试?需要进行多久?
协议测试应该放在封版后进行,此时游戏功能趋于稳定。
一款游戏全量协议测试时间应该在 3 周左右,一次小版本更新应该在一周左右。如果时间实在不允许,协议测试可以不需要一定赶在上线前测试完成,为什么这么说呢?因为游戏上线后,外挂人员也需要时间去开发外挂、挖掘漏洞,协议测试人员发现 BUG 后,游戏可以通过热更的方式进行修复,协议测试发现的 BUG 一般是服务器逻辑的修改,客户端是无感知的(前提是服务器支持代码热更新)。
五、总结
开发工具这些都是手段,不是目的,协议测试最重要的是挖掘漏洞、发现 BUG 的能力,也就是测试经验,这个只能自己积累经验并整理记录成风险模型。一个高级协议测试人员需要做到,给你一个功能,可以马上联想到这个功能可能具备的所有漏洞风险。
协议测试是一门深奥的学问,大家有什么问题欢迎在评论区一起探讨下。