Flash基础入门之Flash 网页游戏的加密思路与实现手段
小标 2018-11-15 来源 : 阅读 921 评论 0

摘要:本文主要向大家介绍了Flash基础入门之Flash 网页游戏的加密思路与实现手段,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。

本文主要向大家介绍了Flash基础入门之Flash 网页游戏的加密思路与实现手段,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。

  希望通过本文章,来全面的阐述基于Flash网络游戏的加密安全方案,从思想,到技术,到实现手段的一个完整的、有效的全面介绍。
  设计目的:
  加密方案最强大的永远是人的大脑与逻辑,而非技术手段!
  ——自恋的张左峰
  首先要说的是,这是一套方案,由各个环节来完成各自的使命,使其成为一套有点点复杂的加密方案,当初设计设套方案时,也参考了Flash独有的一些特性,希望这套方案可以完成如下使命:
  1.客户端尽可能进行保护,防止泄露后第三方开私服
  2.客户端进行二进制保护,防止进行静态反编译(硕思、ASV)等
  3.客户端预埋暗桩,即时可以发现有外挂或第三方工具作祟
  事先防御永远比事后再查效率高
  ——自恋的张左峰
  4.防止脱机外挂出现
  5.其他防护目的(下面都会具体说明)
  这套东西,是我与王旭东(PowerBoy)同学合作完成,我负责设计、技术思路,他负责技术实现与具体算法,本套东西是2010年的研究成果,现在5年过去了,不知道Flash特性是否有更好玩的东西出现,也许可以做更多的东西。
  ———————————必火无敌分割线———————————
  必备工具:Doswf 好朋友Laan开发,请自行百度搜索
  功能说明:
  体外环节:
  我们是和Game2趣游进行独代合作,在这套方案的最外部,有G2来进行一些安全防护的实现,他们的目标是为了保护平台用户利益不受损失,具体的方案如下
  1.登录时间戳:在Web平台,有具体的登录时间戳,有时间有效期验证,具体可以防止别人截获了http的字符串,用别人账号登录
  2.http地址加密:具体使用了MD5串与Base64,防止进行明文穷举
  3.前台挂ifream:这么做,是可以让浏览器的地址栏,只看到一个不变的地址,防小白用的
  体外环节的安全保护,我们不做具体讨论,知道有这个东西即可!
  OK,我们正式开始介绍
  Flash环节:
  首先,我们要把所有的东西都介绍一遍
  Root.swf 这个是通过http来调用的最初始SWF,它是所有SWF的壳,或者理解为加载器
  Entype.swf 这是一个通过GameLogin服务器端Socket传过来的一个SWF这里利用到了Flash的一个特性,Socket传输的SWF没有浏览器缓存实体增加了破解难度
  gameMain.pbj 这是游戏的主文件,也是最核心的执行程序,Flasher看到这里是不是会说,哎,这不就是用Pixel Bender处理了一下吗?
  其实并不是这样的,起名Pbj,就是为了迷惑你,让你简单的以为他是PB生成的,这样让你进入思维误区,让你顺着我的思路去研究,结果发现,这根本就不是一个正常的PB文件。
  它其实是一个经过外部软件处理的特殊的SWF文件,我们有一个小工具配合这套方案,他的作用是,对gameMain.swf进行二进制的位移进行,二进制都位移了,你就算用ASV搞它,我相信只有ASV崩溃一条途径。。。。
  好了,我们来梳理一下流程
  1.通过本地工具,对FB编译好的GameMain.swf进行二进制位移,生成对应的PBJ文件
  2.这个位移算法的恢复算法,放到了entype.swf里
  3.现在开始加载网页,调用root.swf,得到了GameLoginServer的参数
  4.root开始corssdomain,开始843
  6.root使用参数链接GameLoginServer
  7.认证完毕后,服务器通过Socket传给root一个entype.swf文件
  8.root读取,并使用它恢复gamemain.pbj
  9.gamemain.swf开始执行
  10.正式开始游戏逻辑
  这也是图上的中间那条线的流程,在这个过程中,还会有跟服务器校验的环节
  工具的使用,使用Doswf,来对Root进行加密具体功能请看图中最左上角的图片
  服务器环节:
  1.服务器知道root的版本,与一些文件特征,这样防止被篡改或旧版的来连接服务器
  2.服务器知道root的加载域,服务器有个白名单,非此域用户不允许链接
  3.entype.swf有多个,对应不同的GameMain.PBJ,服务器根据他的条件来下发,扰乱破解思路
  4.服务器所使用的校验的MD5串,取自http客户端某个文件资源的MD5值,防护脱机外挂
  通讯协议环节:
  通讯协议的加密非常重要,明文在外那太恐怖了,WPE就能搞定你
  首先,我们使用最简单的对称算法,那些高级的Base64啥的就算了,服务器早崩了
  1.协议变密文:我们通过客户端的entype.swf里的关于协议的 钥匙 进行对称算法的加密,我们是弱强度,算法变化多,服务器会根据特定的条件下发这些信息,来跟客户端通讯,具体可以看图中最下面的那个大块
  简单说就是,你要付出体力,来把这几十个算法,一一进行破解,才能正常的和服务器通讯,其实没啥难度的啊,加减乘除,一个大学生一天能写出来100个。但是嘿嘿,我可以雇几个大学生来干这事,这就变成了从拼技术到拼资本阶段,这正是公司的强项,破解者累到吐血,你说他还会去破解你的东西么?
  2.防止加速齿轮:这块要通过客户端和服务器的配合来完成,具体的就是绝对时间与帧频关系的比例,来计算出这家伙有没有加速,但是如果他用1.1倍速。。。我还真没办法,因为我也要预判网络堵塞的情况发生。
  3.协议序列号:这事为了防止有人用WPE截获特定的封包,来进行反复发送的穷举实验,举个例子,破解者抓到了加密过的封包,当然,他肯定改不了,乱码吗。。。但是他可以反复发送进行逻辑漏洞的穷举实验,很多卡BUG(玩家利用漏洞获利的俗称)就是这么搞的
  所以是很有必要进行这方面的防护,我们的做法是在网络层与服务器进行数据序号的对应,服务器下发给我的数据,应该是连续的,不可能230号封包,在序列号应该是100的时候发过来,这样客户端不予回应,同理,服务器收到客户端非连续的数据,也不予回应,这样,那种简答WPE的玩家就无计可施了。
  暗桩环节:
  暗桩的目的用于监控、预防、提早发现,千万别让破解者发现你的安装,所以一定要隐蔽,不要出现任何“惩罚”环节,比如发现了掉线啥的!对的,你是这次把他搞下线了,但是对方也警觉了!
  1.检查是否是合法的客户端用户:我们这么实现的,在心跳协议中,我们会随机每间隔20-30分钟,会在一个心跳协议中,某一个位上,出现一个小标记,客户端,见到这个标记后,会回应这个协议,也是心跳协议上的小变化,这样做的目的在于,如果他不是合法客户端,他肯定不会注意这种细微的环节,如果连续3次,没有得到这个特殊的心跳协议,服务器会记录这个用户的详细数据(ID,行为等等)然后以重要事件来通知管理平台!
  其实我建议,多来点这种检测,真要是有脱机外挂出现了,挺麻烦的
  2.服务器的指纹:服务器上其实也有类似的设计,目的是为了防止服务器端泄露,如果在运营过程中,出现这种事情,我们可以第一时间知道(毕竟联运有这个风险,Liunx服务器只要在本地,怎么都能进入,对吧?Windows就更别提了)
  当然,我们后续的做法更狠一些,服务器启动的时候,一些代码要从我的中心服务器下发,嘿嘿,被我列入黑名单的服务器ID,那就根本无法启动了。。。呵呵吧。。。所以泄露了,你也运行不了www.zgqz.cc
  暗桩,一定要隐蔽,让人发现了,你就被动了!
  未解决的问题:
  这套方案中有一个比较尴尬的地方,也是C/S网络结构应用难以避免的地方,就是第一次跟服务器通讯的时候,我不知道你是否是合法的,不知道你的来源是否真实
  因为只要是C/S结构,这个问题就可以进行各种的模拟和伪装,这也是我图中那个连接线中间索要表达的意思
  就好像第一次服务器问你,你是合法的客户端么?你可以回答,我是,服务器会继续问你,那你的证据呢,客户端出示证据,但是这些所有的东西,只要搞清楚原理,我都可以模拟出来
  甚至包括大名鼎鼎的Nprotect,也有这个问题,在05年,我们曾经实验过,在脱机外挂后台调用完整客户端用以应付,NP的客户端合法性检测,呵呵,这么搞谁也没辙,所以我一直不认为,纯技术能解决这些问题,最终还要落实到“成本”中。这块我会在另外一个文章具体讲一下我的想法和思路www.goodcity.cc
  如果通过“成本”杠杆,让破解者知难而退
  如果大家对这块有好的方案,请给我留言,或者发我邮件,告诉我,实在感谢!
  总结:
  这套方案最大的特色就是,简单、有效、耦合性强
  简单有效就不说了,其实没啥技术含量,比起那些虚拟机、多进程监控、各种反Anti的手段,实在是小儿科,但是的确有些效果,诛神这么长时间,也没有出现重大的安全事故,我们至少防护住了90%的人,感谢剩下的10%的大牛们,没来折腾我们,实在感谢 :)
  大家可能很奇怪,耦合性强不是不好吗,但是在加密这块,各个环节组成的整套方案,无疑会大大的增加破解难度,因为你无空子可钻,你需要把这套东西的所有环节都打通,都搞明白,才能得到破解者想要的效果,无疑大大的增加了破解的时间和难度www.top360.cc
  但是它自身也有自身的问题,环节太多,人工出了错,超级麻烦。但是安全性和便利性本就是双刃剑,对吧?
  其次,在未解决的环节中的确存在了一个困扰了我10年的疑问,第一次链接如何判断是真实用户,后续所有的校验,都无法解决这个问题,这可能就是C/S结构的特点,哈哈哈
  最后,希望这个分享可以帮助大家拓展思路,对安全的投入是无形资产,安全就是保证我们的投资(你花了这么长时间做的游戏,就是你的心血,你的投资)www.harton.cc
  但是也别为了安全而精力跑偏,因为世界上没有绝对的安全,防护住90%的人就是胜利,大牛年年有,唯有今年多!
  好了,真的是最后了,希望大家的游戏产品都大卖,都财富自由!
  像还继续战斗在游戏研发一线的同学们致敬,共勉!
  PS。钱永远挣不完,身体是自己的,多锻炼,合理安排休息!

以上就介绍了Flash的相关知识,希望对Flash有兴趣的朋友有所帮助。了解更多内容,请关注职坐标常用软件Flash频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程