David Fifield推出新款“解壓炸彈包”:46MB文件可膨脹到4.5PB
ZIP一直是主流的壓縮文件格式,並且可追溯到幾十年前的5.25和3.5英寸軟盤時代。然而該技術作為一把雙刃劍,也難免被別有用心的人所利用。比如通過一個看似超小型的壓縮包,製作一個內含巨量垃圾數據的“解壓炸彈包”(zip bomb)。其實早在去年,研究員David Fifield就曾展示過早期的解壓炸彈包,能夠將一個42kB的zbsm.zip文件迅速膨脹到5.5GB 。
(圖自:David Fifield,via ExtremeTech)
之後,他又繼續努力,推出了一個表面上只有10MB,但其實能夠膨脹到281TB的zb LG .zip炸彈壓縮包。
時間轉眼到了2019 年7 月,David Fifield 又發表了他的最新研究成果—— 一個表面上只有46MB,但其實可以膨脹到4.5PB 的zbxl.zip 炸彈壓縮包。
不過需要指出的是,由於其採用了Zip64,所以兼容性較差。
(7月2日,David Fifield詳細介紹了自己的最新研究成果)
zip解壓炸彈包使用遞歸算法的原因,歸結於ZIP解析器中使用的DEFLATE算法無法實現高於1032:1的壓縮率。有趣的是,David Fifield找到了一種繞過該限制的方法。
其寫到:本文介紹瞭如何構造一款壓縮比超過DEFAATE 1032 的非遞歸解壓炸彈包。其通過重置zip 容器內的文件來實現,以便在多個文件中引用高度壓縮數據的’內核’,而不是製作它的多個副本。
解壓炸彈的輸入與輸出大小,呈現的是二次方增長。即隨著炸彈變大,壓縮比也就更強。構造取決於zip 和DEFLATE 的特徵,它不能直接移植到其它文件格式或壓縮算法。
此外,該方案與大多數zip 解析器兼容,不過’流’解析器是個例外。後者在一次傳遞中解析,而無需事先查詢zip 文件的中心目錄。
為使該方法見效,Fifield 必須重新審視數據是如何存儲在zip 文件中的,並且選擇了適當的Deflate 實現。
其選擇了bulk_deflate,一個專門用於壓縮一串重複字節的自定義壓縮器,能夠比zlib、info_ZIP 或Zopfli 更密集地打包數據的工具。
儘管bulk_deflate 優於這些解決方案,但Fifield 指出,其在一般用例中的效率並不高,還必須藉助被稱作ZIP64 的zip 標準擴展,來創建一個內含超過281TB 數據輸出的文件。
但若使用ZIP64,便可創建出一個內含有效無限長度的解壓炸彈包。至於更多細節,還請移步至官網查看。