TGCTF ez_zip

TGCTF ez_zip

前面就是正常爆破,已知明文攻击

结束后发现文件打不开 显示文件已损坏

PixPin_2025-04-22_21-25-37

修复压缩包得到flag

方法一:

题目是修改了文件名长度和压缩方式

PixPin_2025-04-22_21-51-07

flag.txt长度应为8,改回08 00

压缩方式从COMP_DEFLATE改成了COMP_STORED,但很明显文件是压缩过的,把这
两个地方修改

各种压缩方式

PixPin_2025-04-23_17-18-03

PixPin_2025-04-23_17-18-25

第二种方法

压缩源文件数据区压缩源文件目录区文件头标记后,除了压缩源文件目录区
多出一条压缩使用的版本 (2 bytes) ,即本题中重复出现的两次14 00,一直到文件名长度
**08 00,都是保持一致的,**所以可以直接将压缩源文件数据区的十六进制数据复制填入压缩源
文件目录区表示文件名长度的08 00前即可

PixPin_2025-04-23_17-50-21

PixPin_2025-04-23_17-52-29

第三种方法

因为没有加密压缩包,所以frData字段就是zlib压缩的内容,直接将这部分拿出来,加上zlib头 (789C),zlib解压也可以得到flag

为什么是这样?

📦 ZIP 中使用的压缩算法

ZIP 文件最常用的压缩方法编号为:

  • 0 → Store(无压缩)
  • 8 → Deflate(zlib 同款压缩方式)

当使用 Deflate 压缩时,ZIP 文件中的压缩数据其实就是 raw deflate 流没有 zlib 头,因为 ZIP 协议自己管理了头部和校验信息。

那 zlib 是什么?

zlib 是 Deflate 算法的封装。

  • zlib 格式中,前两字节(通常是 0x78 9C)是头信息,说明压缩方式、窗口大小、校验方法等。
  • 但是 ZIP 格式的文件数据不包含这个头,它只保存 纯 deflate 数据

🔧 所以要自己加上 zlib 头!

是的,如果你把 ZIP 文件里 Local File Header 后面的数据单独拿出来(压缩数据部分),它就是裸 deflate。

你只要:

  1. 加上 zlib header(比如 0x78 9C
  2. 然后用 zlib.decompress() 来解压

PixPin_2025-04-23_18-08-42

PixPin_2025-04-23_18-09-05

1
2
3
4
78 9C 0B 71 77 0E 71 AB 0E 4F 2C 2A CA CC 2F 8A
8F CC 2F 8D CF 48 2C 4B 8D 4F 49 4D 4B 4D 2C 49
4D 89 2F C9 48 8D 4F CF 4C CC 2B 89 4F 29 4A 4C
CF CF 53 AC 05 00

TGCTF ez_zip
http://example.com/2025/04/24/TGCTF-ez-zip/
作者
everythingis-ok
发布于
2025年4月24日
许可协议