前置知识

ZIP文件的16进制文件可以分为压缩源文件数据区压缩源文件目录区压缩源文件目录结束标志

每个区都有对应的文件头标记,结合实际16进制文件来解释各区的文件头信息。

压缩源文件数据区

压缩源文件数据区

16进制文件数据 描述
50 4B 03 04 zip类型头文件标识
14 00 解压文件所需要pkware版本
00 00 全局方式位标记(有无加密)
08 00 压缩方式
70 02 最后修改文件时间
01 4B 最后修改文件日期
B7 EF DC 83 CRC-32校验(1480B516)
03 00 00 00 压缩后尺寸(3B)
01 00 00 00 未压缩尺寸(23)
05 00 文件名长度
00 00 扩展记录长度

压缩源文件目录区

压缩源文件目录区

16进制文件数据 描述
50 4B 01 02 目录中文件文件头标记
1F 00 压缩使用的 pkware 版本
14 00 解压文件所需 pkware 版本
00 00 全局方式位标记(有无加密)
08 00 压缩方式
70 02 最后修改文件时间
01 4B 最后修改文件日期
B7 EF DC 83 CRC-32校验(1480B516)

压缩源文件目录结束标志

压缩源文件目录结束标志

16进制文件数据 描述
50 4B 05 06 目录结束标志
00 00 当前磁盘变薄
00 00 目录区开始磁盘编号
01 00 本磁盘上记录总数
01 00 目录区中记录总数
81 00 00 00 目录区尺寸大小
50 00 00 00 目录区对第一张磁盘的偏移量
00 00 ZIP文件注释长度

伪加密原理

zip伪加密是在文件头的加密标志位做修改,进而再打开文件时识被别为加密压缩包。

无加密

压缩源文件数据区的全局加密应当为00 00
且压缩源文件目录区的全局方式位标记应当为00 00

伪加密

压缩源文件数据区的全局加密应当为00 00
且压缩源文件目录区的全局方式位标记应当为09 00

真加密

压缩源文件数据区的全局加密应当为09 00
且压缩源文件目录区的全局方式位标记应当为09 00

示例

新建一个文件,压缩为一个无密码的后缀名为zip的包。

用winhex打开找到压缩源文件目录区,找到全局方式位修改为09 00。尝试解压文件会提示输入秘密。

参考