无论我们是开发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)
上一篇:招运营人员,欢迎自荐,要求如下