你是否见过这样一个极其诡异的文件:它明明只有 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 官方极客开源实验室
- 🌐 项目详解硬核论文 (机翻核心出处): bamsoftware.com/hacks/zipbomb/
- 💣 非递归炸弹实体演示文件 (zipbomb-20190822): 👉 点击物理下载
- 👨💻 这位极客大佬的其他骇客项目: bamsoftware.com/hacks/
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 的天文数字级数据。)
深层存储单位进位表参考:
- 1 YB = 1024 ZB
- 1 ZB = 1024 EB
- 1 EB = 1024 PB
- 1 PB = 1024 TB