「解壓炸彈包」看似僅46MB大小,解壓後卻膨脹到4.5PB灌爆你硬碟

2019.07.15 by
T客邦
T客邦 查看更多文章

《T客邦》是由台灣最大的電腦出版集團「PC home電腦家庭」所經營,每日提供專業、詳實、高品質的科技資訊,成為許多電腦族群愛好的科技網站。

Shutterstock
ZIP一直是主流的壓縮文件格式,但有人卻透過一個看似超小型的壓縮包,製作一個內含巨量垃圾資料的「解壓炸彈包」(zip bomb)。

ZIP一直是主流的壓縮文件格式,並且可追溯到幾十年前的5.25和3.5英吋軟碟時代。然而該技術作為一把雙面刃,也難免被別有用心的人所利用。比如透過一個看似超小型的壓縮包,製作一個內含巨量垃圾資料的「解壓炸彈包」(zip bomb)——一個表面上只有46MB,但其實解壓縮後,可以膨脹到4.5PB的zbxl.zip炸彈壓縮包。

其實早在去年,研究員大衛·菲爾(David Fifield)就曾展示過早期的解壓炸彈包,能夠將一個42kB的zbsm.zip文件迅速膨脹到5.5GB。

T客邦

之後,他又繼續努力,推出了一個表面上只有10MB,但其實能夠膨脹到281 TB的zbLG.zip炸彈壓縮包。

時間轉眼到了2019年7月,菲爾又發表了他的最新研究成果——一個表面上只有46MB,但其實可以膨脹到4.5PB的zbxl.zip炸彈壓縮包。

不過需要指出的是,由於其採用了Zip64,所以相容性較差。

7月2日,大衛·菲爾(David Fifield)詳細介紹了自己的最新研究成果。
T客邦

zip解壓炸彈包使用遞歸算法的原因,歸結於ZIP解析器中使用的DEFLATE算法無法實現高於1032:1的壓縮率。有趣的是,菲爾找到了一種繞過該限制的方法。

其寫到:本文介紹了如何構造一款壓縮比超過DEFAATE 1032的非遞歸解壓炸彈包。其透過重置zip容器內的文件來實現,以便在多個文件中引用高度壓縮數據的「內核」,而不是製作它的多個副本。

T客邦

解壓炸彈的輸入與輸出大小,呈現的是二次方增長。即隨著炸彈變大,壓縮比也就更強。構造取決於zip和DEFLATE的特徵,它不能直接移植到其它文件格式或壓縮演算法。

此外,該方案與大多數zip解析器相容,不過文件流解析器是個例外。後者在一次傳遞中解析,而無需事先查詢zip文件的中心目錄。

T客邦

為使該方法見效,菲爾必須重新審視數據是如何存儲在zip文件中的,並且選擇了適當的Deflate實現。

其選擇了bulk_deflate,一個專門用於壓縮一串重複字節的自定義壓縮器,能夠比zlib、info_ZIP或Zopfli更密集地打包數據的工具。

T客邦

儘管bulk_deflate優於這些解決方案,但菲爾指出,其在一般用例中的效率並不高,還必須借助被稱作ZIP64的zip標準擴展,來創建一個內含超過281TB數據輸出的文件。

但若使用ZIP64,便可創建出一個內含有效無限長度的解壓炸彈包。至於更多細節,還請移步至官網查看。

本文授權轉載自:T客邦

延伸閱讀

每日精選科技圈重要消息