swf加密常见的方式是对swf二进制数据流加进一些数据,然后生成一个加密后的swf。
swf解密常见的方式是对加密后的swf二进制数据流,删除那些加进来的数据,就得到了未加密的swf.
代码示例:
Encryption.as,加密;
package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.utils.ByteArray;
public class Encryption extends Sprite
{
private var _url:String="assets/init.swf";
private var urlloader:URLLoader=new URLLoader;
public function Encryption()
{
loadSwfs();
}
private function loadSwfs():void
{
urlloader.load(new URLRequest(_url));
urlloader.dataFormat="binary";
urlloader.addEventListener(Event.COMPLETE,completeHandler);
}
private function completeHandler(event:Event):void
{
urlloader.removeEventListener(Event.COMPLETE,completeHandler);
var bytes:ByteArray=event.target.data as ByteArray;
bytes.position=bytes.length;
trace("bytes:",bytes.length);
bytes.writeBoolean(true);
trace("bytes.length:",bytes.length);
var file:File=new File;
file.save(bytes,"encryption.swf");
}
}
}
Encryption.as,解密;
package
{
import flash.display.Loader;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.system.LoaderContext;
import flash.utils.ByteArray;
import flash.display.LoaderInfo;
public class Decryption extends Sprite
{
private var _url:String="assets/encryption.swf";
private var urlloader:URLLoader=new URLLoader;
public function Decryption()
{
urlloader.load(new URLRequest(_url));
urlloader.dataFormat="binary";
urlloader.addEventListener(Event.COMPLETE,completeHandler);
}
private function completeHandler(event:Event):void
{
var bytes:ByteArray=urlloader.data;
bytes.position=0;
trace(bytes.length);
var decryBytes:ByteArray=new ByteArray;
bytes.readBytes(decryBytes,0,bytes.length-2);
trace(decryBytes.length);
var loader:Loader=new Loader;
var context:LoaderContext=new LoaderContext();
context.allowCodeImport=true;
loader.loadBytes(decryBytes,context);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadSuccess);
}
private function loadSuccess(event:Event):void
{
this.addChild(LoaderInfo(event.target).loader.content);
}
}
}