CTF中ZIP伪加密压缩文件分析
ZIP压缩包组成结构
概述
ZIP文件格式是一种数据压缩和文档储存的文件格式,原名Deflate,发明者为菲尔·卡茨(Phil Katz),他于1989年1月公布了该格式的资料。ZIP通常使用后缀名“.zip”,它的MIME格式为application/zip
。
文件结构
简要来说,一个ZIP压缩包由3个部分组成,分别是:压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志
创建无密码压缩包example_no_passwords.zip
,内含文件flag.txt
,其内容为flag{abcdef}
,以此为例:
绿色部分—压缩源文件数据区:
数据存储区包含一个或多个文件实体,每个文件实体通常以
50 4B 03 04
开头,这也是压缩文件头,用于判断文件是否为压缩包的一个参考。文件实体记录着文件被压缩后的各种信息,压缩包内的每一个被压缩的文件都会对应一个文件实体。偏移 字节数 描述 0 4 固定值0x04034b50 4 2 解压缩的版本 6 2 标志位 8 2 压缩方式 10 2 文件最后 12 2 文件最后修改日期 14 4 CRC-32校验 18 4 压缩后大小 22 4 压缩前大小 26 2 文件名称长度 28 2 扩展字段长度 30 n 文件名称 32+n m 扩展字段 50 4B 03 04
:这是文件头标记14 00
:解压文件所需要的pkware
版本00 00
:全局方式标记位(有无加密)紫色—压缩源文件目录区:
主要记录文件目录的相关信息,如注释、大小、文件名等等。同样包含所有被压缩文件的文件头(File Head),通常是以
50 4B 01 02
标识开头。中心目录区可能包含多个文件头。50 4B 01 02
:目录中文件头标记(4 字节)14 00
:压缩使用的paware版本(2字节)14 00
:解压缩使用的paware版本(2字节)00 00
:全局方式标记位(有无加密,有无伪加密的关键)(2字节)黄色—目录结束标识
主要记录压缩包开始分卷号开始的偏移量,主要决定文件的目录结构,以及压缩包的相关信息,以
50 4B 05 06
开头(只有一个)。
全局方式标记位
在上述两个全局方式标记位中,各自都用了4个数字来标识,其中只有第2个数字对加密有影响
[!IMPORTANT]
第2个数字为奇数时—>加密
第2个数字为偶数时—>未加密
辨别加密方式
无加密:
压缩源文件数据区全局方式标记位为
00 00
压缩源文件目录区全局方式标记位为
00 00
如下图所示:
真加密:
压缩源文件数据区全局方式标记位为
09 00
压缩源文件目录区全局方式标记位为
09 00
伪加密:
压缩源文件数据区全局方式标记位为
00 00
压缩源文件目录区全局方式标记位为
09 00
修复方式和思路
无加密:不需要修复,直接查看内部文件或者解压即可
真加密:可以在Linux中使用
fcrackzip
进行密码爆破伪加密:
一种方式是根据上述ZIP文件的结构,对被修改的伪加密全局方式标记位进行修改,使用010editor查看并修改
另外一种方式是,可以使用诸多压缩解压工具提供的修复压缩包工具,有一定概率可以自动修复成功,去除伪加密
此外,上述只是针对ZIP文件的伪加密修复方式,如果文件为RAR压缩,则使用十六进制编译器打开RAR文件,找到第24个字节,该字节位数为4表示加密,0表示无加密,将尾数改为0即可破解伪加密。
- 标题: CTF中ZIP伪加密压缩文件分析
- 作者: 耀鳞光翼
- 创建于 : 2025-01-12 12:09:00
- 更新于 : 2025-01-12 12:24:04
- 链接: https://blog.lightwing.top/2025/01/12/fake_compression/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。