一、网络游戏安全很有趣 

一直很想知道魔兽的游戏安全工程师是如何做游戏安全的,毫无疑问,魔兽是目前最流行的网络游戏,有着众多经验丰富的黑客在利润驱动的情况下以这款游戏的外挂作弊技术谋生,游戏黑客的作弊技能在《网络游戏安全解密》这本书里有提到(这是目前为止唯一的质量较高的游戏安全专门书籍),但游戏安全工程师是如何防御的就比较神秘了。咨询过一些做游戏安全的,都倾向于将防御手段隐藏起来,因此在游戏安全研究上基本靠游戏黑客提供资料。

网络游戏安全很有意思,首先网络游戏安全代表了最高的软件技术(想想MMO可是数以十万计的用户在实时交互,多大的挑战),其次网络游戏的虚拟经济和现实经济之间存在直接的联系(想想淘宝上游戏点卡,游戏道具,游戏代练交易,多大的利益诱惑),再次网络游戏安全的重要经验可以直接适用于其他软件(通用性对安全工作者很有帮助),最后游戏安全不仅是技术问题也是法律问题,例如对游戏破坏者的法律制裁,如何平衡玩家隐私权利以及如何保护游戏不被破解(例如使用rooktkit技术检测玩家电脑是否有游戏破坏程序运行的方法涉及个人电脑隐私问题,当然这点也是杀毒软件面临的问题)。

网络游戏安全将信息安全的大多数方面的串联起来了。例如网络帐号的安全(游戏拖库),网络充值的安全,网络服务器的安全这些属于网络安全的领域;例如客户端的安全,反调试,反逆向,反Hook属于软件安全的领域;还有其他的,例如游戏欺诈(冒充工作内容骗取帐号密码,钓鱼网站,帐号纠纷),内部员工(GM的事件爆的最多)非法交易,游戏分级(儿童游戏保护,防沉迷系统)。游戏外挂的逆向分析以及外挂检测与防御就与杀毒行业非常像(想想恶意软件样本分析,游戏外挂对游戏而言就是病毒)。简单的说优秀的游戏安全工作者要既是hacker也是cracker,既要懂技术也要懂侦查。

二、游戏攻击手段很多样

博客中有介绍过手游与页游的攻击方法及相应的工具,但没有端游的(我没有端游的安全工作经历,这也是没法说自己是个游戏安全工作者的原因,我觉得没做过端游安全的不是真正的游戏安全工程师),从游戏的共性来说,网络游戏的本质就是客户端与服务端的数据通信,攻击的对象就是一系列的数据,游戏安装生成的客户端数据(可执行文件,动态链接库,存档文件,资源文件),游戏运行时在进程中的数据、界面数据、时钟数据,游戏通信时从网络接口流出的数据,

我们知道游戏的攻击手段(外挂)总的来说为以下几种:

1. 自动化游戏(机器人) 端游和页游中广泛存在,例如精灵对战类游戏的自动打怪外挂,手游暂未出现该类型外挂。一般是模拟键盘鼠标对界面的操作,一般会通过像素采集来定位游戏界面上目标的坐标或状态(例如通过采集界面上显示怪物生命槽的地方的像素来确认怪物的生命状态)。

(游戏公司一般采用以下两种方法来反机器人外挂,一种是加入图片验证(也叫图灵测试,利用只有人类才能识别的特点,但仍存在问题,例如图片库的大小和更新速度是否能抵抗图片库遍历,另一种是对玩家特定数值进行监控,当超出限定范围时,预警)

2.内存修改 端游、页游,手游都存在,对端游和页游在单机和弱联网时代比较流行,但随着网游的大方向,这种作弊手段的有效性逐渐弱化,对手游目前为主流作弊手段

3.存档修改 同内存修改,端游、页游,手游都存在,端游和页游在单机和弱联网时代比较流行,但随着网游的大方向,这种作弊手段的有效性逐渐弱化,对手游目前为主流作弊手段

4.封包修改 网络游戏的核心作弊手段,分为脱机挂不依赖于官方发布的客户端程序,由外挂完全模拟客户端去与服务器进行通信)、内挂(以游戏客户端程序为载体,依靠客户端程序来完成与游戏服务器的通讯),私服(与脱机挂相反,是完全模拟了官方服务器)。这种类型外挂一般都先通过逆向客户端得到协议(封包)生成算法,然后hook ws2_32.dllwindows sockets的应用程序接口)的send(),receive()函数来重写封包.

5.加速器 常见与对战类游戏,例如页游通过加速动画播放速度来快速对战

6.安装包Patch 常见于端游与手游这种富客户端的,例如修改App store下载的IPA包,去除掉版权保护还原加密部分,例如重打包Android的APK包,使试用版变成完整版(verycd上一堆的破解端游)

7.runtime 攻击(API Hook) 常见于端游与手游这种富客户端的,API hook 运行中游戏进程,替换原始的动态链接库(windows上的dll,iOS上的dylib,Android上的so),例如iOS上的免费内购外挂。

(可以说Hook技术是外挂的基础,是病毒的基础,是软件入侵的基础)

(一般应对hook的外挂防御方式,就是检查游戏的客户端进程,看是否有已知作弊进程的存在,一般采取字符串匹配)

8.服务端配置漏洞 例如未上线商品配置为可购买,例如过期运营活动未及时下线

9.游戏逻辑漏洞 例如游戏经济系统设计的漏洞(经济系统失衡),比如说可以通过创建多个小号将系统赠送的初始物品转移到大号上;例如游戏中个人私密数值可以被其他玩家查看甚至修改;例如超级火爆的宠物精灵对战游戏(魔兽都出了宠物对战,可见有多火了)就会出现新捕捉的初始精灵未初始化而在某些操作中大量获得物品。其实游戏的安全漏洞绝大多数都是开发编写出来的(还有一小部分是策划设计失误,运营人员配置失误),如果恰好遇到不配给高质量测试团队的项目,那就是惨不忍睹(题外话,陈皓 曾写过《我们需要专职的QA吗》,他代表了一些开发对测试岗位的轻视,其实测试岗位的存在就是给开发背黑锅的,是对他们的保护).大型网游都是分布式程序,因此会遭遇分布式程序处理并发请求时由于竞态条件带来的问题。 

10.游戏运行平台的安全问题 例如越狱iOS设备与root后的Android设备就破坏了原本的安全机制,使得设备上运行的游戏需要考虑额外的威胁

11.帐号安全 属于web常见漏洞

12.充值安全 属于web常见漏洞

13.游戏欺诈 帐号归属纠纷,冒充游戏充值网站的钓鱼网站,冒充游戏外挂(特别是号称可以刷游戏币的)的恶意软件,冒充官方工作人员骗取帐号,在游戏中发送恶意中奖信息

14.游戏服务器的拒绝服务攻击 大并发的请求拖垮服务器

其中 4.封包修改最广泛6.安装包Patch 7.runtime 攻击最据技术含量(其实游戏外挂的最终形态还是从内核操纵客户端

补充(2013-1-14)

15.可预测的随机数生成算法  常见于在线扑克类博彩游戏(例如德州扑克),对这种游戏,常见的攻击手法有以下几种,一种是线上玩家之间的勾结(这也是根据ip限制防作弊场出现的原因,另一种是利用伪随机数的缺陷预测玩家手中的牌(提高随机率一直是安全方面工作的核心,特别是密码系统),还有一种叫算牌器,利用统计学的原理,计算出最有效的出牌战略

16.数据挖掘 从众多的玩家客户端挖掘出有用的游戏数据信息。例如魔兽数据库Thottbot,挖掘出来的游戏关键资料对游戏挖掘和打金工作室的玩家是非常有用的。

三、游戏攻击产业很给力

依靠游戏攻击盈利是一条很成熟的产业链,

专业游戏外挂制作培训的;

有专业做游戏代练(现阶段的游戏黑客们都比较聪明的选择贩卖外挂服务而不是外挂本身,理由一,卖外挂的方式会让游戏公司的安全人员通过外挂分析快速定位游戏漏洞并给予修复及相应的加固防御。理由二,卖外挂的方式会给法律投诉留下明确的证据,而代练没法诉诸法律只能封号了事。理由三,卖服务的盈利次数明显高于卖外挂。);

有专业做游戏虚拟商品交易的(虚拟物品交易引爆了RMI real money trade中间人这一专业机构,用于收购虚拟商品然后专卖给普通玩家,为不少游戏黑客提供了便利的洗钱渠道,很显然,中间人是不会关注游戏虚拟商品的来源是否合法)

有专业做游戏私服的(游戏私服很大程度上需要拿到源码,可以通过买通内部人员或社工入侵公司内外获得源码);

有专业做游戏盗号与钓鱼的;

有以游戏外挂为噱头做广告流量的;

其中较为成熟的是游戏打金工作室,他们先由专业人员挖掘游戏漏洞(也会配合社工内部人员拿取源码的方法),然后制作入侵工具(外挂),再通过工具在游戏中获取虚拟财产,最后通过交易中心(比如说淘宝,或独立网站)贩卖给其他玩家获利。其中好的游戏打金工作室也会提供良好的售后服务,例如封号处理(游戏管理者会有监控系统来监视作弊行为,并对情节严重者给予封号惩罚,这时候售后的重要性就出来了,售后服务者会挖掘解封流程的漏洞或买通GM进行解封)。这些工作室一般会盯上受欢迎的经济系统庞大的游戏,特别是有许多渠道能将游戏虚拟财产转出游戏换取真实货币的游戏,例如魔兽世界(WoW),在线扑克类游戏。游戏打金工作室一般会配合外挂的使用,但也有完全依靠廉价劳动力正常代练,常见于第三世界国家。

其中较为曲折的游戏虚拟商品交易,eBay在2007年就宣布禁止网络游戏道具交易,但不包括中国区,国内最大的电商淘宝就支持网络游戏道具交易。

补充(2013-1-14)

还有一种盈利手段,通过收集游戏中的数据给玩家提供有价值的游戏数据来盈利(相当于游戏攻略网),例如某样道具的确切坐标及地图路线,道具获取概率等。最有名的有魔兽(国内魔兽数据库Thottbot)的Thottbot插件,它会从Thottbot服务器中读取信息,然后显示出你的角色相关的有用的统计信息,例如在地图上显示给玩家要如何取得他们想要的道具,并且在地图上标出道具的出现率,当然,它在提供帮助的同时,也会将你的客户端的信息发送给Thottbot服务器用来丰富资料库。

四、学习游戏外挂制作很有用

正面的来说通过学习外挂制作也能提高it技能,例如要写一款基本的外挂(以端游外挂为例),我们需要掌握以下技能

第一步:.学会一种语言,vc++最好,c#也不错(c#适用于跨平台),虽然现在很多外挂都是E语言写的,不过最好还是学开发在用的语言

第二步:会简单的分析游戏,可以使用工具分析游戏窗口,控件,进程,线程,DLL模块,内存

第三步:熟悉windows API,可以编写进程线程操作,内存读写,鼠标键盘模拟

第四步:学会用cheat engine查找动态内存基址

第五步:学会使用ollydbg来调试游戏找关键CALL 找到一些关键的功能函数入口地址,并分析出该函数的参数,就可以编写CALL代码,来直接调用游戏中的函数,让其实现自动化. 

第六步:学会编写call代码

第七步:会加密解密封包

我们需要阅读以下书籍

《C++程序设计》

《windows程序设计第5版》

《windows核心编程》

《深入浅出MFC》

《subverting the windows kernel》

这样折腾一回,编程技巧,windows内核的了解也就嗖嗖的提高了。

五、游戏外挂防御很飘渺

要防御先得了解游戏为啥被攻击,攻击方法是什么。为啥被攻击?对于普通玩家而言,快速升级对稀有道具或购买这些道具的游戏货币的需求是最大的作弊诱因。正是这些普通玩家的需求产生了专业的供应方(打金工作室)。攻击方法在二、游戏攻击手段很多样有介绍。

防御有法律手段也有技术手段。法律手段一般是针对打金工作室的,一般以破坏游戏经济为罪名起诉,其实施效果在天朝真的很不好。技术手段有游戏设计优化的(例如严格限制每日经济上限),也有依赖监控系统与GM反馈后做事后代码修复(这个在页游公司最为常见),也有事前防御的(例如加壳,代码混淆,注入检测)。

之所以说游戏外挂防御很飘渺,是因为游戏外挂防御的限制很多,最主要的限制是这方面的资源投入往往不够,其次是防御涉及到多方面的配合(游戏外挂信息的反馈是否及时,游戏外挂分析人员的技术是否扎实,游戏负责人是否同意牺牲部分可玩性去换取安全性等等)。

总的来说外挂的产生是利益驱动,游戏虚拟货币与真实货币之间的紧密关系驱动了这一产业,游戏外挂会加速游戏的死亡,真正爱游戏的人,需要抵制这一行为,当然反外挂的主要职责在游戏制作商,他们有义务给玩家创建一个公平的游戏环境。

转自:http://danqingdani.blog.163.com/blog/static/186094195201309112412385/