FLASH产品安全解决方案(原)
1 概述
Flash是美国的MACROMEDIA公司于1999年6月推出的优秀网页动画设计软件。它是一种交互式动画设计工具,用它可以将音乐,声效,动画以及富有新意的界面融合在一起,以制作出高品质的网页动态效果。
Flash产品的研发主要经历产品研发入产品发布两个阶断,产品研发是结合素材完成动画产品的开发,生成fla文件,后将产品编译成swf文件进行发布,swf通过Flash插件可以直接在网页上在线播放,也可下载到本地通过播放器打开,但swf文件极易被反编译为fla文件,导致Flash被第三方盗取,直接影响产品的安全。swf文件也可直接转换为本地可运行程序(.exe),但通过简单的破解程序也很容易的被反向为swf文件。为此结合时下流行的Flash保护技术,及个人对安全的认识,对Flash的发布流程进行扩展,参见 (Flash发布流程) 图。
(Flash发布流程)
AS指Action Script语言,是Flash内置的编程语言。
图(Flash发布流程)对Flash文件的发布分为三种类型,分别为网页发布、加密文件发布、加壳可执行文件发布,其中后两种为脱机发布。现将公共部分(Fla产品研发、压缩swf文件、混淆/AS加壳)定义为产品发布,然后按网页发布、加密文件发布、加壳可执行文件发布对过程安全进行描述。
2 产品发布
产品发布包括Fla产品研发、压缩swf文件、混淆/AS加壳三个部分,参见图(产品发布)。
2.1 fla产品研发
Fla是Flash的源文件扩展名,在此即指Flash的源文件,它包含影片的所有原始信息,通过Flash制作软件可以打开源文件进行编辑。Fla是Flash的核心,可以直接发布为flash影片,所以它也是FLASH产品安全的重点保护对象。
2.2 编译swf文件
Swf是Flash影片文件格式,可通过Adobe Flash Player进行播放,swf只是对fla文件的简单压缩,做为一种公开的文件格式,通过硕思闪客精灵、ASV等破解软件可以将swf直接还原为fla文件。
2.3 AS混淆/加壳
对于在网页上发布的flash,必须满足swf格式的要求,浏览器才能够顺利播放,为了保护swf文件,需对swf文件进行AS混淆及加壳,处理后的文件依然是swf文件,只是相对于原始swf文件,还原后的fla文件不具有可读性。
AS混淆是在编译前对AS文件进行混淆处理,使其成为完全没有可读性的代码。一旦被混淆,就不可能逆向还原了。混淆后的文件大概连自己也很难看懂,更不要说其他人了。用混淆后的AS文件进行编译后,即使被AS的查看工具还原为代码,也是还原成为混淆后的代码,完全没有可读性,别人很难下手去修改和使用,从而达到保护源代码的作用。
AS加壳是指通过AS脚本对swf文件进行二次(可以进行多次)实时动态加载,可以通过加密程序先加密要保护的swf文件,AS脚本中进行解密播放,增加程序的安全性。
AS混淆/加壳后的文件需保证在播放器中正确播放。编写AS混淆/加壳软件需要具有扎实的AS编程功底,熟悉AS的运行环境,混淆/加壳后的文件相对于市面上的主流加密工具加密后的文件具有不易破解(增加调试的难度,而非破解难度大),并需根据破解动态持续更新混淆/加壳算法,加强保护效果。对于不熟悉AS的,可通过购买第三的混淆/加壳软件对swf进行处理,常见的有SWF Encrypt、DoSWF等,优点是操作简单方便,但市面上存有专门针对性的破解软件,能够快速破解加密后的swf文件,只有持续获取软件的更新,才能保证被保护swf的安全。
3 网页发布
网页发布是将swf文件放于网页中供客户在线播放或下载,为了防范swf被恶意使用,可以使用AS动态加载和URL绑定的方式保护swf文件的安全,其它还可以使用如更改后缀发布的方式。
3.1 AS动态加载
AS动态加载与AS加壳近似,只是AS加壳时SWF做为嵌入的资源加载,网页中AS动态加载是针对独立的SWF文件进行的。这样用户使用下载工具下载到的仅是加载程序,而非实际的动画程序。
3.2 URL绑定
在AS中强制注入站点URL验证代码,防止其它站点的引用盗链。
3.3 隐藏扩展名
为了防止网页Flash抓取程序的下载,也可简单的更改swf文件的扩展名,不影响网页标签中的播放效果。
4 加密文件发布
加密文件发布是指将swf文件通过自定义的加密/压缩算法变为另一种文件格式(在此处以xxx扩展名表示),这种文件不以通过普通的FLASH进行播放,所以需开发对应的播放软件,对文件解密,然后进行播放。
4.1 加密文件
通过自定义的加密/压缩算法改变文件格式,可以编写一个通用的程序进行处理。可以使用封装好的对称加密算法或公开密钥加密算法进行加密,注意选用解密较快的算法。
4.2 加密文件播放器
加密文件播放器用于播放加密后的Flash文件,使用与加密相逆的算法解密文件,然后进行播放。
加密文件播放器可以根据授权模式加入序列号验证(对于与机器绑定的应根据机器代码编写注册机),进一步加强文件的安全性,也可通过加密文件中的特征码对flash产品分别授权。
5 可执行文件发布
可以将swf文件通过第三方工具或编程语言打包为exe文件,通过加壳后进一步增强swf文件的安全性。壳的实现较为复杂,需具有反调试、保护入口点等防范技术。根据侧重点的不同,壳分为压缩壳与加密壳两种。
5.1 压缩壳
压缩壳功能侧重于压缩,加密保护不是重点。常见的如UPX、ASPack等。
5.2 加密壳
加密壳侧重于软件的加密保护,一些壳单纯保护程序,另一些壳还提供额外的功能,如提供注册机制、使用次数、时间限制等。加密壳还有一个特点,越是有名的加密壳,研究的人也越多,其被脱壳或破解的可能性也越大。常见的如ASProtect、Armadillo、EXECrypotor、VMProtect等。加密壳一般不能进行二次加壳,可对swf直接导出的exe文件进行加壳。
SWFkit导出的exe文件具有很好的加密性,不易反向为swf文件,但swfkit本身带有一定的加密特性,不能被其它加壳软件二次加壳。