1. ホーム
  2. algorithm

[解決済み] Zip爆弾はどうやって作るの?

2022-03-01 18:39:43

質問

この質問 を見たときに、自然とZIP爆弾に行き着きました。 ウィキペディアのページ というトピックがあります。この記事では、45.1kbのZIPファイルが1.3エクサバイトに解凍される例について触れています。

そもそも、そのようなファイルを作るには、どのような原理・技術が必要なのでしょうか?私は実際にこれを実行したいのではなく、関係する概念の簡略化された"how-stuff-works"の説明に興味があるのですが、いかがでしょうか?

記事には9層のZIPファイルについて書かれているので、単純に0をたくさんZIPすればいいというわけではありません。なぜ9個なのか、なぜ10個ずつのファイルなのか?

解決方法は?

Wikipediaのページから引用しています。

<ブロッククオート

Zip爆弾の一例として、ファイル 45.1.zipは、45.1キロバイトの圧縮データでした。 9つの 層からなるネストしたZIPファイルのセットで 10個で、最下層の各アーカイブは 1.30ギガバイトのファイルを含む に対して 合計1.30エクサバイトの非圧縮データ。 データです。

つまり、0だらけの1.3GBのファイルを1つだけ用意し、それをZIPファイルに圧縮し、10個コピーしてそれをZIPファイルに詰め、この作業を9回繰り返せばいいのです。

このように、完全に解凍するととんでもない量のデータが生成されるファイルを、最初からその量を用意することなく手に入れることができます。

さらに、ネストされたアーカイブは、ウイルススキャナのようなプログラム(これらの「爆弾」の主なターゲット)が賢くなり、「大きすぎる」アーカイブの解凍を拒否することが非常に難しくなります。