“ZIP解压炸弹包”看似仅46MB大小,解压后却能膨胀到4.5PB撑爆你的硬盘空间

“ZIP解压炸弹包”看似仅46MB大小,解压后却能膨胀到4.5PB撑爆你的硬盘空间

ZIP一直是主流的压缩文件格式,并且可追溯到几十年前的5.25和3.5英吋软盘时代。然而该技术作为一把双面刃,也难免被别有用心的人所利用。比如透过一个看似超小型的压缩包,制作一个内含巨量垃​​圾数据的「解压炸弹包」(zip bomb)——一个表面上只有46MB,但其实解压缩后,可以膨胀到4.5PB的zbxl .zip炸弹压缩包。

其实早在去年,研究员大卫·菲尔(David Fifield)就曾展示过早期的解压炸弹包,能够将一个42kB的zbsm.zip文件迅速膨胀到5.5GB。

“ZIP解压炸弹包”看似仅46MB大小,解压后却能膨胀到4.5PB撑爆你的硬盘空间

之后,他又继续努力,推出了一个表面上只有10MB,但其实能够膨胀到281 TB的zbLG.zip炸弹压缩包。

时间转眼到了2019年7月,菲尔又发表了他的最新研究成果——一个表面上只有46MB,但其实可以膨胀到4.5PB的zbxl.zip炸弹压缩包。

不过需要指出的是,由于其采用了Zip64,所以兼容性较差。

“ZIP解压炸弹包”看似仅46MB大小,解压后却能膨胀到4.5PB撑爆你的硬盘空间

7月2日,大卫·菲尔(David Fifield)详细介绍了自己的最新研究成果。

zip解压炸弹包使用递归算法的原因,归结于ZIP解析器中使用的DEFLATE算法无法实现高于1032:1的压缩率。有趣的是,菲尔找到了一种绕过该限制的方法。

其写到:本文介绍了如何构造一款压缩比超过DEFAATE 1032的非递归解压炸弹包。其透过重置zip容器内的文件来实现,以便在多个文件中引用高度压缩数据的「内核」,而不是制作它的多个副本。

“ZIP解压炸弹包”看似仅46MB大小,解压后却能膨胀到4.5PB撑爆你的硬盘空间

解压炸弹的输入与输出大小,呈现的是二次方增长。即随着炸弹变大,压缩比也就更强。构造取决于zip和DEFLATE的特征,它不能直接移植到其它文件格式或压缩演算法。

此外,该方案与大多数zip解析器相容,不过文件流解析器是个例外。后者在一次传递中解析,而无需事先查询zip文件的中心目录。

“ZIP解压炸弹包”看似仅46MB大小,解压后却能膨胀到4.5PB撑爆你的硬盘空间

为使该方法见效,菲尔必须重新审视数据是如何存储在zip文件中的,并且选择了适当的Deflate实现。

其选择了bulk_deflate,一个专门用于压缩一串重复字节的自定义压缩器,能够比zlib、info_ZIP或Zopfli更密集地打包数据的工具。

“ZIP解压炸弹包”看似仅46MB大小,解压后却能膨胀到4.5PB撑爆你的硬盘空间

尽管bulk_deflate优于这些解决方案,但菲尔指出,其在一般用例中的效率并不高,还必须借助被称作ZIP64的zip标准扩展,来创建一个内含超过281TB数据输出的文件。

但若使用ZIP64,便可创建出一个内含有效无限长度的解压炸弹包。至于更多细节,还请移步至官网查看。

好汉科普二维码图片

微信扫码关注公众号获取最新消息

原创文章,作者:好汉科普网,如若转载,请联系我们:thinkou@126.com 并注明出处:https://www.108hei.com/archives/972

(4)
上一篇 2019年7月22日 下午11:03
下一篇 2019年7月23日 下午2:01
微信公众号