6

1 週間前、私は、他の誰かが作成した別のアプリケーションによって作成されたバイナリ シリアル化されたオブジェクトを読み取らなければならない状況に陥りました。私は someSerializedData.bin ファイルしか持っていなかったので、未知のオブジェクトのクラス定義を手動で再作成しようとしましたが、シリアル化されたファイルのメタデータのために、それを行うことができました。奇妙なことに、Google でツールを見つけることができませんでした。

Q1: バイナリのシリアル化されたファイル/データからクラス定義を再作成するツールがないのはなぜですか?

そして、それは私の2番目の質問につながります

Q2: シリアル化されたデータからクラス定義を復元できない場合はありますか? (暗号化も難読化もされていないと仮定すると、「デフォルト」の .NET Binaryserializer プロパティを使用して、含まれる型情報とメタデータを無効にするケースに興味があります)

4

4 に答える 4

2

バイナリ データの内容を知らずに逆シリアル化することは不可能です。これを行う唯一の方法は、たとえば JSON または XML を使用してシリアル化することです。説明する例:

あなたの名前「Casual」は、67、97、115、117、97、108 のようにシリアル化できます。ご存じないかもしれませんが、これは ASCII コーディングを使用して行われます (間違いがなければ)。では、これが ASCII で行われていることを知らないと想像してみてください。これは単なる数字の配列ではないと誰が言いますか? または2つの数字の3つの配列?または、ID 67 のオブジェクトと ID 117 のオブジェクト。誰も知らないので、あなたのタスクは不可能です。

唯一のオプションは、最初にシリアル化した人と通信し、これがどのように行われたか、このバイナリ オブジェクトでどのオブジェクトがシリアル化されているかを尋ねることです。

敬具

于 2013-08-15T10:34:27.183 に答える
1

タイプを再作成するのに十分な情報がメタデータにあるかどうかはわかりません。複雑な (ネストされたような) オブジェクト グラフを想像してみてください。前の質問では、メンバーの型 (String と int) が問題でした。

2 番目の質問については、何を達成しようとしているのかわかりません。BinaryFormatter を使用して、リバース エンジニアリングが容易ではない方法でデータを出力できるかどうかはわかりませんが、他の方法は簡単に実装できるはずです。

于 2013-09-03T06:20:38.760 に答える
1

ツールが存在しない理由は、データのみを含む型を作成するだけでは不十分な場合が多いためです。メソッドは、多くの場合、データと同じくらい重要です。特に、プライベート変数を設定するだけではないプロパティの場合は特にそうです。それらの方法が何であるかは誰にもわかりません。

そうは言っても、少なくともデータを保持する型を生成できるツールがあると便利です。もしかしたら、あなたはそのようなツールを作成する最初の人になるでしょうか?

于 2013-09-02T22:43:29.500 に答える