`

通过ByteArray加密SWF或图像

阅读更多

不知道有没有人发过类似的文章,希望能听到大家的想法

假如你有一个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);
}
 
分享到:
评论
1 楼 弃天笑 2011-04-25  
这样加密会不会造成字节的位的丢失,从而还原的时候会出错呢?
还有一点,这个效率怎样
如果每个swf都这样进行解密的话,效率会比较低吗?毕竟是需要循环的

相关推荐

Global site tag (gtag.js) - Google Analytics