私はいくつかのゲームデータファイルで趣味のプロジェクトを行っています。ゲームが変更を受け入れるように、それらのいくつかを編集して再パッケージ化したいのですが。
ディレクトリ自体は、開くのに十分簡単な独自の形式でアーカイブされました。ファイルはzlibで圧縮されました。アーカイブの層がまだ(少なくとも)もう1つあるように見えるので、今私は困惑しています。ファイルはシリアル化されているように見えますが、最も一般的な明白な答えを検索してもうまくいきませんでした。Googleは役に立ちませんでした。マジックバイトが見つかりませんでした(何もないという意味ではなく、見つからなかっただけです)。商用の場合、シリアル化形式を確認するにはどうすればよいですか?そうでない場合、どのように問題に取り組む必要がありますか?
少し背景:
- ファイルは、Windows上のVisualC++アプリケーションによって読み取られます
- ファイルの事前シリアル化はXMLのようなものだったと思います
- .exeを逆コンパイルしましたが、データファイルの読み取り中にプロセスをステップ実行しようとしてもうまくいきませんでした(7Gbのデータを読み取るため、操作したいファイルタイプの先頭が見つかりませんでした)。役に立つ弦を釣るのもうまくいきませんでした。
- Pythonのピクルス、マーシャル、VC ++ MFCマーシャル、およびさまざまなアーカイブプログラム形式と比較してみました。運がない。
シリアル化されたファイルの特徴:
ファイルの終わりには、ある種の目次があります。このように見えます:
TOC04バイトのオフセット4バイトの長さOBJE8バイトのオフセット8バイトの長さ
等々。TOCの他の見出しは、TOPO、CHNK、CLAS、PROP、STRG、TRAN、IMPR、およびEXPRであり、その後にオフセットと長さが続きます。オフセットと長さの値はビッグエンディアンです。
ファイル自体は、type-length-valueでエンコードされている(CLASの見出しに該当する人間が読める文字列)か、4バイトのチャンクでタイプが異なるtype-valueのようです。AA AA AA AA、AB AB AB AB、BB BBBBBBのような4バイトのブロックがあります。これらはおそらく区切り文字として機能します。
データには、1バイトが1増加する以外は何も変わらない長い部分があります。ある種のインデックスのように見えます。
ファイルデータには、さまざまなデータ型が含まれている場合があります。
2つの異なるバージョンのデータファイルを比較する機会がありました。シリアル化されていないファイルのint値を変更すると、シリアル化されたファイルに非常に小さな変更が加えられます(通常、元のファイルで1つの数値が変更されると、結果のファイルで1つの16進値が変更されます)。
このフォーマットは非常にスペース効率が悪いです。ほとんどすべてが4バイトのチャンクであり、ファイルは10倍に圧縮可能です。これと文字列の人間の可読性により、ファイルはいかなる方法でも圧縮または暗号化されていないと私は信じています。どういうわけかシリアル化されただけです。
どんな助けでも大歓迎です。