Misc-zip文件分析

参考文档:https://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458483850&idx=1&sn=b2a624f6753f81072ce9b78419dbc865&chksm=b18e4c0086f9c516e126950fb9fb5d2bcdbd31b147374c693b37dcbb1fff6e5dfaaca4396605&scene=27

案例分析:

如你所见,这,是一张图片,我们想把它发送给某位朋友,但是却不想让其他的人看到。

于是,我们选择将其压缩为加密压缩包:

如此一来,只有你和你的朋友(知道密码的人)可以打开压缩包,而没有密码的,则无法解压,也就看不到图片。

你可能会想,这样就足够保密了,但是,事实真正如此吗???

对此,正在学习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(图形化界面)

明文攻击

  • 前提条件
    • 已知压缩包内至少一个文件的完整内容
    • 使用相同加密算法和相同密码
  • 操作步骤
    1. 用已知文件生成无加密的参考ZIP
    2. 使用ARCHPR进行爆破

CRC32碰撞

  • 适用场景:小文件(<6KB)无加密
  • 实现原理:通过CRC校验值逆向文件内容
  • 工具推荐
    • pythonzlib
    • 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