文本风险定义:
在游戏中除了动画,声音参与和玩家的交互之外,游戏中的文本也属于和玩家交互中一项重要的元素。由玩家操作触发任何不同于游戏自身逻辑设定,进而破坏游戏平衡的文本内容都可以称之为文本类风险漏洞。(这个定义自己瞎写的…)
文本风险危害(漏洞举例):
很多玩家可能有疑问,一些文本内容能产生多大的风险呢?笔者肯定是在小题大做…
我们先来看几个例子:
在游戏中你有没有遇到过一些玩家无限用变色文字打着广告或者刷着信息呢?
或者游戏中出现大量反动垃圾信息?
当你去尝试制止他的时候,是否会受到对方的辱骂?更或者,直接无限消息刷屏让你无法正常接受其他消息
当你发现自己无能为力的时候,你想去举报他,却发现对方是空昵称!!!
当对方不是空昵称时,你以为自己可以举报,但是对方的昵称你能够用输入法打出来么?
你说你可以复制粘贴,但是你真的确定复制出来的昵称就是对方的昵称么?(如下图角色昵称表面上看是x?,但是却无法找到玩家)
好不容易当你遇到一个作弊而且拥有正常昵称的玩家,终于可以举报了,却发现下图这种情况
你到底举报的是谁???
由上述可见,文本类风险稍微加以利用,造成的危害远远比想象中的大很多很多。将上述风险进一步归纳如下:
文本类风险存在原因:
文本类风险存在的原因是对文本没有做校验或校验强度不高,或者校验只放在本地客户端,有些游戏虽然做了服务器校验,但是校验强度不够。
没有校验,
文本类风险漏洞挖掘方法:
知道了文本漏洞存在的原因,那针对未做校验的游戏,可以通过用户直接操作文本挖掘漏洞,当游戏测做了检验时,则挖掘的关键便是如何去巧妙的构造协议去绕过游戏的重重校验了。
在开始挖掘前,先来简单的了解下文本类协议的基本结构(可能前后顺序和具体字段会有出入)
结合上述总结的文本类风险,对照协议结构图,文本内容风险漏洞主要更改协议结构中Text字段,而文本属性风险风险主要更改Text_len和Text_attribute字段。下述分别举例各类风险挖掘过程:
选取某游戏在创建角色昵称时协议,简单说明唯一性风险和空风险常规挖掘思路。游戏在登入界面创建角色时发送的协议如下
[05 D8 0B 05 F6 DB 05 31 32 33 00 00]
该协议被工具切割为以下结构:
l协议结构(游戏创建角色昵称协议)
[05 D8 0B 05]-协议ID
[F6 DB]-协议ACK
[05]-协议长度
[31 32 33]- TEXT内容(角色名)
[00 00]-文本结束标志
l唯一性风险
上述协议实际上为创建角色名为123的角色昵称,为构造雷同角色,可以按照上述协议结构直接发包,如果服务器校验通过,则证明判断逻辑在本地,创建雷同角色成功,如果服务器校验不通过,则需要想办法进行绕过:
l空风险:
仍然是上述游戏,为创建空昵称,我们直接将[31 32 33]字段改写为[00 00 00],观察服务器回馈,如果通过,则空角色创建成功,如果不行,我们继续利用上述的思想,利用转义字符进行欺骗,构造[0A 0D]的TEXT段,如果服务器过滤不完全则又一次创建出了空昵称。
选取某游戏发言协议,简单介绍脏词/敏感词/特殊词,文本大小/颜色/长度的挖掘思路。游戏中玩家向另一名玩家发言时,我们截获到协议的数据为
[3C 2C 37 0A 30 39 12 0D 0C 00 00 00 E2 88 95 F8 EA E8 6D 00 01 00 00 00 E0 00 00 00 76 65 6E 69 64 69 63 00 00 00 17 00 0C 00 00 00 24 69 66 30 32 24 31 38 24 31 38 24 00 1C 00 00 00 01 00 00 00……],该协议被工具切割成如下:
Ø协议结构(某游戏的聊天发言的协议):
[3C 2C 37 0A 30 39 12 0D]-玩家ID
[0C 00 00 00]-频道ID
[E2 88 95 F8 EA E8 6D 00]-接受者玩家ID
[01 00 00 00]-接受者频道ID
[E0 00 00 00 76 65 6E 69 64 69 63 00 00]-接受者昵称
[00 17 00 0C 00 00 00 24 69 66 30 32 24 31 38 24 31 38 24 00]-聊天信息TEXT,其中17代表TEXT段长度,后续解析成字符串$if02$18$18$Z,这是这款游戏的文本格式,最后用[00]代表协议结束
[1C 00 00 00]-聊天类型
[01 00 00 00 ]-聊天标志
…
l脏词/敏感词
对于上述协议结构,如果想要创建脏词,则直接修改协议中的TEXT段进行重发,如将协议中$if02$18$18$Z中if02字符换成对应的脏字即可。如果发送的敏感字符被服务器抛弃,则可以尝试利用前面转义字符的方法去构造特殊字符欺骗服务器。
l特殊词
特殊词可以简单理解成几年前的火星文,从ascii层面来看,是一些无法被解析成文本字符的文字,其构造方式很简单,直接将上述协议中text中字符修改为我们常见的ascii和汉子编码外的字符即可,这样再由游戏解析变会变成无法辨认的特殊词
l文本大小
继续选取上述协议字段,发现了TEXT中[00 17 00 0C 00 00 00 24 69 66 30 32 24 31 38 24 31 38 24 00]ascii被解析成$if02$18$18$Z,其中if02代表内容,而后续18,18经过分析可最终确定为文本的长宽,直接修改18,18为FF, FF,则可以实现超大文本。
l文本颜色
继续选取上述协议字段,解析被工具切割的字段中,有一项聊天类型字段“[1C 00 00 00]-聊天类型”,进一步分析可以了解到1C代表着普通聊天,而当会员发送消息时,其字段被解析成了[20 00 00 00],显示字体为紫色,则可以直接利用工具修改对应字段后进行协议发送,实现文本颜色的修改
l文本频率
详见协议重放章节
总结
将上述挖掘方法可简单作出归纳
文本类风险属于游戏中重要的漏洞分类之一,因利用方式较为简单,在外网下漏洞传播迅速且危害较大。在漏洞挖掘的过程中,需要结合服务器的反馈去猜测游戏对应的过滤规则,并能结合游戏一些自身的属性进行针对性绕过,及时发现对应风险,做到防患于未然。
领取专属 10元无门槛券
私享最新 技术干货