压缩文件由可变长度的块组成。这些块的顺序可以变化,但是第一块必须是一个在压缩文件头后的标记块。
块类型:标记块,压缩文件头块,文件头块,注释头,用户身份信息,子块和恢复记录块等。
每一块均由下列结构开始:
2 字节 所有块或块部分的 CRC
1 字节 块类型
2 字节 块标记
2 字节 块大小
如果块标记的第一位被置1的话,还存在:
4 字节 可选结构 - 增加块大小
所以文件大小的计算分两种情况,当块标记首位未置1,则总块大小就是记录的块大小,当块标记首位置1,可选结构存在,则总块大小为记录的块大小+增加块大小。
标记块:52 61 72 21 1A 07 00
2字节 固定52 61
1字节 头类型0x72
2字节 块标记固定21 1A
2字节 块大小
压缩文件头:
2字节 头类型到RESERVED2的CRC结构
1字节 头类型0x73
2字节 位标记(第九位置1,可以做成伪加密)
2字节 压缩文件头总大小(包括压缩文件注释)
2字节 RESERVED1 保留
4字节 RESERVED2 保留
压缩文件头里的位标记,如果它的第九位被置1,块头被加密,也就是通常所说的加密文件名,打开这样加密的RAR文件时,需要先输入密码才能看到压缩包内的文件列表。
文件头:
2字节 从头类型到文件属性的CRC结构和文件名
1字节 头类型0x74
1字节 位标记
2字节 文件头的全部大小(包含文件名和注释)
4字节 已压缩文件大小
4字节 未压缩文件大小
1字节 保存压缩文件使用的操作系统 0:MS DOS
1:OS/2
2:WIN32
3:UNIX
4:MAC OS
5:BEOS
4字节 文件CRC
4字节 文件创建日期
1字节 解压文件所需最低RAR版本
1字节 压缩方式 30:存储
31:最快压缩
32:快速压缩
33:标准压缩
34:较好压缩
35:最好压缩
2字节 文件名大小
4字节 文件属性(文件夹/文件)
4字节 压缩文件大小64位值的高4字节
4字节 未压缩文件大小64位值的高4字节
在这个块中存在两个CRC值,一个是文件头块中从位标记到文件名这42个字节的校验,后一个则是压缩包中所含文件的CRC校验,解压时,会计算解压后生成文件的CRC值,如果等于这里的CRC则解压完成,如果不同,则报错中断。
结尾块:C4 3D 7B 00 40 07 00
2字节 从头类型到注释头大小的CRC校验值
1字节 头类型0x7B
2字节 位标记
2字节 注释头大小
除以上格式块以外,还存在一些旧风格的块类型,不过在新的版本中已经不存在了。
注释头块:
2字节 从头类型到注释CRC的CRC校验值
1字节 头类型0×75
2字节 位标记
2字节 注释头大小
2字节 未压缩注释大小
1字节 提取注释的RAR最低版本
1字节 压缩方法
2字节 注释CRC
N字节 注释正文
额外信息块:
2字节 块CRC
1字节 头类型0×76
2字节 位标记
2字节 总块大小
N字节 额外信息正文
字块:
2字节 块CRC
1字节 头类型0×77
2字节 位标记
2字节 总块大小
4字节 总数据块大小
2字节 字块类型
1字节 保留字段,必须为0
其余字段 由字块类型决定其余字段类型
在压缩文件中,任意文件头后面都可以附加一个字块。这个字块依赖于它前面的这个主块,当更新时新版本的RAR压缩包可能会删除或者移动这个字块。
以上是对RAR文件介绍,如果需要了解更多数据恢复有关问题联系我哟!!