原理:
假设要加密的文件是a.swf,首先通过AS3修改a.swf的ByteArray,然后发送到PHP(当然也可以是其他语言),在后台生成一个新的b.swf,这就是加密后的文件,别人如果下载下来打开,是无法观看的。如果想通过破解工具破解,那也是徒劳(因为这已经不是一个swf了)。
然后我们就可以在AS3里解析这个b.swf,将它还原成a.swf,这是通过URLLoader+Loader完成的,还是来看看代码吧
加密:
代码:
var urlLoader:URLLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.addEventListener(Event.COMPLETE,onLoaded);
urlLoader.load(new URLRequest('t1.swf'));
function onLoaded(evt)
{
var ba:ByteArray = urlLoader.data;
var bytes:ByteArray = new ByteArray();
for(var i=0;i<ba.length;i++)
{
bytes.writeByte(ba[i] + 13);//这里的13可替换为你想要的数字
}
//bytes.compress();
var request:URLRequest = new URLRequest ('http://127.0.0.1/today/t.php');
var loader: URLLoader = new URLLoader();
request.contentType = 'application/octet-stream';
request.method = URLRequestMethod.POST;
request.data = bytes;
loader.load( request );
}
PHP代码:
$fp = fopen( 'test.swf', 'wb' );
fwrite( $fp, $GLOBALS[ 'HTTP_RAW_POST_DATA' ] );
fclose( $fp );
解密:代码:
var urlLoader:URLLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.addEventListener(Event.COMPLETE,onLoaded);
urlLoader.load(new URLRequest('test.swf'));//加密后的swf文件
function onLoaded(evt)
{
var ba:ByteArray = urlLoader.data;
var bytes:ByteArray = new ByteArray();
//trace(ba.length);
//-------------------解密
for(var i=0;i<ba.length;i++)
{
bytes.writeByte(ba[i] - 13);
}
//-------------------End
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onBytesLoaded);
loader.loadBytes(bytes);
}
function onBytesLoaded(evt)
{
addChild(evt.target.content);
}