最近做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 再反编译发现一切都是赤裸裸的。
大家不要鄙视我看别人的代码,我只是说这种方法根本行不通。
分享到:
相关推荐
WebService二进制处理
适用于将二进制数转换为十进制,A为十进制,B为二进制。{A,B}每次左移一位,判断A的每四位是否>4,若大于四则+3,否则保持不变;B为多少位二进制数则左移多少次。...代码为32位二进制数转换为十进制数。
真正恐怖的二进制数来了,要将二进制数转换成10进制数。因为二进制数太长,连转换成的10进制数写写都要好长好长呢!要求还特别苛,没有把握你能帮得上忙,反正我也晕了很长时间。 Input: 有1000个二进制数,最长的...
汇编指令与二进制代码对照表汇编指令与二进制代码对照表
如果我们⽤⼗进制去表⽰种群中的个体,并且如果设定种群规模为10个个体,那么很简单,只要在-3.0到12.1这个区间随机选择10个⾮重复的...遗传算法十进制转为二进制matlab代码,该段代码适合初学遗传算法的小白进行学习
二进制数据二进制数据二进制数据二进制数据二进制数据二进制数据二进制数据二进制数据二进制数据二进制数据二进制数据二进制数据二进制数据二进制数据二进制数据
二进制转换为十进制,十进制转换为二进制,控制台应用程序
由于二进制数在C#中无法直接表示,所以所有二进制数都用一个字符串来表示 例如: 二进制: 1010 表示为 字符串:”1010″ int d = 10; //十进制转二进制字符串 Console.WriteLine(Convert.ToString(d,2)); //...
该代码是实现二进制转化为十六进制,可以用在嵌入式开发中,在嵌入式中,首先利用图片转换工具,将每个图片的像素点转换为二进制,然后在将使用该代码,将装换的二进制变为十六进制。
c# 处理二进制 c#源码 c# 程序 c# 处理二进制 c#源码 c# 程序
"rb"不是说打开二进制文件,而是说以二进制的方式来打开文件,任何文件都可以用二进制的方式打开,所以我觉得这里没有问题。然后你的问题中说每次读取两个字节,但是每个ASCII码的值只是用一个字节来表示的,所以我...
主要实现二进制和十进制的数字转换的源代码,void CharToHex(char * dest, char * buffer , int len)中实现了字母间的二进制转换
c#读取二进制文件c#读取二进制文件c#读取二进制文件c#读取二进制文件c#读取二进制文件c#读取二进制文件
读取二进制图片
处理二进制文件,一个很好的处理二进制文件的源代码
kell 二进制 代码kell 二进制 代码kell 二进制 代码kell 二进制 代码kell 二进制 代码kell 二进制 代码kell 二进制 代码
运行二进制模板的结果比仅使用原始十六进制字节更容易理解和编辑。 二进制模板易于编写,看起来类似于 C/C++ 结构,只是它们可能包含 if、for 或 while 语句以及函数或复杂表达式。 功能强大,足以解析几乎任何二...
二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具...
十进制转为二进制函数[十进制转为二进制函数]-精品源代码
离散二进制粒子群算法PSO MATLAB代码