压缩包信息
zip
组成
ZIP文件由压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志三部分组成
压缩源文件数据区#
该数据区中每一个压缩的源文件/目录都是一条记录
包含:本地文件头、文件数据、数据描述符
Offset | Bytes | Description | 翻译 |
---|---|---|---|
0 | 4 | local file header signature | 文件头标识,值固定(0x04034b50) |
4 | 2 | version needed to extract | 解压文件所需pkware最低版本 |
6 | 2 | general purpose bit flag | 通用比特标志位(置比特0位=加密) |
8 | 2 | compression method | 压缩方式 |
10 | 2 | last mod file time | 文件最后修改时间 |
12 | 2 | last mod file date | 文件最后修改日期 |
14 | 4 | crc-32 | CRC-32校验码 |
18 | 4 | compressed size | 压缩后的大小 |
22 | 4 | uncompressed size | 未压缩的大小 |
26 | 2 | file name length | 文件名长度 |
28 | 2 | extra field length | 扩展区长度 |
30 | n | file name | 文件名 |
30+n | m | extra field | 扩展区 |
本地文件头#
表示文件的开始,记录压缩文件的信息
文件数据#
记录了相应压缩文件的数据,紧跟在本地文件头之后
数据描述符#
用于在不能对输出的 ZIP 文件进行检索(如磁带机)时使用。只有在相应的local file header中通用标记字段的第3bit设为1时才会出现,跟在每一个文件头模块的后面。【crc-32、压缩、未压缩】
压缩源文件目录区#
记录了压缩文件的目录信息,在这个数据区中每一条纪录对应在压缩源文件数据区中的一条数据。
Offset | Bytes | Description | 翻译 |
---|---|---|---|
0 | 4 | Central directory file header signature | 核心目录文件header标识=(0x02014b50) |
4 | 2 | Version made by | 压缩所用的pkware版本 |
6 | 2 | Version needed to extract (minimum) | 解压所需pkware的最低版本 |
8 | 2 | General purpose bit flag | 通用位标记 |
10 | 2 | Compression method | 压缩方法 |
12 | 2 | File last modification time | 文件最后修改时间 |
14 | 2 | File last modification date | 文件最后修改日期 |
16 | 4 | CRC-32 | CRC-32校验码 |
20 | 4 | Compressed size | 压缩后的大小 |
24 | 4 | Uncompressed size | 未压缩的大小 |
28 | 2 | File name length (n) | 文件名长度 |
30 | 2 | Extra field length (m) | 扩展域长度 |
32 | 2 | File comment length (k) | 文件注释长度 |
34 | 2 | Disk number where file starts | 文件开始位置的磁盘编号 |
36 | 4 | Internal file attributes | 内部文件属性 |
38 | 4 | External file attributes | 外部文件属性 |
42 | 4 | relative offset of local header | 本地文件头的相对位移 |
46 | n | File name | 目录文件名 |
46+n | m | Extra field | 扩展域 |
46+n+m | k | File comment | 文件注释内容 |
压缩源文件目录结束标志#
Offset | Bytes | Description | 翻译 |
---|---|---|---|
0 | 4 | End of central directory signature = 0x06054b50 | 核心目录结束标记(0x06054b50) |
4 | 2 | Number of this disk | 当前磁盘编号 |
6 | 2 | number of the disk with the start of the central directory | 核心目录开始位置的磁盘编号 |
8 | 2 | total number of entries in the central directory on this disk | 该磁盘上所记录的核心目录数量 |
10 | 2 | total number of entries in the central directory | 核心目录结构总数 |
12 | 2 | Size of central directory (bytes) | 核心目录的大小 |
16 | 4 | offset of start of central directory with respect to the starting disk number | 核心目录开始位置相对于archive开始的位移 |
20 | 2 | .ZIP file comment length(n) | 注释长度 |
22 | n | .ZIP Comment | 注释内容 |
例子:(010editor)#
压缩源文件数据区:
压缩源文件目录区:
压缩源文件目录结束标志:
ZIP加密的特征#
无加密的ZIP#
压缩源文件数据区的通用比特标志位应当为00 00
压缩源文件目录区的通用比特标志位应当为00 00
真加密的ZIP#
压缩源文件数据区的通用比特标志位应当为09 00
压缩源文件目录区的通用比特标志位应当为09 00
伪加密的ZIP#
压缩源文件数据区的通用比特标志位应当为00 00
压缩文件目录区的通用比特标志位应当为09 00
破解ZIP的伪加密#
直接修改压缩源文件目录区的通用比特标志位为偶数,即可解压
RAR
RAR的伪加密与ZIP的伪加密原理接近,造成伪加密的关键都是在一个指定的标志位上。
在010editor中修改ubyte PASSWORD_ENCRYPTED字段为1即可实现RAR伪加密(第24字节)
修改ubyte BLOCK_HEADERS_ENCRYPTED字段为1也可以实现(第10字节)
后续遇到其他的再进行更新
作者:NTrack
出处:https://www.cnblogs.com/ntrack/p/17712997.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架