ZIP详细文件结构

创建一个flag.txt,内容为blog.yakumoran.top,并用7z压缩为zip,密码为123546,以下学习内容均以该zip为对象,以下学习内容适用于单个原文件大小不超过4g

zip实体文件头(Local File Header)

以下为实体文件头内容

偏移偏移(hex)字节数字段名称
004签名
40x42版本
60x62通用位标志
80x82压缩方法
100xA2文件最后修改时间
120xC2文件最后修改日期
140xE4CRC32校验
180x124压缩后大小
220x164压缩前大小
260x1A2文件名称长度(n)
280x1C2扩展字段长度(m)
300x1En文件名称
30+n0x1E+nm扩展字段

以flag.zip为例

0~3字节固定为50 4B 03 04

4~5字节为14 00,为最低解压所需zip版本,这里为1.4

6~7字节为01 00通用位标识符,按小段存储转为二进制为 0000 0000 0000 0001,其中每一位二进制都代表一种信息,详细可以参考下表。示例zip只有bit0有内容为1意思就是压缩包加密

位编号(bit)含义说明
0加密标志1为加密,0为未加密
1–2压缩选项对应压缩算法的附加选项
3数据描述符标志1 = CRC32、大小字段在数据后(Data Descriptor)而不是头部
4增强压缩标志仅用于 Deflate,指示采用更高的压缩算法
5压缩方式由特定算法定义
6压缩方式由特定算法定义
7保留未使用
8文件名编码标志(UTF-8)1 = 文件名与注释字段使用 UTF-8 编码
9强加密标志1 = 使用 PKWare Strong Encryption
10–11压缩选项扩展与压缩方式相关(如 AES)
12压缩补充标志与 bzip2 等算法相关
13加密头数据存在一般在 AES 加密时设置
14–15保留通常为 0

8~9字节为00 00表示压缩算法,0为不压缩,常见的压缩算法包括:8 (Deflate)最常用的 ZIP 压缩方式,9 (Deflate64)改进版 Deflate,12 (BZIP2)压缩率较高,速度较慢,14 (LZMA)高压缩率,7-Zip 使用的核心算法,20 (Zstandard)现代高性能算法,ZIP 6.3+ 引入

A~B字节为3A 83表示文件最后修改时间,使用DOS 时间格式,这里为16时25分52秒

C~D字节为59 5B表示文件最后修改日期,使用DOS 时间格式,这里为2025.10.25

E~11字节为F4 25 20 07为压缩前源文件的crc32校验

12~15字节为26 00 00 00为压缩后大小0x26字节

16~19字节为1A 00 00 00为压缩前大小0x1A字节

1A~1B字节为08 00 为文件名称长度

1C~1D字节为00 00 为拓展字段长度

1E~25字节为66 6C 61 67 2E 74 78 74,共8字节,即为1A~1B所表示的长度,内容按ASCII进行转义极为flag.txt

之后的内容就是文件压缩后的内容

中心目录区(Central Directory)

以下为中心目录区的内容

目录结束标识

点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注