78 9C header 的数据库文件?

Database file with 78 9C header?

我开始使用一种奇怪的数据库文件格式。 每个数据库都带有两个文件:一个是"database.db",另一个是"database.key".

“.db”文件总是以 0x78 0x9C 二进制文件开头 header,而“.key”总是在文件的随机部分包含字符串“1.00 Peter's B Tree” .

上网查了一下发现header0x78 0x9C可以引用zlib压缩包,但是没找到查看数据库内容的方法

这里有人知道可以帮助我处理这种格式的信息吗?谢谢:)

编辑 1: 似乎“.db”文件包含多个 zlib 压缩流: 签名 0x78 0x9C 不仅出现在文件的开头,而且出现在文件的不同部分。 例如,这是我可以在一个文件中找到的一些流:

78 9C CB 63 40 07 33 76 5B 6A AF 78 DD 54 23 CE C9 90 C4 78 89 81 89 81 F1 22 86 9A ED 6A D7 44 F6 03 D5 B0 31 30 94 60 91 F6 D4 2A 76 3B 0C 94 E6 63 60 2C 51 B6 63 00 00 22 13 11 57
78 9C CB 63 40 07 2F 53 D7 B8 9F EC 8B B2 E1 7A F1 32 87 F1 12 03 23 03 E3 45 0C 35 4B B7 68 5B CD 90 2E E7 65 67 60 2A 51 B6 63 00 00 A6 E8 0C 5D

通过膨胀 thoose 2 个流,我得到 2 个新的未压缩流。

然后我做了一个 C# 程序,它加载了一个“.db”文件并创建了一个字节数组列表;字节数组是一个缩小的流。 为此,我只需在每 78 9C 处拆分文件。

这似乎适用于一些“.db”文件,但在其他情况下,它给了我一些错误,例如 "Invalid distance code",这个流

78 9C E2 13 FD 2F 14 9F CD 9B 29 3E 65 9F A0 F8 BC 7C 92 E2 93 EF 29 8A CF B0 A7 29 3E 8D FE 4A F1 B9 F2 0C C5 27 C4 B3 14 EF F5 5B 28 DE B5 B7 52 BC FF 6E A3 78 27 DD 4E F1 9E B8 83 E2 DD 6D 27 C5 FB D4 2E FA F0 6A EE A6 78 EF 78 EE EA 2F AA D3 91 FE 1F 2F 94 78 6C

或"Invalid stored block lenght",与此流

78 9C 90 35 CE 34 2F 0C 7D FE A5 57 C9 FF D5 2B 47 5B B7 C4 7F 69 EA 3F 0F AC 25 F4 45 49 3D CC FF 00 E5 AE 30 40

也许简单地在每个 78 9C 处拆分文件并不是正确的做法...

至于“.key”文件:我能够使用 Peter Graf "PBL" 的库打开它们。 使用 "pblKfGetAbs ()" (http://www.mission-base.com/peter/source/pbl/doc/keyfile.html) 我设法获取了与文件中每个键相关的所有记录。这些记录是 4 字节值。 使用十六进制编辑器在解压缩的“.db”文件(在膨胀过程中没有给我错误的文件)中搜索这些值,我能够得到一些结果,但仅此而已。我不明白密钥文件上的那些记录是什么意思...

感谢您的帮助!

是的,这些很可能是 zlib 存储在数据库中的流。

没有什么可以阻止 78 9c 出现在压缩数据中,因此简单地搜索它并不是提取文件内容的好方法。另外 78 9c 不是唯一有效的 zlib header。找到有效 zlib 流的最简单方法是简单地从每个字节开始解压缩。 zlib 将很快排除大多数没有有效的 zlib header。对于其余的,您可以解压缩直到它完成或失败。如果它以良好的完整性检查完成(返回 Z_STREAM_END),那么它极有可能是有意压缩的 zlib 流。

您正在尝试 reverse-engineer 一种数据库格式,但看起来相对较少。这是 Whosebug 帮不上忙的侦探工作,除非这里有人知道格式并能识别它。

.db 文件是压缩数据,.key 文件是key_informations打开后在.db(类似索引文件)中找到想要的数据,您可能找不到字符串数据那些 .db 文件,因为它们是运行时数据库,这些 .db 文件包含像“数据包”这样的十六进制数据,并且按照他所说的那样进行压缩

这些是 zlib magic headers widely used by different utilities (such as Git、Memcached 等)。

要解压缩文件,可以使用以下命令:

printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" | cat - zlib-file.dump | gunzip

要跳过之前的一些字节,请使用dd,例如

cat <(printf "\x1f\x8b\x08\x00\x00\x00\x00\x00") <(dd skip=100 if=zlib-file.dump bs=1 of=/dev/stdout) | gunzip

如果数据出现crc/length错误,则认为是错误的。

78 9C 是具有 默认压缩 .

的 zlib 魔术 headers

尝试 Aluigi's offzip 命令行工具来提取数据。