7.4 LZO编码的识别
近年来很多游戏开始使用LZO压缩资源文件。LZO是一种高压缩比和解压速度极快的编码。LZO有多个版本,从总体上可以分为免费版和专业版。专业版除了包含免费版所有功能外,还包含了官方最新的压缩技术,一般目前所见的游戏中大多使用LZO免费版,少数游戏使用专业版的LZO,毕竟专业版的LZO要收取一定的使用费。
7.4.1 LZO和MiniLZO编码介绍
LZO是使用ANSI C编写的一套压缩/解压缩库,对于游戏开发人员来说LZO有以下优点。
(1)解压缩速度非常快。
(2)不需要额外的内存解压缩。
(3)能设置不同的压缩参数改变压缩率,但设置这些压缩参数不会降低解压速度。
(4)LZO是无损压缩,压缩后的数据能准确还原。
(5)LZO的发布是遵从GNU General Public License(GPL)的。
游戏资源的压缩率和解压速度往往是游戏编程人员所关注的,一般对资源文件压缩率越高,解压速度就越慢,而LZO很好地解决了压缩率和解压速度之间的矛盾问题,所以LZO非常适合压缩游戏的资源文件。
LZO有以下不同的版本,这些不同LZO版本的压缩率和压缩/解压缩速度也不尽相同:
LZO1;
LZO1A;
LZO1B;
LZO1C;
LZO1F;
LZO1X;
LZO1Y;
LZO1Z;
LZO2A。
LZO有多个版本,每个版本的LZO支持1~999的压缩等级,通常1~9通常是标准快速压缩,压缩时只需使用64KB内存。10~99通常是更高压缩率的压缩等级,压缩时只需使用256KB内存,这个等级的压缩速度还算比较快。100~999通常是接近最优压缩率的压缩等级,但此时压缩速度很慢,而且需要很多内存。
由于LZO有多个版本,而且支持1~999级压缩,每一级别的压缩率生成的压缩文件数据都不同。如果一些游戏使用了LZO压缩资源文件,那么即使破解者能通过LZO解压程序解压游戏资源,但要想将游戏资源重新压缩回游戏主程序并能正确读取是非常困难的,因为破解者不知道游戏开发人员使用了哪个版本的LZO,即使知道使用了哪个版本的LZO也不知道使用了哪种级别的压缩等级。
目前只能使用穷举法尝试将从游戏中解压出来的资源文件使用不同版本的LZO设置不同的压缩等级压缩,然后重新进入游戏看是否能正确读取资源文件来判断游戏开发人员使用了哪个版本和使用了哪种压缩级别的LZO压缩资源文件。
最后要提一下的是MiniLZO编码,不少游戏除了使用上面介绍的LZO压缩资源文件外还使用MiniLZO。
MiniLZO是一个轻量级的压缩/解压缩库,设计MiniLZO的目的是为了某些只需包含一个小型的压缩/解压缩功能,而不想包含LZO全部代码的程序而设计的。编译后的MiniLZO库少于5KB,非常适合内嵌在主程序中。
MiniLZO使用LZO1X-1的压缩和解压缩,也就是说使用LZO1X-1的代码同样可以解压缩使用MiniLZO压缩的资源文件。
7.4.2 如何识别LZO编码
从数据和程序上都有识别LZO的方法,但由于LZO有多个版本,不同的版本压缩后的数据特征不尽相同,在某些极端的情况下没有可识别的数据特征。
下面给出3组使用LZO压缩的数据,观察这3组数据之间有什么规律:
第一组LZO压缩的数据
第二组LZO压缩的数据
第三组LZO压缩的数据
上面已经将可识别的数据和3组LZO压缩文件数据之间相同的部分用不同的背景颜色和其他杂乱的不可识别的数据区别开来。
经过分析可以从上面的3组数据中归纳出如下3点特征。
(1)开头部分的数据好像都是文明数据。
(2)越往后的数据看上去越凌乱甚至不可识别。
(3)每组数据的结尾都是0x11、0x00和0x00。
识别数据是否使用了LZO可以对照上面3点特征来分析。接下来讲解如何从程序中识别LZO。
从程序上识别LZO的方法是搜索主程序包含的字符串信息,下面列出了LZO在程序中保留的版权和出错信息:
"LZO real-time data compression library.","Copyright
(C) 1996, 1997, 1998 Markus Franz Xaver
Johannes Oberhumer",LF,"<markus.oberhumer@jk.uni-linz.ac.at>",
"http://wildsau.idv.uni-linz.ac.at/mfx/lzo.html","LZO version:"
"LZO data compression library.$Copyright: LZO (C) 1996, 1997, 1998, 1999, 2000, 2001,2002,2003,2004,2005 Markus Franz Xaver JohannesOberhumermarkus@oberhumer.com http://www.oberhumer.com$"
"lzo error" "MiniLzo compression failed: %d" "MiniLzo decompression failed: %d"
|
分享到:
相关推荐
离线安装包,亲测可用
minilzo utils - allowing compression & decompression
迷你lzo算法库,用于实现内存、图像、磁盘文件等数据的压缩,是一种非常快的压缩算法。
离线安装包,亲测可用
离线安装包,亲测可用
官方离线安装包,测试可用。请使用rpm -ivh [rpm完整包名] 进行安装
离线安装包,亲测可用
离线安装包,亲测可用
配置hadoop支持LZO和snappy压缩
STM32移植 MINI LZO2.09压缩算法 编译通过 可以直接烧录运行 使用STM32F103VET6
hadoop2 lzo 文件 ,编译好的64位 hadoop-lzo-0.4.20.jar 文件 ,在mac 系统下编译的,用法:解压后把hadoop-lzo-0.4.20.jar 放到你的hadoop 安装路径下的lib 下,把里面lib/Mac_OS_X-x86_64-64 下的所有文件 拷到 ...
本文介绍写文件时使用的压缩算法,包括:Gzip压缩、Snappy压缩和Lzo压缩。 本文分为3部分,即Gzip压缩文件的写与读、Snappy压缩文件的写与读和Lzo压缩文件的写与读。 ———————————————— 版权声明:...
Lzo 压缩算法 Lzo压缩 vs2005 例子Lzo 压缩算法 Lzo压缩 vs2005 例子Lzo 压缩算法 Lzo压缩 vs2005 例子Lzo 压缩算法 Lzo压缩 vs2005 例子
hadoop 的lzo压缩源码包tar.gz,其中包括lzo-2.06.tar.gz和lzo-2.10.tar.gz两个版本,可供选择
LZO数据流压缩的算法,个人证明确实可用
minilzo-decompress.js LZO decompress()函数的纯JavaScript实现,使用ArrayBuffer作为输入/输出。 从java-compress( )移植。 的LZO的纯Java实现重要的Alistair Braidwood在上为Javascript提供了更好的LZO支持,...
在64位ubuntu上装的lzo2和uuid编译32的android系统时需要这2个32位库
hadoop用于解析lzo的包,这个问题在使用presto的时候需要将此包添加到presto的工具包中,以支持lzo格式文件的查询。
LZO(LZO是Lempel-Ziv-Oberhumer的缩写)是一种高压缩比和解压速度极快的编码,它的特点是解压缩速度非常快,无损压缩,压缩后的数据能准确还原,lzo是基于block分块的,允许数据被分解成chunk,能够被并行的解压。...