带有78 9C标头的数据库文件?

问题描述 投票:1回答:3

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

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

在线查看我发现标头0x78 0x9C可以引用压缩Zlib,但是没有找到任何方法来查看数据库的内容。

这里有没有人知道可以帮助我这种格式的东西? Thnaks :)

编辑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分钟拆分一次文件。

这似乎适用于一些“.db”文件,但在其他情况下,它给了我一些错误,如“无效距离代码”,这个流

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

或使用此流“无效的存储块长度”

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”文件(在扩充过程中没有给我错误的文件中)中搜索这些值时,我能够得到一些结果,但仅此而已。我不明白关键文件上的wat thoose记录意味着......

感谢您的帮助 !

database binary zlib b-tree
3个回答
5
投票

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

没有什么能阻止78 9c出现在压缩数据中,所以简单地搜索它并不是提取文件内容的好方法。 78 9c也不是唯一有效的zlib标头。查找有效zlib流的最简单方法是在每个字节处开始解压缩。由于没有有效的zlib头,zlib会很快排除。对于其余部分,您可以解压缩直到完成或失败。如果它通过良好的完整性检查(返回Z_STREAM_END)完成,则极有可能是故意压缩的zlib流。

您正在尝试对数据库格式进行逆向工程,而这种格式似乎相对较少。这是一个侦测工作,stackoverflow无法帮助,除非有人知道格式并识别它。


1
投票

这些是由不同的实用程序广泛使用的zlib magic headers(例如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错误,请考虑有问题。


0
投票

.db文件是压缩数据,.key文件是key_informations,用于在打开它们之后在.db(如索引文件)中查找所需数据,您可能无法在这些.db文件中找到字符串数据,因为它们是运行时数据库,这些.db文件包含十六进制数据,如“数据包”,他们按照他说的压缩

© www.soinside.com 2019 - 2024. All rights reserved.