2011-10-06 20 views
10

私は難読化したいバイナリとユーザーに渡すことがあります。 .NETバイナリフォーマッタを使用してデータをシリアル化するために、わかりやすいバイナリバージョンを使用していると仮定します。次に、わかりにくいバイナリでデータを脱シリル化できますか?.NETでのシリアライゼーションと難読化

難読化されたバイナリとシリアル化されたデータを渡したいと思います。 への答えが上記の場合、私はシリアライズされたデータをユーザー間で共有できます。それ以外の場合は 私は個々のシリアル化されたデータを各ユーザーに提供する必要があります。

+0

私はdownvoteなかったhttp://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts/ –

+0

を参照してください。 –

答えて

3

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

この製品は明らかに、http://www.ssware.com/cryptoobfuscator/obfuscator-net.htmとマークされたクラスを除外しています(これはお勧めではありません。私は一度も使用していません - テストして費用がかかりますか?

これ以外にも、シリアル化するデータの量に応じてカスタムシリアライザを作成できます。


[オリジナル回答]

なぜあなたはデータを難読化していますか?私は誰かがそれを編集したり、誰かがそのコンテンツを読むのを妨げたりするのを防ぐことしか想像できません。

誰かが編集できないようにするには、データのハッシュを含めるようにしてから、難読化することをお勧めします。

誰かがそれを読んでしまうのを防ぐには、シリアル化された後でデータを暗号化することをお勧めします。

例がたくさんありますが、ご希望の場合はお知らせください。

+0

この問題は難読化されたデータではなく、難読化されたバイナリに関するものです。あなたはそれを使ってデータをシリアライズし、同じプログラムのわかりにくいバージョンでデシリアライズできますか? – tanascius

2

EazFuscatorを試しましたか?いくつかのカスタム名前変更スキームでは、外部メソッドなど、特定の場合に正確な名前を保持することができます。 NET 4.0+またはWCFの最新バージョンでは最新ではありません。

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

.NET Reactorでは、難読化ではなくコードの暗号化も可能です。難読化は、これまでに提案されているように問題を解決します。

10

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

  1. 使用クラスが
  2. 利用会員は
あなたのシリアル化されたクラスに名前を変更するあなたのシリアル化されたクラスに名前を変更します

これを回避するには、次のオプションがあります。

  1. 私はしばらくの間、これを使用していないが、あなたはバイナリフォーマッタを使用している場合は、そのデータがシリアライズさに格納される方法を制御することができます(あなたはそれがあなたの状況で動作することを確認したいと思います) SerializationInfoおよびStreamingContextを処理するコンストラクタを提供することによって、あなたがサンプルを探し回っている場合は、見つけてください(ここには見つかったものがあります:Serialize Objects to File)。ほとんどの人はそれほど興味深いものではないので、このメソッドを使って多くの新しい記事を見つけることはできませんが、クラスがどのように保存され、バイナリフォーマッタを使用して再作成するのが最も簡単な方法です。

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

  2. 難読化から直列化しているクラスを除外し、データファイルを暗号化するための別のオプションです。

+0

ここで使用されている実際の技術は、シリアライゼーション・サロゲートと呼ばれています。その場合のどこかで誰かがシリアライゼーションサロゲートの検索を追加したいかもしれません。 –