如何加密Flash中的重要素材

richbox 发布于2010-12-21 18:10 | 170次阅读 | 字体: 打印预览


无论我们是开发Flash项目,还是Flex项目,都会涉及到对一些素材的调用(位图,SWF,视频等等),这些无外乎两种使用方式:

外部加载,就是通过在运行时,用Loader或其它加载类将素材加载到主程序中使用 嵌入SWF,我们可以使用Flash工具来嵌入资源,也可以在代码中使用[Embed]借助编译器完成嵌入工作,直接在程序中调用

而别人如果想得到里面的素材文件,是非常容易的,针对第一种方式,直接检测网络请求,就可轻易获取外部素材的地址;针对第二种方式,则可以使用破解工具(如闪客快斧)轻松解析SWF中包含的素材文件,然后导出即可。

大部分情况下,我们对这种状况并不在意。但有时候出于对版权或自己劳动成果的保护(现在国内对应版权的认知状况确实堪忧),我们不希望一些重要素材通过破解的方式被非法使用。那么该怎么办呢?下面引出一个实现方式,或许不是最好的方式,但希望可以带给大家一个启发。

注意两点:

首先这里所说的是指针对素材的防拷贝,而非代码,代码层面的加密可以参照其它工具 没有完美的防范,道高一尺,魔高一丈,所有的方式都是在增加破解的难度,而对于真正的高手,一切努力都是白费,然后能防范大多数傻瓜工具和菜鸟,其实已经达到很不错的效果了

假设我们有一个SWF动画,希望得到保护,那么如何做呢?

第一步:混淆字节数据

首先我们需要使用AS3开发一个工具,比如暂且命名混淆器,所做 的工作很简单,就是用URLLoader将要保护的SWF作为字节数组加载进来(注意加载进来的是ByteArray),这是二进制数据,就好办了,我们可以依据一定的规则,比如按位加,按位减等等,将字节数组混淆一下,然后用FileReference保存到本地。注意这个时候,这个SWF已经不能用正常的方式打开了。

第二步:嵌入

虽然这个SWF已经格式损坏了,但保险起见,我们还是不要通过外部加载,而是使用嵌入的方式来做。这个时候通过Flash工具的嵌入已经不可以了,因为格式损坏,Flash工具是不允许嵌入的。那怎么办?好说,我们可以使用来嵌入,注意类型一定要选择是任意类型,然后把要嵌入的swf的扩展名删除。比如:

[Embed(source="yourswf",mimeType="application/octet-stream")]

第三步:播放

成功嵌入之后,再播放就简单了。首先new一下你嵌入的资源,直接就是字节数组。然后根据加密的规则,做反向解密工作,生成可用的字节数组。然后使用loader.loadBytes()就可以顺利播放你的SWF了。

至于解密的代码,可以使用代码混淆器混淆。

这样即使程序被破解,也难以反编译出有用的素材文件。

转载请注明来源:RichBox(www.richbox.net/blog)


本文出处 : http://www.richbox.net/blog/?p=578 end

上一篇:招运营人员,欢迎自荐,要求如下

下一篇:RIAMeeting高端研讨会:自动构建和测试在RIA开发中的应用