不知道有没有人发过类似的文章,希望能听到大家的想法
假如你有一个SWF或者图像文件,别人即使下载下来了,也不能获得其中的内容,那么ByteArray或许能帮一下忙。
原理:
假设要加密的文件是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); }