algorithm - 如何制作 Zip 炸弹?

标签 algorithm compression

This question关于 zip 炸弹自然而然地把我带到了 Wikipedia page关于这个话题。文章提到了一个 45.1 kb 的 zip 文件解压缩到 1.3 艾字节的示例。

首先用于创建此类文件的原则/技术是什么?我不想真正这样做,更感兴趣的是对所涉及概念的简化“工作原理”解释。

文章提到了9层zip文件,所以这不是简单的压缩一堆零的情况。为什么是 9 个,为什么每个 10 个文件?

最佳答案

引用自维基百科页面:

One example of a Zip bomb is the file 45.1.zip which was 45.1 kilobytes of compressed data, containing nine layers of nested zip files in sets of 10, each bottom layer archive containing a 1.30 gigabyte file for a total of 1.30 exabytes of uncompressed data.

因此,您只需要一个 1.3GB 的全零文件,将其压缩成一个 ZIP 文件,制作 10 个副本,将它们打包成一个 ZIP 文件,然后重复此过程 9 次。

通过这种方式,您将获得一个文件,当完全解压缩时,该文件会产生大量数据,而无需您从该数量开始。

此外,嵌套的文件使病毒扫描程序(这些“炸弹”的主要目标)等程序更难变得聪明并拒绝解压“太大”的文件,因为直到最后一层数据不是那么多,在达到最低级别之前,您不会“看到”最低级别的文件有多大,并且每个单独的文件都不是“太大” - 只有数量庞大才有问题。

关于algorithm - 如何制作 Zip 炸弹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1459673/

相关文章:

c++ - 检查数组中的总和是否可能

algorithm - 数组中的最大绝对差

ruby - 为什么我的 Atkin 筛法实现比 Eratosthenes 慢?

java - 解压缩 tar.gz 文件时出现问题

c++ - 使用尾递归查找数组的最小元素

algorithm - 如何使用 GA 开始工作

http - 压缩 1200-1500 个字符的 URL 的有效方法是什么?

python - 通过 gevent websocket 发送二进制数据

c# - 已安装 .Net 4.5 但无法在 Visual C# 中使用 ZipFile 类