Misc-zip文件分析
Misc-zip文件分析
案例分析:
如你所见,这,是一张图片,我们想把它发送给某位朋友,但是却不想让其他的人看到。
于是,我们选择将其压缩为加密压缩包:
如此一来,只有你和你的朋友(知道密码的人)可以打开压缩包,而没有密码的,则无法解压,也就看不到图片。
你可能会想,这样就足够保密了,但是,事实真正如此吗???
对此,正在学习misc的黑客小明表示不屑,声称不到30秒就可以破解这个加密的压缩包!
当然,是不知道密码的前提下!
那么,其中究竟蕴含着什么技术原理和知识呢?
这便是CTF-MISC中的常见题目类型——压缩包分析破解
ZIP压缩包是CTF-MISC方向中最常见的题型之一,涉及文件结构分析、密码破解、数据修复等多个技术点。
一、ZIP文件结构
一个zip文件由三部分组成:压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志
压缩源文件数据区
在这个数据区中每一个压缩的源文件/目录都是一条记录,记录的格式如下:
[文件头+ 文件数据 + 数据描述符]
这个数据描述符只在全局方式位标记的第3位设为1时才存在,紧接在压缩数据的最后一个字节后。这个数据描述符只用在不能对输出的 ZIP 文件进行检索时使用。例如:在一个不能检索的驱动器(如:磁带机上)上的 ZIP 文件中。如果是磁盘上的ZIP文件一般没有这个数据描述符。
50 4B 03 04:这是头文件标记(0x04034b50)
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密) 头文件标记后2bytes
08 00:压缩方式
压缩源文件目录区
在这个数据区中每一条纪录对应在压缩源文件数据区中的一条数据。
50 4B 01 02:目录中文件文件头标记(0x02014b50)
3F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密,伪加密的关键) 目录文件标记后4bytes
08 00:压缩方式
压缩源文件目录结束标志
50 4B 05 06:目录结束标记
00 00:当前磁盘编号
00 00:目录区开始磁盘编号
二、常见题型
伪加密
原理:通过修改加密标志位误导解压软件
- 检测方法:
- 放入随波逐流进行检测
- 查看
hex
编辑器中General Purpose Bit Flag
字段- 伪加密:第0位为1(0x0001)
- 真加密:第6位为1(0x0041)
密码爆破
- 适用场景:弱密码或已知字符集
- 工具推荐:
ARCHPR
(图形化界面)
明文攻击
- 前提条件:
- 已知压缩包内至少一个文件的完整内容
- 使用相同加密算法和相同密码
- 操作步骤:
- 用已知文件生成无加密的参考ZIP
- 使用
ARCHPR
进行爆破
CRC32碰撞
- 适用场景:小文件(<6KB)无加密
- 实现原理:通过CRC校验值逆向文件内容
- 工具推荐:
python
的zlib
库crc32killer
(自动化脚本)
示例代码:
import zlib target_crc = 0x12345678 # 替换为实际CRC值 for i in range(0xFFFFFFFF): if zlib.crc32(bytes([i])) == target_crc: print(bytes([i])) break
三、进阶技巧与特殊题型
嵌套压缩包
- 常见形式:
- ZIP套娃(多层嵌套)
- 混合文件类型(ZIP内嵌RAR/7z)
- 解决方法:
- 编写脚本自动化提取
- 使用
binwalk
检测隐藏文件
文件修复
- 常见问题:
- 文件头损坏(修复签名
50 4B 03 04
)
- 文件头损坏(修复签名