Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 带有78 9C头的数据库文件?_Database_Binary_Zlib_B Tree - Fatal编程技术网

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

Database 带有78 9C头的数据库文件?,database,binary,zlib,b-tree,Database,Binary,Zlib,B Tree,我开始使用一种奇怪的数据库文件格式。 每个数据库都有两个文件:一个是“database.DB”,另一个是“database.key” “.db”文件始终以0x78 0x9C二进制头开头,“.key”文件的随机部分始终包含字符串“1.00 Peter's B Tree” 在线查看时,我发现头0x78 0x9C可能引用压缩Zlib,但没有找到任何查看数据库内容的方法 这里有人知道什么可以帮助我使用这种格式吗?Thnaks:) 编辑1: “.db”文件似乎包含多个zlib压缩流: 签名0x78 0x9

我开始使用一种奇怪的数据库文件格式。 每个数据库都有两个文件:一个是“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
通过对这两个流进行充气,我得到了两个新的未压缩流

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

这似乎适用于某些“.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 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”库打开它们。 通过“pblkfgetab()”(),我成功地获得了与文件中每个键相关的所有记录。这些记录的值为4字节。 使用十六进制编辑器在解压缩的“.db”文件(在充气过程中没有给我错误的文件)上搜索这些值,我能够得到一些结果,但仅此而已。我不明白钥匙文件上的那些记录意味着


谢谢你的帮助

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

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


您正在尝试对数据库格式进行反向工程,但似乎需要进行的工作相对较少。这是一个stackoverflow帮不上忙的检测工作,除非这里有人知道格式并识别它。

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

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


您正在尝试对数据库格式进行反向工程,但似乎需要进行的工作相对较少。这是一个stackoverflow帮不上忙的检测工作,除非这里有人知道格式并能识别。

.db文件是压缩数据,.key文件是在这些.db(像索引文件)中查找所需数据的关键信息。打开它们后,在这些.db文件中可能找不到字符串数据,因为它们是运行时数据库,所以这些.db文件包含十六进制数据,如“数据包”,并按他所说进行压缩,

这些.db文件是压缩数据,.key文件是在这些.db(如索引文件)中查找所需数据的关键信息。打开它们后,在这些.db文件中可能找不到字符串数据,因为它们是一个运行时数据库,所以这些.db文件包含十六进制数据,如“packets”,并按他所说进行压缩。这些文件被不同的实用程序(如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
cat这些被不同的实用程序(如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
cat是具有默认压缩的zlib魔法头文件

尝试使用命令行工具提取数据。

是具有默认压缩的zlib magic头文件


请尝试使用命令行工具提取数据。

“彼得的B树”->好的,但我可以用它做什么呢?:/这不是查看数据库内容的一种方式“彼得的B树”的可能重复项->好的,但我能用它做什么呢?:/这不是一种查看数据库内容的方式,可能是对延迟响应的抱歉。现在语言或环境并不重要。这些都是“旧”数据库文件,由我公司内部的某个人创建,现在不再在这里工作,我们必须打开它们。我曾尝试在Windows中用java解压zlib流,但输出的混乱程度并不亚于此。当您尝试解压时,成功了吗?成功不会有错误代码。你是对的,出现了错误代码。然而,该.db文件似乎由更精简的数据流组成。。我可以在文件中找到多个0x789C。我制作了一个程序,在每次出现0x789C时分割二进制文件,然后对每个数据流进行膨胀。H