数十KBのZIPファイルに見えて解凍すると膨大なファイル容量を食う「ZIP爆弾(高圧縮ファイル爆弾)」は、ZIPファイルの中にZIPファイルを格納し、内側のZIPファイルの中にさらにZIPファイルが......という入れ子構造を用いることで圧縮アルゴリズムの限界をうまく回避していますが、それゆえに多くのアンチウイルスソフトで対策されています。この弱点を乗り越えた「非再帰的ZIP爆弾」は、展開後のサイズこそ高効率で作られた再帰的ZIP爆弾にかなわないものの、わずか10MBから281TBへ2800万倍に膨らみます。ZIPの圧縮で一般的に用いられているアルゴリズムは「Deflate(デフレート)」と呼ばれるもので、圧縮・展開速度の速さが特徴的です。圧縮率が最高で1032:1(約0.096%)という点はZIP爆弾を作る際の「足かせ」となっており、この制限を回避するため、ZIP爆弾ではZIPファイル内にZIPファイルを格納する入れ子構造を利用して、入れ子1つごとに1032倍にできるだけ近い圧縮率を得ることで、巨大ファイルを極小に見せています。有名なZIP爆弾に「42.zip」というファイルがあります。このZIPファイルは2種類存在して、古いバージョンは展開時のパスが不要でファイルサイズが「42,374バイト」、新しいバージョンは展開時にパスが必要でファイルサイズが「42,838バイト」。以下は古いバージョンのプロパティです。f.zip」まで連番のつけられた16個のZIPファイルが格納されています。ファイルの元サイズは34,902バイト(35KB)で、圧縮後は2,533バイト(2.6KB)。f.zip」というZIPファイルがあります。こちらは元サイズが29,446バイト(30KB)、圧縮後が2,084バイト(2.1KB)で、圧縮率7.1%。0.zip」を開くと、とうとう入れ子が終了して「0.dll」というファイルが登場しました。元サイズは4,294,967,295バイト(4.3GB)で、圧縮後は4,168,158バイト(4.2MB)なので、圧縮率は実に0.1%です。6層目には同じように0.1%にまで圧縮された巨大ファイルが他にも大量にあるので、もし42.zipを展開をすると、わずか42KBのところから4,507,981,343,026,016バイト(4.5PB)ものファイルが出現することになります。その膨張率は1060億倍。これは「再帰的な展開が行われる実装なら」という前提が必要で、最上位層しか展開されない場合、展開後サイズはわずかに558,432バイト(558KB)で、元の13.2倍にしかなりません。デビッド・フィフィールド氏の提唱する非再帰的ZIP爆弾は、1層目に0.1%まで圧縮されたファイルが250個並んでおり、元ファイルサイズは42.zipと同じ42KBですが、展開すると元の12万9000倍となる5,461,307,620バイト(5.5GB)にまで膨らみます。元ファイルを10MBにすると、展開後サイズを元の2800万倍の281TBにまで増やせるとのこと。Zip64を用いると、46MBのファイルを9800万倍の4.5PBにすることが可能。この非再帰的ZIP爆弾は、ZIPコンテナ内のファイルを重複させることで、コピーを作ることなく複数ファイルに含まれる圧縮率の高いカーネルを参照する仕組みとなっています。このため、入力サイズに比例して出力サイズが増大し、「爆弾」が大きくなるほど圧縮率が向上するとのこと。記事作成時点で、42.zipはアンチウイルスソフトが反応してダウンロードできないようになっていましたが、フィフィールド氏の作った非再帰的ZIP爆弾ファイルには反応しなかったので、くれぐれも怪しいZIPファイルには気をつけてください。ID:e8eG/trnZIP爆弾ねぇ。真っ当な解凍ソフトならそこそこ対策されてんじゃないかな?対策と言っても空き容量チェックする程度の話だけど。ZIPってハードリンクみたいな事もできるのか。FATみたいなのに位置が記されてるだろうし。ID:L4LQv+hP単色ビットマップで巨大サイズ作るイタズラ昔有ったよね。ID:Xiu0iszY>>2両爆弾はコンセプトとしては似ている。ID:K48Ls8FSうちの会社で画像圧縮して復元すると巨大になるやつ作ってるアホいたなあ。ID:eMKTeOzNこれでハードディスクが一瞬にして満杯になって作動不能になるわけだな。ID:7JyKRXAMWin95時代に白一色のビットマップファイルで同じようなことをやったな。ID:IVRM4rOZしかし、展開先もどうせ仮想ディスクなのであった。ID:L1W+E8aO>>24人生...かな?私からは以上だ。仏陀(悟りし者)より。ID:o09QgzYs>>8メールのサイズで弾かない設定にしてるのが悪い。ID:9MZ9a/uO情報エントロピーの限界というのは、理想的にランダムな数列に対して可逆圧縮を行う際の概念でしかない。ランダムではない数列(たとえば「バーカ!お前の母ちゃんデベソ!!」という文字列を一兆回繰り返す、など)の圧縮率は高く、また画像や音声、動画などは、情報の一部を切り捨てて不可逆的な圧縮を行うことで、圧縮率を高める事ができる。プログラムコード等の、劣化が許容されず、パターン化も困難でランダムに近いデータの圧縮率は、およそ2倍ほどとされる。ID:1otth20tzipにパスワードかけてくださいってマニュアルを先ずは一掃しよう。ID:jyvw1RQI圧縮ソフトは10年以上前のをずっと使ってる。更新しれとか言われないし。基本RARだがZIPでも音楽探しちゃうな。ID:jyvw1RQI解凍ソフトか。ID:RKSz8XMz円周率の圧縮率は任意に高くなる。πとかけば2バイトぐらいか。小数点以下1億桁までの円周率ならπ(10^8)とやれば、20バイト以下だろうね。72件をまとめました。【.bat】RECOMMENDこちらの記事も人気です。