2012-03-07 23 views
2

一部のアセンブリを変更から保護する必要があります(つまり、アセンブリバイナリファイルがコンパイル後に変更されるかどうかを判断する方法)。どのように私は組み込みの.NET手段によって.NET 4.0でこれを達成できますか?変更からC#コードを保護する方法

問題は、dllファイルの変更の検出のみであり、逆コンパイル、リバースエンジニアリングなどの保護ではありません。

答えて

2

あなたは私たち厳密な名前付きアセンブリ(HEREを参照)することができます。
彼らが添付された公開鍵とデジタル署名を持っているとすぐにそれらが変更されたとして、彼らはもはやJITによってロードされません。

ストロング名は、強い整合性チェックを提供します。 .NETを渡す フレームワークのセキュリティチェックは、アセンブリ の内容が構築されてから変更されていないことを保証します。

しかし、スティーブが言いましたが絶対に安全ではありません!

+0

これは、メインアセンブリ(.exe)が変更されていない場合にのみ機能します。 –

0

コンパイル時にアセンブリのハッシュを作成することをお勧めします。あなたのどこかにアプリケーションを保存し、実行時にアセンブリの新しい計算されたハッシュでチェックしてください。

@Steveが示唆(など)としてこれを使用してプロセスが呼び出された「厳密な名前のアセンブリ」

+0

これは強力な名前の全目的です。 – Steve

+2

変更後、それがあなたの(元の)ハッシュであることをどのように知っていますか? –

+0

ああ、感謝スティーブは決して新しい '強い名前の署名'! – RvdK

0

Strong name signing your DLLあなたの参照(署名を含む)の完全修飾名を使用すると、これを手助けする必要があります。

誰かがいつもDLLだけでなくそれを使っている他のアプリケーションも逆アセンブルして、DLLの新しいバージョンへの参照を更新することができます。

0

アセンブリにデジタル署名を試みてください。詳細については、MSDN MagazineのUsing Strong Name Signaturesの記事をご覧ください。

3

悲しいことに、強い名前は消費者に保護を提供します。アセンブリの開発者に対して、コードが変更されていないことを保証するものではありません。 remove a strong nameには簡単です。一度取り外すと、必要に応じて変更できます。

消費者に提供される保護さえも、厳しい名前で制限されています。公開鍵の中央レジストリがないため、アセンブリが特定のパブリッシャによって署名されたことを知る方法はありません。ハッカーは、署名を変更し、変更後に独自の鍵で署名を辞めることができます。実際、強力な名前は実際にはシステムランタイムライブラリを変更しているハッカーに対してのみ保護しています...それでもシステムに対する実際の攻撃に対する効果はよくわかりません。

強力な名前の場合でもコードはeasily modifiedになる可能性があるので、独自のコードで単純なハッシュチェックを追加することで追加の保護は提供されません。希望を持っている唯一の方法は、tamper detectionを提供するプロフェッショナルグレードsoftware protection toolを使用することです。

関連する問題