RAR文件格式的研究
[摘要] 随着科技的发展,RAR文件的使用已经渗透到人们生活,越来越多的工具被开发出来处理压缩文件,例如Winrar,zip,gzip等等,这些工具都为用户提供了良好的管理界面环境。RAR文件中蕴藏着丰富的个人信息,发掘分析其中的有用线索是调查取证的重要手段,而其首要条件就是需要对RAR文件进行格式解析。本文利用RAR实验室提供的Unrar程序对rar数据文件进行格式解析,从而为证据信息获取提供重要手段。
[关键词] Winrar文件 压缩文件 格式分析 加密解密 Unrar
The Research of Rar Files’ Format
Abstract With the rapid development and application of computer and network,the usage of RAR files using computer more and more furious, more and more tools which come out for dealing with compressed files, such as winrar, zip, pzip etc. These tools all provide a friendly user-interface. There are rich personal information containing in RAR files. Analyzing and extracting the useable clues is very significant for case-investigation and evidence-gaining. But chiefly you have to parse the file format of RAR files. RAR lab privides the unrar functions which can be used to do the parsing work. These functions will be an important information-gaining tools.
Key Words Winrar Files Compressed-File Formats analysis Encryption-and-decryption Unrar function
目录
引言 1
第一章 RAR简介 2
第二章 RAR
2.1 实例 3
2.2 文件块结构 3
2.2.1 标记块 4
2.2.2 压缩文件头 4
2.2.3 文件头 5
2.2.4 结尾块 8
2.2.5 旧风格的块类型 8
第三章 RAR文件解压
11
3.1 压缩文件处理步骤 11
3.2 压缩文件处理流程图 13
第四章 加密RAR文件数据的处理 14
4.1 密钥的生成 14
4.2 源数据的恢复 14
第五章 Unrar源程序分析 15
5.1 典型函数分析 15
5.1.1 RAR外围处理函数 15
5.1.2 文件头处理函数 18
5.1.3 RAR文件数据处理函数 20
5.1.4 其余处理函数 22
5.2 RAR解压缩的代码 24
第六章
与展望 26
致谢语 27
参考文献 28
引言
随着科学技术水平的快速发展,越来越多的科研和
应用部门对数据压缩和解压缩技术提出了更高的要求。RAR作为现在最流行的数据压缩软件而备受关注,RAR的压缩技术,密钥生成技术,加解密技术成为大家热衷研究的课
。
很多人都有过这样的经历:用RAR对自己的文件或文档进行有效地管理,对一些较重要的进行加密处理,可是一段时间之后需要使用时,却忘记了密码,用过各种手段之后不得不以失败告终。同样针对网络犯罪,传输经过加密后的RAR压缩文件,这时对RAR信息的取证极为重要,从中挖掘、捕获直接的犯罪信息成为调查取证的重要手段。
利用RAR文件进行取证,首要的任务就是要解析RAR文件的数据格式以及解压的方法,将经过加密的二进制文件数据还原成为
的文本文档格式。
本文分为六个部分:
第一章 RAR简介
第二章 RAR压缩文件格式分析
第三章 RAR文件解压流程
第四章 加密RAR文件中数据的处理
第五章 Unrar源程序分析
第六章 总结与展望
第一章 RAR简介
RAR是一种专利文件格式,用于数据压缩与归档打包,开发者尤金·罗谢尔(Eugene Roshal),所以RAR的全名是:Roshal ARchive。首个公开版本RAR 1.3发布于1993年[1]。
Roshal最初编写了Dos版本的编码和解码程序,后来被移植到很多平台,例如比较著名的Windows平台上的WinRAR。Eugene Roshal公开了解码程序的源代码,但是编码程序仍然是私有的[2]。
RAR因为其独特的压缩算法,能够在无损数据压缩的基础上,达到很高的压缩比,同时压缩速度也不会很低[3]。因为RAR文件头需要占据一定空间,在数据压缩余地不大时,压缩过的文件可能比源文件要大,除此之外RAR文件中可能会加入冗余数据用户恢复记录,在压缩包本身受损但恢复记录够多是可以对受损压缩包进行恢复。但是RAR最主要的一个优点是分卷压缩,可以把文件压缩目标分割到多个文件,并且很容易从这样的分割的压缩文件中解压出源文件[4]。另外,RAR也可以把所有文件压缩到同一个数据区以加大压缩比,代价就是解压一个单独的文件是必须解压其前面所有文件[5]。
RAR同时也拥有成熟的加密算法,2.0版本前加密算法未公开,2.0后使用AES算法加密,在没有密码情况下目前只有暴力破解。
第二章 RAR压缩文件格式分析
前面一章简要介绍了RAR的历史,本章将会从RAR文件的格式入手,对一个标准的RAR文件进行分析,深入了解RAR文件中的每一个块,甚至每一个字节的含义。
2.1 实例
创建Helloworld.rar文件,添加进文件名为test.txt的文本文件,该文本文件中包含以下字符串:Hello world!
在Ultra中加载rar文件:
图2-1 Helloworld.rar文件的二进制编码
2.2 文件块结构
压缩文件由可变长度的块组成。这些块的顺序可以变化,但是第一块必须是一个在压缩文件头后的标记块[6]。
现在公开的块类型有[7]:标记块,压缩文件头块,文件头块,注释头,用户身份信息,子块和恢复记录块等。
每一块均由下列结构开始:
HEAD_crc 2 字节 所有块或块部分的 CRC
HEAD_TYPE 1 字节 块类型
HEAD_FLAGS 2 字节 块标记
HEAD_SIZE 2 字节 块大小
如果块标记的第一位被置1的话,还存在:
ADD_SIZE 4 字节 可选结构 - 增加块大小
所以文件大小的计算分两种情况,当块标记HEAD_FLAGS首位未置1,则总块大小就是HEAD_SIZE,当块标记HEAD_FLAGS首位置1,可选结构存在,则总块大小为HEAD_SIZE+ ADD_SIZE[8]。
2.2.1 标记块 ( MARK_HEAD )
HEAD_crc 2字节 总是 0x6152
HEAD_TYPE 1字节 头类型 0x72
HEAD_FLAGS 2字节 总是 0x1a21
HEAD_SIZE 2字节 块大小 = 0x0007,即7个字节
Test文件:HEAD_CRC:
HEAD_TYPE:
HEAD_FLAGS:
HEAD_SIZE:
所以这里标记块的大小固定是7个字节,且是一个固定的字节序列。
2.2.2 压缩文件头 ( MAIN_HEAD )
HEAD_CRC 2字节 HEAD_TYPE 到 RESERVED2 的 CRC 结构
HEAD_TYPE 1字节 头类型:0x73
HEAD_FLAGS 2字节 位标记:
0x0001 - 卷属性(压缩文件卷)
0x0002 - 压缩文件注释存在
RAR 3.x 使用分开的注释块,不设置这个标记。
0x0004 - 压缩文件锁定属性
0x0008 - 固实属性 (固实压缩文件)
0x0010 - 新的卷命名法则 ('volname.partN.rar')
0x0020 - 用户信息存在
RAR 3.x 不设置这个标记。
0x0040 - 恢复记录存在
0x0080 - 块头被加密
0x0100 - 第一卷(只有 RAR 3.0 及以后版本设置)
其中的其它位为内部使用保留
HEAD_SIZE 2字节 压缩文件头总大小(包括压缩文件注释)
RESERVED1 2字节 保留
RESERVED2 4字节 保留
继续阅读