我正在处理一个有点大的二进制文件(717M)。这个二进制文件包含一组(未知数!)完整的zip文件。
我想提取所有这些zip文件(不需要解压缩它们)。由于神奇的数字('PK'),我能够找到每个块的偏移量(起始点),但是我找不到计算每个块的长度的方法(例如,将这些zip文件从大块中雕刻出来)二进制文件)。
阅读一些文档(http://forensicswiki.org/wiki/ZIP),给我的印象是解析zip文件很容易,因为它包含每个压缩文件的compressed size
。
有没有办法让我用C或Python做到这一点而不重新发明轮子?
答案 0 :(得分:2)
允许zip条目不包含本地标头中的压缩大小。有一个标志位具有压缩大小的描述符,未压缩的大小,CRC跟随压缩数据。
搜索中心目录末端标头,使用它来查找中心目录,并使用它来查找本地标头和条目会更可靠。这需要注意细节,仔细阅读描述zip格式的PKWare appnote。您还需要处理Zip64格式,它还有其他标题和字段。
可以存储zip条目,即逐字复制到zip文件中的该位置,并且该条目本身可以是zip文件。因此,请确保处理嵌入式zip文件的情况,仅提取最外面的zip文件。
答案 1 :(得分:1)
例如,有一些标准方法可以处理zip files in python但据我所知(不是我是专家),您首先需要以某种方式提供实际文件。我建议查看zip file format specification。
您应该能够根据幻数的相对位置找到您需要的其他信息。如果我没有弄错CRC-32是神奇的数字,那么向前跳4个字节将使你达到压缩大小,另外8个字节应该得到你的文件名。
额外字段长度2字节
文件名(可变大小)
希望至少有所帮助:)