第一步加密: 用flash读取一个正常的swf文件,以二进制读取后转化为byteArray对象。然后修改byteArray序列,然后把这个修改后的二进制对象保存到服务器上。这样这个flash文件的格式已经被破坏,破解工具就无法破解。(也可以用其他语言写个程序来修改二进制序列,目的就是打乱正常的flash文件格式。)
第二步解密:前端建立swf文件,用户正常访问这个swf文件。这个swf壳载入刚才加密的文件,以二进制读取。然后修正破环的序列,修正后可以loader.loadBytes来显示。
(但是这个壳还是可以被破解的,破解以后就知道我们的加密办法。但是那个主文件里面的代码和素材如果他想盗取的话还要在修改一下文件。增加了他的难度。这个swf壳可以做一些高强度的加密,增加难度,毕竟完全防止破解是不可能的。)
1首先建立一个临时的swf文件,随便载入一个test.swf。
2.建立一个加密文件 jiami.fla。复制一下代码
AS3代码
- var uq:URLRequest=new URLRequest("test.swf");
- var ul:URLLoader=new URLLoader(uq);
- ul.dataFormat=URLLoaderDataFormat.BINARY;
- ul.addEventListener(Event.COMPLETE,success);
- var bt:ByteArray=new ByteArray();
- var bt2:ByteArray=new ByteArray();
- function success(e:Event) {
- bt=e.target.data as ByteArray;
- bt2.writeByte(int(1));//就是这里,随便插入一个字节,然后把刚才的byteArray复制一份,格式就已经被打乱了
- for (var i=0; i<=bt.length; i++) {
- bt2.writeByte(bt[i]);//copy刚才byteArray对象。
- }
- loader.load(req);
- }
- var req:URLRequest = new URLRequest("http://127.0.0.1:8080/write.php");
- //后台php接受这个byteArray保存成swf文件。
- req.data = bt2;
- req.method = URLRequestMethod.POST;
- req.contentType = 'application/x-www-form-urlencoded';
- var loader:URLLoader = new URLLoader();
- loader.dataFormat=URLLoaderDataFormat.BINARY;
- loader.addEventListener("complete",handler);
- function handler(e:Event) {
- e.target.data;
- }
3 建立一个解密文件 jiemi.fla。 复制以下代码:
AS3代码
- var uq:URLRequest=new URLRequest("test_jiami.swf");
- var ul:URLLoader=new URLLoader(uq);
- ul.dataFormat=URLLoaderDataFormat.BINARY;
- ul.addEventListener(Event.COMPLETE,success);
- var bt:ByteArray=new ByteArray();
- var bt2:ByteArray=new ByteArray();
- function success(e:Event) {
- bt=e.target.data as ByteArray;
- for (var i=1; i<=bt.length; i++) {//从1开始,跳过我们刚才插入的1个字节
- bt2.writeByte(bt[i]);
- }
- var ld:Loader=new Loader();
- ld.loadBytes(bt2);
- addChild(ld);
- }