2016-07-22 19 views
1

私は奇妙なデータベースファイル形式で作業するようになりました。 各DBには2つのファイルがあります.1つは "database.db"で、もう1つは "database.key"です。78 9Cヘッダーのデータベースファイル?

".db"ファイルは常に0x78 0x9Cバイナリヘッダーで始まり、 ".key"はファイルのランダム部分に常に "1.00 Peter's B Tree"という文字列を含みます。

オンラインで見る私は、ヘッダ0x78 0x9Cが圧縮Zlibを参照する可能性があるが、データベースの内容を見る方法が見つかっていないことがわかりました。

誰でもこのフォーマットで私を助けることができるものを知っていますか? Thnaks :)

編集1: それ「.DB」ファイルに複数のzlibデフレートストリーム含まれていることを表示されます。 は0x9C 0x78と署名は、ファイルの先頭ではなくのさまざまな部分でのみ存在していないがそれ。私は2つの新しい非圧縮ストリームを取得thoose 2ストリームを膨張させることによって

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 

: は例Foをこれは私が一つのファイルに見つけることができるストリームの一部です。

私は、 ".db"ファイルをロードしてバイト配列のリストを作成したC#プログラムです。バイト配列は圧縮されたストリームです。 これを行うには、ファイルを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でファイルを分割することは、それを行うための正しい方法ではありません...

については」.KEY」ファイル:私は開くことができましたそれらPeter Graf "PBL"のライブラリを使用しています。 "pblKfGetAbs()"(http://www.mission-base.com/peter/source/pbl/doc/keyfile.html)では、ファイル内の各キーに関連するすべてのレコードを取得できました。これらのレコードは4バイトの値です。 ヘキサエディタを使用して、圧縮解除された ".db"ファイル(これらのファイルがinflateプロセス中にエラーを表示しなかったファイル)でこれらの値を検索すると、何らかの結果が得られました。私はキーファイル上のワットトゥースレコードを理解していません...

ありがとうございました!

+1

"ピーターのBツリー" - > http://www.mission-base.com/peter/source/pbl/pblkf.c – Blorgbeard

+0

これで何ができますか? :/それはデータベースの内容を見る方法ではありません – titanicsnake

+0

[zlibヘッダーの外観はどうなっていますか?](https://stackoverflow.com/questions/9050260/what-does-a-zlib-header-見た目のようなもの) – kenorb

答えて

4

はい、これらはおそらくzlibストリームがデータベースに格納されています。

圧縮データに78 9cが表示されることはありません。単にファイルの内容を抽出するのには適していません。また78 9cだけが有効なzlibヘッダーではありません。有効なzlibストリームを見つける最も簡単な方法は、単にすべてのバイトで解凍を開始することです。 zlibは、すぐに有効なzlibヘッダーを持たないものとしてほとんどを除外します。それ以外の場合は、完了するか失敗するまで解凍することができます。良好な整合性チェック(Z_STREAM_ENDを返す)が完了した場合、それは意図的に圧縮されたzlibストリームである可能性が非常に高いです。

データベースのフォーマットをリバースエンジニアリングしようとしていますが、実際にはほとんど進んでいないようです。これは、ここで誰かがフォーマットを認識し、それを認識しない限り、stackoverflowが助けることができない探偵仕事です。

+0

遅れて申し訳ありません。 現在、言語や環境は重要ではありません。 Thooseは私の会社の誰かが作成した場所で、現在はここで働いていない「古い」dbファイルであり、私たちはそれらを開く必要があります。 Windowsでjavaを使用してzlibストリームを解凍しようとしましたが、出力があまり混乱しません。 – titanicsnake

+0

解凍しようとしましたが、成功しましたか?成功はエラーコードではありません。 –

+0

あなたが正しいです、エラーコードが現れました。 しかし、.dbファイルは、より多くのデータストリームの収縮で構成されているようです。ファイル内に複数の0x789Cがあります。 各0x789Cオカレンスでバイナリファイルを分割し、これらのデータストリームのそれぞれを展開するプログラムを作成しました。しかし、これは完全には動作していないようです... – titanicsnake

0

.dbファイルは圧縮されたデータです。.keyファイルは、それらを開いた後にインデックスファイルのような.dbファイルで必要なデータを見つけるためのkey_informationです。これらの.dbファイルには文字列データが見つからないことがあります。それらはランタイムデータベースであるため、これらの.dbファイルには 'パケット'のような16進データが含まれており、圧縮されています。

0

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 /長エラーを得た場合は、障害のあるとして検討してください。

関連する問題