telegram ruansky 极客 逆向工程 科普 Github

逆向科普:42KB 膨胀至 5.5GB?非递归压缩包炸弹 (Zip Bomb) 底层原理详解

calendar_month 2021年08月17日 person ZGQ Inc. schedule 约 1 分钟阅读

你是否见过这样一个极其诡异的文件:它明明只有 42KB,但当你试图解压它时,它却能瞬间暴涨到 5.5GB,甚至直接让你的内存溢出、系统卡死崩溃?

这就是在极客圈和安全界极其臭名昭著的 压缩包炸弹 (Zip Bomb)。今天,我们就来扒开它的底层外衣,深入探讨其压缩比达到物理极限的逆向工程原理。


💣 核心概念:非递归 Zip 炸弹 (Non-Recursive Zip Bomb)

2010年左右进入大众视野,而在 2019 年,极客兼安全研究员 David Fifield 提出了一套极其震撼的 Zip 炸弹 重构理论,并发布了相关研究与源码。

1. 传统的“套娃”递归炸弹(已过时)

以前的 zip 炸弹(比如最著名的 42.zip)大多使用的是递归式套娃压缩:一层 zip 里面包裹着另外 16 个 zip,然后继续往下无尽套娃。这种方案虽然能达到极其恐怖的压缩比,但绝大多数现代杀毒软件和解压引擎只要检测到递归嵌套,就会在底层立刻强行阻断并报警。

2. 现代的“非递归”重叠炸弹(降维打击)

David Fifield 的新一代方案极其天才:它根本不依赖解压缩器的嵌套递归机制!

  • 底层原理: 它通过在 Zip 容器内部,极其精妙地重叠 (Overlapping) 文件的引用路径。只需单轮的线性解压,它就能完全展开,直接绕过了所有杀软的嵌套防御机制。
  • 平方级膨胀: 这种底层构造让输出文件的物理大小随着输入大小呈平方级暴增!在传统 Zip 格式的极限下,它可以达到惊人的 2800万倍 的压缩比(例如将仅仅 10 MB 的文件,瞬间膨胀至 281 TB)。如果是利用 zip64 扩展协议,它的破坏力甚至没有物理上限。
  • 高维兼容性: 该构造极其克制地仅仅使用了最常见的 DEFLATE 解算算法,这意味着它与市面上几乎所有的标准 Zip 解析器完美兼容,真正做到了防不胜防。

🧠 给普通人的精简压缩原理解读

如果你不懂复杂的 DEFLATE 算法底层,可以这么直观地理解: 常规压缩算法的底层特性,就是把无数重复的冗余字符,映射成一个“数量+占位符”的高效指针。 比如:ZGQZGQZGQZGQZGQZGQ → 底层压缩打包 → 6ZGQ。 存储空间瞬间缩小了六分之一左右。而压缩包炸弹内部塞满了这种极其规律的无尽重复字符矩阵。当解压引擎试图把这些高维指针还原回实际的内存占用时,巨大的算力开销和物理体积瞬间就会把机器彻底撑爆。


🗄️ 极客项目源码与实体弹药库资源

(极度高危警告:以下资源具有系统级破坏性,请绝对不要在生产环境的主力机上双击解压,否则极易导致系统级底层死锁与磁盘 IO 瘫痪!)

1. 频道整理的历史存档 (包含著名的 42.zip)

2. David Fifield 官方极客开源实验室

3. 核心逆向源码 (Git 强行拉取)

如果你想深入研究其底层重叠算法的构造器,可以直接拉取编译源码:

1
2
3
4
5
# 炸弹构造器核心底层源码
git clone https://www.bamsoftware.com/git/zipbomb.git

# 论文数据与图表生成源码
git clone https://www.bamsoftware.com/git/zipbomb-paper.git

☢️ 频道主自制:YB 级别超级核弹

我亲自制作了一个 YB 级别的递归压缩包炸弹(套娃式压缩),感兴趣的朋友可以在虚拟机里体验一下:

底层数据膨胀计算表:

  • 压缩包下载大小:5.14 MB
  • 原始文本 (txt) 大小:4.69 MB
  • 经过数轮疯狂复制粘贴与套娃压缩,最终展开可得到 3.53377706E+17 个子文件。
  • 完全无损展开的总数据量高达:1.65734144E+18 MB
  • 换算进位 = 1,580,563,964,843.8 TB
  • 最终换算 = 1.4375145518 YB

(也就是说,这个仅有 5.14MB 的文件,如果被彻底释放,将喷涌出高达 1.4 YB 的天文数字级数据。)

info Note

深层存储单位进位表参考:

  • 1 YB = 1024 ZB
  • 1 ZB = 1024 EB
  • 1 EB = 1024 PB
  • 1 PB = 1024 TB
share 分享到 Telegram
软件资源:卡西欧 (CASIO) 科学计算器官方 PC 版模拟器 (V20.8.11) arrow_forward