从未知压缩文件中提取数据

Extracting data from an unknown compressed file

我有一个二进制文件,我需要从中提取信息。 我知道这是一个压缩文件,文件的前 3 个字符是 zip 我很确定 LZ Substitution and/or Huffman Coding 被用来压缩这个文件。 然而,该文件不遵循任何常规存档格式,例如 .rar 、 .zip 等。

我尝试读取文件并发现了以下架构

该文件包含 3 个部分:

部分 (A) 显示了 header,它是 16 个字节,包括 8 个字节作为签名 具有以下字符值:122,105,112,1,0,12,0,0

(B)部分是一个地址列表(271),每个地址都指向一个特定的文件地址,我认为这是(C)部分中的记录起点。

(C)部分是实际数据

首地址(图中716)表示(C)部分的第一个记录(chunk)地址,因为(C)部分刚好在(B)部分结束时开始,所以首地址就是部分(C)部分所在的地址(B) 结束,(C) 部分开始,并且由于文件在 (C) 部分结束后结束,所以 B 部分列表中的最后一个地址指向文件末尾,其中 (C) 部分中的最后一个记录(块)结束.

为了使其符合图中的要求,我不得不削减部分 (C) 中的记录(块),它们具有更多的字符,如图所示,第一条记录(块)的长度为 472 字节.

每个块的长度不同,因此它们的长度不相等。 此外,最大记录的长度存储在 header(字节 13、14、15、16)中,即 955(187、3、0、0)我不知道为什么它在读取压缩文件时会派上用场.

如您所见,所有记录都以两个字节 (120,218) 开头 结束字符不会逐个记录地重复,实际上它们看起来非常随机。

我在记录的末尾没有看到霍夫曼树和霍夫曼 table 有任何相似之处,但是为了看看文件,我已经上传了它。

非常感谢任何帮助提取文件中的压缩数据的帮助。

Download Part (C)

(C) 部分中的每一行都是一个 zlib 压缩块文件。

前两个字节120,218是zlib签名,最后4个应该是adler32。