0

我有一个二进制文件,我需要从中提取信息。我知道它是一个压缩文件,文件的前 3 个字符是zip 我很确定 LZ 替换和/或 Huffman Coding 正在用于压缩这个文件。但是,该文件不遵循任何常规存档格式,例如 .rar 、 .zip 等。

我试图阅读该文件并发现以下架构 (C) 部分被截断以使其适合图形

该文件有 3 个部分:

(A) 部分显示 16 字节的标头,包括 8 字节作为签名,具有以下字符值:122,105,112,1,0,12,0,0

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

(C)部分是实际数据

第一个地址(图中的 716)显示了部分(C)中的第一个记录(块)地址,因为部分 (C) 恰好在部分 (B) 结束时开始,所以第一个地址是部分 (B) 结束的地址,并且(C) 部分开始,并且由于文件在 (C) 部分完成后结束,因此 B 部分列表中的最后一个地址指向 (C) 部分中最后一条记录(块)结束的文件末尾。

为了使它适合图中,我必须在 (C) 部分中剪切记录(块),它们具有更多的字符,如图所示,第一条记录(块)的长度为 472 字节。

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

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

我没有看到记录末尾的霍夫曼树或霍夫曼表之间有任何相似之处,但为了查看文件,我已将其上传到此处。

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

下载部分 (C)

4

1 回答 1

1

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

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

于 2017-03-02T23:58:14.347 回答