flash素材和代码的二进制处理不堪一击

最近做as3 开发,难免要学习一下别人的代码(当然我自己的代码是不做处理的,因为处理也没用),但是有些感觉不错的应用的主程序或者素材都是二进制处理过的,拿来直接反编译看不出
来都用了什么功能,但是发现既然是二进制的要让flash客户端来用,必然要自己解压。这样解压算法必然能在flash中看到,所以这些所谓的二进制是显然的不堪一击。


百度空间应用 【幸福厨房】感觉做的不错,有值得学习的地方,但是分析发现,主程序和代码
都是二进制压缩处理过的,从loading flash 中发现

了解压算法

private function encryptLoaded(event:Event) : void
{
var _loc_2:ByteArray = null;
var _loc_3:ByteArray = null;
var _loc_4:int = 0;
_loc_2 = event.target.data;
_loc_2.uncompress();
_loc_3 = new ByteArray();
_loc_4 = 0;
trace(_loc_2.length);
while (_loc_4 < (_loc_2.length - 1))
{
_loc_3.writeByte(_loc_2[_loc_4] - _loc_2[(_loc_2.length - 1)]);
_loc_4++;
}
var _lc:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
var _loc:Loader = new Loader();
_loc.loadBytes(_loc_3, _lc);
_loc.contentLoaderInfo.addEventListener(Event.COMPLETE, assetLoaded);
}


然后仿照这个解压算法 用脚本处理一下就ok了。
下面是python 解压 kitchen.data 的例子:

#!/usr/bin/env python
#coding:utf-8
# Author: adan --<>
# Purpose:
# Created: 2009-10-28

import sys
import zlib
import struct
import cStringIO

datafile = 'kitchen.data'
swffile = 'kitchen.swf'

fh = file(datafile,'rb')
fh1 = file(swffile,'wb')

b = fh.read()
bz = zlib.decompress(b)
length = len(bz)
print length

last = bz[length - 1].encode('hex')
lastInt = int(last,16)

outstr = cStringIO.StringIO()

for num in range(0,length):
x = bz[num].encode('hex')
i = int(x,16)

d = i - lastInt
e = struct.pack('i',d)
outstr.write(e[0])

fh1.write(outstr.getvalue())
fh1.close()


解压出来 kitchen.swf 再反编译发现一切都是赤裸裸的。
大家不要鄙视我看别人的代码,我只是说这种方法根本行不通。

你可能感兴趣的:(AS,Flash,算法,Python,百度,脚本)