之前,我曾多次因自己的Flash被人破解而愤怒。前段时间有人在母校论坛白云黄鹤问及Flash反破解技术的可能时,我突然觉得,靠技术,实在只是一种被动的防御。尤其是基于SNS API的游戏类Flash应用防作弊的问题,是有很多新的思路可寻的。今天就来简单分享一下我的看法:
首先,Flash作为客户端技术,想要完全保证它的安全,是非常困难的。如果把破解视为“攻”,反破解视为“防”,我认为在“攻”这一块,各种技术还是非常强的。
首当其冲的是ActionScript Viewer(ASV)软件。目前ASV6已经可以直接查看AS2、AS3的源码,并能根据SWF生成一个JSFL(JavaScript Flash,Flash IDE提供的一种JavaScript API技术,我曾在本科三年级时做过一系列研究)命令序列和资源库。利用一段JSFL命令,我们可以操纵IDE,而利用ASV6生成的JSFL,我们甚至可以还原一个FLA文件出来!
很多时候,对一个Flash游戏进行作弊,仅需要弄清楚游戏分数的提交目的地址和参数名称即可。比如你玩一款赛车游戏,用40.56秒跑完全程,这时候可能Flash会提交一个t=40.56到某目标地址,比如mygame.com/myscore.php,这些参数,直接用Firebug就能看到,根本不需要生成FLA源文件。即便在提交表单时,做一些简单的混淆,仍然容易被ASV识破具体算法。
的确,我们把保护自己的手段过度地依赖于技术了,这会让我们失去很多机会。
其实,Flash游戏防作弊、抄袭,非技术渠道更加重要,这里简单说一下两点:
- 游戏内容本身要承载品牌
抄袭者对于一个品牌性很强的应用,很难继续“添油加醋”。例如某娱乐公司做了一款游戏,其中许多游戏人物都来自它旗下的签约艺人,你就很难抹掉这种品牌特征,然而对于那些毫无品牌概念嵌入的Flash,几乎不做修改就能直接用,例如我上面提到的“伸懒腰的时钟”; - 积分排名系统要灵活多变
积分系统的智能化一定要做好,排名可以按照社会关系和时间范围来分。例如,我和好友的排名,24小时之内的排名。即便是这个Flash再容易破解,如果每天数据都更新一次,破坏者也很难有精力耗下去
希望这两点能为您新的Flash游戏开发带来帮助,不过,倒是有一个问题,当所有的游戏都是来自于抄袭渠道时,还有人会自己开发Flash么?
我这么说的原因是,国内某著名SNS社区已经开始官方集体出动破解Flash并以外部应用程序之名义植入到自己的平台下……似乎还有一个规模化的技术破解团队和人肉“助破解”社区:所有不幸遇难(当然,你也可以认为是荣幸被看上)的SWF都被在_root植入了一个LoadVars对象负责提交分数到自己的服务器;而人肉破解社区则负责查看哪些Flash会有外链(有过于强的保护意识),凡是发现外链到作者网站的Flash都会被扣上“弹出广告”的罪名并可“举报”给伟大光荣的“管理员”同学……
当然,这次我也没有必要愤怒了,只是遗憾这些Flash游戏的作者在发布他们的游戏之前并没有看到本文。而我觉得作为一个转型为Blogger的Flash Developer,多少是有点幸运的:)