10

難読化してユーザーに配布したいバイナリがあります。難読化されていないバージョンのバイナリを使用して、市販の .NET バイナリ フォーマッタを使用してデータをシリアル化するとします。次に、難読化されたバイナリを使用してデータを逆シリアル化できますか?

難読化されたバイナリとシリアル化されたデータを配布したいと考えています。上記の質問に対する答えが「はい」の場合、シリアル化されたデータをユーザー間で共有できます。そうしないと、個々のシリアル化されたデータを各ユーザーに提供する必要があります。

4

3 に答える 3

11

難読化されたバイナリ データとシリアル化されたデータが混同されているようです。デフォルトのシリアライザーを使用してクラスをシリアライズすると、クラス名とプロパティ/フィールド値がそのシリアライズされたデータの文字列として使用されます。次のいずれかを行うと、難読化されたバイナリは、難読化されたバイナリによって作成されたシリアル化されたデータを読み取ることができなくなります。

  1. シリアル化されたクラスでクラスの名前変更を使用する
  2. シリアル化されたクラスでメンバーの名前変更を使用する

これを回避するためのいくつかのオプションを次に示します。

  1. 私はこれをしばらく使用していませんでしたが (そのため、状況で動作することを確認する必要があります)、バイナリ フォーマッタを使用している場合は、データを処理するコンストラクタを提供することで、シリアル化されたファイルにデータを格納する方法を制御できます。 SerializationInfo と StreamingContext。サンプルをグーグルで検索すると、サンプルが見つかるはずです(これは私が見つけたものです:Serialize Objects to File)。ほとんどの人はあまり興味を示さないため、このメソッドの使用に関する新しい記事はあまり見当たらないかもしれませんが、バイナリ フォーマッタを使用してクラスが自身を保存し、再生成する方法を指定する最も簡単な方法です。

    実装する必要があるコンストラクターでは、キーと値のペアに文字列を使用してシリアル化します。難読化では、これらの文字列はおそらく暗号化され (これで問題ありません)、プロパティ設定ステートメントの名前が変更され、難読化されたクラスとの同期が維持されます。 /member names - 難読化されたアセンブリと難読化されていないアセンブリの両方で機能するはずです。

  2. シリアル化するクラスを難読化から除外し、データ ファイルのみを暗号化する別のオプション。

于 2011-10-13T11:38:20.537 に答える
3

質問を読み間違えました。バイナリが難読化されている場合、クラス名/名前空間が変更されるときなどに注意する必要があります。これは、難読化された/難読化されていないバイナリ間だけでなく、一般に異なるバージョン間でも壊れます。

この製品は、次のようにマークされているクラスを除外しているようです:http ://www.ssware.com/cryptoobfuscator/obfuscator-net.htm (これは推奨事項ではありません。使用したことはありません。テストして、コストがかかるかどうかを確認する必要があります。それに値する)。

それとは別に、シリアル化するデータの量に応じて、カスタムシリアライザーを作成できます。


【元の回答】

なぜデータを難読化するのですか?誰かがそれを編集するのを防ぐか、誰かがコンテンツを読むのを防ぐのは想像に難くない。

誰かがそれを編集するのを防ぐためであれば、データのハッシュを含めて、わざわざそれを難読化しないことをお勧めします。

誰かがそれを読まないようにするためなら、シリアル化された後、代わりにデータを暗号化することをお勧めします。

両方の例はたくさんありますが、例が必要な場合はお知らせください。

于 2011-10-12T15:40:49.447 に答える
2

EazFuscatorを使ってみましたか?これにより、一部のカスタム名前変更スキームで、外部メソッドなどの特定の場合に正確な名前を保持できるようになります。ただし、.NET4.0以降またはWCFの最新バージョンでは最新ではありません。

EazFuscatorとDotfuscatorの両方の機能をはるかに超える別の難読化サービスである.NETReactorを使用することもできますが、コストがかかります

.NET Reactorでは、難読化の代わりにコードの暗号化も可能です。これにより、前述のように問題が解決されます。

于 2011-10-12T17:40:09.557 に答える