公司老大一句话,我们产品安全组就屁颠屁颠的将主力放在了外挂防御上。虽然因为外挂的猖獗(其实一直存在,只是最近老大的老大的老大把重点放在了这块), 会议增多了,邮件增多了,rtx拉群多了,我一老实巴交的人也搞得像去进行毒品交易似的去弄外挂。以下讲讲我是如何防外挂的。
第一步:外挂弄到手
首先要了解最潮的外挂,这就得打入游戏群体,得装成是沉溺于游戏的00后臭屁小孩(我们是儿童游戏),满口都是刷伏魔塔,卖装配,练级。。。
在明确流行的外挂后,要确定如何获取,买的话要防诈骗,下载的话要防木马(很多盗号木马伪装成刷金币刷装备的极品外挂,宣传的你都留口水)。有钱的,淘宝 买,选择星级评价高的,一个月内有购买消费的;没钱的,关注游戏相应论坛,对于对战类游戏,有组团要求的,加入进去,你会得到很多游戏漏洞信息,当然得忍受群内无营养的唧唧喳喳,黄色图片刷屏(男银有福了)。
第二步:摸清外挂的原理
拿到外挂后,千万不要很high的直接打开,没条件的下个虚拟机,在虚拟机中打开。有条件的,配个专门机器从事外挂研究(与公司内网环境断开,只连外网)。
现在网页游戏外挂分为脱机与非脱机式两种,脱机的比较可怕,基本意味着对方已经完全破解你的通信协议,即游戏根本机制,要防御此种外挂,只有修改通信协议,此工程可大也可小。非脱机的制作水平参差不齐,基本属于好医治类型。
所有的网页游戏的常见招数无怪乎以下几种:
第一种:自动操作型。常见于比较固定的游戏模式中(人机交互无,少,或不变),比如说跑地图采集物品,机械式对战,用一个按键精灵,就搞定了。先自己操作一遍,录制成脚本,修改,回放。
第二种:修改客户端数值。无论是b/s,还是c/s模式的游戏,本质都是一样,都能在客户端内存中找到相应的数值,低级点的金山游侠,相应爱好单机版游戏 的玩家都自己整来玩过。我遇到的最好的游戏修改器,叫CheatEngine,不仅功能强大,能快速准确定位数值在内存中的地址,能反汇编,能制作图形化 游戏修改器,能。。。,关键是还附带通关游戏式的教程,相当有趣。简直是修改器中的战斗鸡。
第三种:封包修改。WPE一出手,就知有没有。网游说到底就是客户端与服务端之间交流做生意。比如说c去s那买西(c是客户端,s是服务端),c告诉s, 我是xx,我要买物品A(就是一条SENT数据包)。s接到消息后,先验证c是不是xx,然后验证物品A是否可以购买(比如说物品A是否上市,是不是只有 VIP才可以购买),接着验证A是否有足够多的钱可以购买。一切都核实,没有问题后,就发货(就是一条RECV数据包)。这些通信包,有相当多的工具可以 捕捉的,就像捕捉蝴蝶,可以用透明网袋,也可以用黑色垃圾袋。关键是要选择一款可以精确捕捉,并能让你读懂捕捉内容的工具。底层协议的封包捕捉工具像 wireshark的确能捉到,但就像你本来打算摘取一朵左上角有紫色斑纹的四叶草,结果去给你一片广袤的四叶草坪,捕捉回来也找死你。
对网页游戏而言,有以下几种通信方式:
a)直接通过winsock编程接 口进行,自定义通信协议格式的。用WPE吧,基本够用了。WPE捕捉的通信包都是十六进制的,但是可别一看到数字就害怕退缩了。要知道,在天朝(国外不知 道)网页游戏通信协议绝大多数都没有加密,官方解释是加密影响数据传输,用户体验(用户体验是啥,大到乔布斯小到坐在你旁边的产品策划,会告诉你这四个字 的魔力,威力是殿堂级秒杀)。业内解释是加密个球,年年月月,分分钟钟的加需求,做不完啊,已经一个星期没回家,一个月没洗澡了,老婆孩子长啥样都忘 了)。不加密的协议,特点是啥,地球人都知道,对比,对比,就能猜出来。我们公司的某款产品的协议就几乎就是透明的了,据说加入某个游戏群的见面礼就是破 解一条协议,阿猫阿狗都会了,你说不会,face不要太厚哦。实在太笨,就勤奋点,同一类型操作多做几次,对比数据包,变动的值,试着去修改,就我了 解,99.9%的协议只需要修改一个字节,一个字节也就00到FF一共有限次可能性。
b)通过AMF协议进行通讯的,常见与小型社交游戏,如QQ农场。用Charles吧,这个比WPE简单多了,直接是名:值的格式展示给你看的。简直就像看价格表一样清晰,公安锅盔:5元 ,谁都能看懂吧,要看不懂,别外挂了,做游戏良民吧。
c)通过HTTP协议进行通讯的,相当少,可忽略
d)通过SOAP协议进行通讯的,目前没见过这样的大型网游,但在满世界都叫嚣着云平台,计算即服务的时代,未来很可能有。目前就不用管了。
第四种:加速器。这个常见于对战类的游戏场景中,对于flash游戏,最常见的办法就是加快你flash动画播放的速度。玩过游戏的都知道,发一个靓招, 会有动画特效,越是绝招,特效越是风骚。但打架的时候,好看有个P用,反而拖后腿。打架最重要的是啥,天下招数,唯快不破。不要喝采,不要动画,只要比对 方快。对方打你一次,你已经打对方N次了,就算力量不够,捶多了也就捶死对方了。加速器与自动操作型外挂往往是绑定起来的,不仅比对方快,而且还不是人在 操作,多么可怕,多么杀!
第五种:其他。比如说改键精灵(强烈怀疑是按键精灵的亲戚),常见于动作类游戏,简单的说就是你按a键实际发送给服务端的消息是b键,一般使用该工具将复 杂的按键组合自定义为你最熟悉的按键组合,比如说你的左撇子,不习惯右手按键,那就修改成左手容易按的键,目的是啥,操作更流畅,比对方更快!
写到这里,发现自己有点偏离主题了,我貌似在宣传普及如何使用外挂,忘了自己是一位打击外挂的安全人员了。接下来,回到正题,讲讲如何防御吧,其实防御与 攻击相比,往往要弱很多,攻击是利益兴趣啥的驱动着,有一股强大的动力。而防御呢,是被迫的,是不情愿的,是额外的工作量,意味是得更晚回去,意味着老婆 因为你加班过多要爬墙。。。
第三步:外挂防御
第一种:自动操作型。自动操作型的工具是否定义为外挂,一直处于争议中。正方:谁叫你设计得这么傻,每次都一样,怪物出现在同样的地方,金币掉落在同样的 地方。。。山珍海味天天嗑,也得嗑吐。我只是在避开游戏的枯燥面,才能更好的体会游戏的乐趣。合情合理,我都要被说动了。反方:不公平,为什么我都鼠标手 了,这家伙挂上机后就装乖宝宝,看书学习,德智体美劳样样精通,现在连游戏都比我玩的好,啥,听说挂机外挂就是这家伙写的,搞错没,我们才小学五年级!
对付这种录制回放型(无论是基于GUI的录制,还是基于协议的录制),最有效的办法,就是靠图灵测试来判断游戏的对方是否为人类。相信大家在做登录操作 时,都遇到过需要输入验证码的情况,这就是最简单的图灵测试。验证的前提是,非人类无法识别图片(当然,随着技术的日新月异,图像辩识技术的成熟及普及, 终有一天,这一招会失效)。在游戏中,可以通过随机性的出现需要用户交互的场景,这一设计当然也影响了用户体验的友好程度,特别是儿童类游戏,应该降低游 戏的门槛。如何做得有趣有效特别是成本要低,是个比较头痛的博弈问题。
第二种和第三种,修改客户端数值和封包,其实都可以归类为客户端修改,对安全工作者而已,一切来自客户端的数据都是不可靠的(来自服务端的也一样),要根 绝这种最根本的是做好客户端服务端双向验证。但就我了解,基于开发成本或技术问题,全部逻辑放在服务端做验证就是个天方夜谭。
网页游戏中的小游戏比如说,兔子跳铃铛,宝石迷阵之类的都是将逻辑的判断完全放在客户端。发送给服务端的数据只有两条,一条是通知服务端游戏开始了,另一 条是通知服务端游戏结束了,我得了多少分,我需要奖励多少金币。如果服务端对积分的获取是否是合法的(有没有被修改)验证机制不完全(一般都是极其简单的 验证),就很容易被绕过。而游戏设计者采取的防御办法往往都是很无奈的,依靠给物品获取设置个上限。就像明知道小偷会定期打开我的保险箱,我唯一能做的是 在保险箱里少放点钱,太悲凉了!即使成本有限,不能完全防御,起码我们也要提高攻击的门槛。即使做在不靠谱的客户端,但也比不做要好很多。
对于依靠修改内存游戏数值获利的家伙们,我们要提高找到这个数值的门槛,将数值拆分存放,最简单的拆分办法为数值+验证值(按得分的游戏等级,游戏时间来综合计算)。
对于修改封包获利的家伙们,同样的道理,提高找到修改数值的门槛,进行封包加密,将封包中重要字段,如物品id,礼包id,积分,数量等数值采取一定算法 进行完整性验证,并将该验证字段再次加密处理,附加在封包中。当然其安全性,很大程度上取决于加密算法的安全性,但是与众多不加密的网页游戏相比,加密远 远比不加密好。
其实我一直在思考为什么不进行协议加密,就像为什么要将逻辑判断放在客户端一样,主要原因真是后台开发的稀缺,不得不将逻辑验证放在客户端吗?就如我所在 公司,一款网游,前端为6到7人不等,后台为4人。我不是开发,不好妄下定论。还有一种较为官方的说法,说逻辑判断放在后台,会影响网络游戏的通信效率, 我没有做过加密协议,与普通协议的通信性能测试,也不能妄下定论,希望了解的人能告知。
第四种,加速器。对网页游戏而言,一般都是靠加速动画的播放速度来加快游戏对战的速度。甚至有公司,把能否去掉动画播放的功能做成两个版本,VIP玩家可 以略过动画播放,加快游戏速度。就如网络上,各种播放软件,如果交费了,就不用看广告一样。一般通用的加速器也能达到这个效果,通过改变本地的系统时钟达 到效果。防御的手段,就是在通信包里加入时间参数,由服务端去验证两边时间是否一致。这种防御方法,同样受限于所谓的开发成本,对于将大多数逻辑做在客户 端的游戏是很无能为力的。
这篇长长的博客,也要接近尾声了,总的来说,外挂攻击远远比外挂防御来得凶猛。在这里我也仅仅是讲了网页游戏的常见外挂,并不没有包含客户端游戏的各种更 加巧妙的外挂方式。对,我们的防御做得如温室里的花一样较弱,我们的游戏存在各种大大小小的漏洞。并不是我们不能做好这一块,而是资源,无可奈何的资源缺 乏。对于一个公司,核心的东西才能拿到资源,游戏是否能盈利才是一个公司最核心考虑的问题,而对更新速度飞快的网页游戏,需要把大量的精力花在创新游戏玩 法,收费模式,游戏质量自然而然就被忽略了。
做为前任的测试人员,我明白,网游的测试,在协议,性能没有很大的问题上,跑通游戏后就可以上线了。如此要求的情况下,网页游戏测试基本上没有很大的成长空间的,需求决定了就业的前景。
陷入职业前景的苦闷中,在家休息了半年,静心思考以后的走向。于是我转向了安全这一块。如果一份工作不重要,那起码要有趣。
在线岗位工作了将近三个半月了,新鲜慢慢褪去,疑虑慢慢增长。幸运的是成长空间还很大,只是需要调整自己的工作方式。起码近期内,我会沿着这条路走下去
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)