从大型二进制文件中提取 zip 文件
Extracting zip files from a large binary file
我正在处理一个有点大的二进制文件 (717M)。此二进制文件包含一组(未知数量!)完整的 zip 文件。
我想提取所有这些 zip 文件(无需明确解压缩它们)。多亏了幻数('PK'),我能够找到每个块的偏移量(起点),但我找不到计算每个块长度的方法(例如,将那些 zip 文件从大二进制文件)。
阅读一些文档 (http://forensicswiki.org/wiki/ZIP),给我的印象是解析 zip 文件很容易,因为它包含每个压缩文件的 compressed size
。
有没有办法让我在 C 或 Python 中做到这一点而无需重新发明轮子?
有一些标准方法可以处理 zip files in python for example but as far as i know (not that i'm an expert) you first need to supply the actual file somehow. I suggest looking at the zip file format specification。
您应该可以根据与幻数的相对位置找到您需要的其他信息。如果我没记错的话,CRC-32 是神奇的数字,所以向前跳 4 个字节会让你得到压缩后的大小,另外 8 个字节应该得到文件名。
- 本地文件头签名4字节(0x04034b50)
- 提取 2 个字节所需的版本
- 通用位标志 2 字节
- 压缩方式2字节
- 最后mod 文件时间 2 字节
- 最后一个 mod 文件日期 2 个字节
- crc-32 4字节
- 压缩大小 4 字节
- 未压缩大小 4 字节
- 文件名长度2个字节
额外字段长度 2 字节
文件名(可变大小)
- 额外字段(可变大小)
希望至少能有所帮助:)
允许 zip 条目不包含本地 header 中的压缩大小。有一个标志位,用于在压缩数据后有一个描述符,其中包含压缩大小、未压缩大小和 CRC。
搜索 end-of-central-directory header 会更可靠,用它来查找中央目录,然后用它来查找本地 header 和条目。这需要注意细节,非常仔细地阅读描述 zip 格式的 PKWare appnote。您还需要处理 Zip64 格式,它有额外的 headers 和字段。
可能会存储一个 zip 条目,即逐字复制到 zip 文件中的该位置,并且该条目本身可能是一个 zip 文件。因此,请确保处理嵌入 zip 文件的情况,仅提取最外层的 zip 文件。
我正在处理一个有点大的二进制文件 (717M)。此二进制文件包含一组(未知数量!)完整的 zip 文件。
我想提取所有这些 zip 文件(无需明确解压缩它们)。多亏了幻数('PK'),我能够找到每个块的偏移量(起点),但我找不到计算每个块长度的方法(例如,将那些 zip 文件从大二进制文件)。
阅读一些文档 (http://forensicswiki.org/wiki/ZIP),给我的印象是解析 zip 文件很容易,因为它包含每个压缩文件的 compressed size
。
有没有办法让我在 C 或 Python 中做到这一点而无需重新发明轮子?
有一些标准方法可以处理 zip files in python for example but as far as i know (not that i'm an expert) you first need to supply the actual file somehow. I suggest looking at the zip file format specification。
您应该可以根据与幻数的相对位置找到您需要的其他信息。如果我没记错的话,CRC-32 是神奇的数字,所以向前跳 4 个字节会让你得到压缩后的大小,另外 8 个字节应该得到文件名。
- 本地文件头签名4字节(0x04034b50)
- 提取 2 个字节所需的版本
- 通用位标志 2 字节
- 压缩方式2字节
- 最后mod 文件时间 2 字节
- 最后一个 mod 文件日期 2 个字节
- crc-32 4字节
- 压缩大小 4 字节
- 未压缩大小 4 字节
- 文件名长度2个字节
额外字段长度 2 字节
文件名(可变大小)
- 额外字段(可变大小)
希望至少能有所帮助:)
允许 zip 条目不包含本地 header 中的压缩大小。有一个标志位,用于在压缩数据后有一个描述符,其中包含压缩大小、未压缩大小和 CRC。
搜索 end-of-central-directory header 会更可靠,用它来查找中央目录,然后用它来查找本地 header 和条目。这需要注意细节,非常仔细地阅读描述 zip 格式的 PKWare appnote。您还需要处理 Zip64 格式,它有额外的 headers 和字段。
可能会存储一个 zip 条目,即逐字复制到 zip 文件中的该位置,并且该条目本身可能是一个 zip 文件。因此,请确保处理嵌入 zip 文件的情况,仅提取最外层的 zip 文件。