1

StrongName はリフレクションを妨げないことがわかりました-それは難読化ツールの仕事です。しかし、かなりユニークな名前を作成すること以外に、StrongNames を使用することの暗号化の目的や保護は何ですか?

推定

  1. MyAssemblyを介してinternal公開されるクラスとメソッドがあります [assembly: InternalsVisibleTo("MyAssemblyTest, PublicKey=RealRSAPublicKey")]

  2. MyAssemblyTest、テスト アセンブリ。

これらのアセンブリは両方とも、おそらく同じ RSA キー ペアを使用して、StrongNames を持っています。

誰かを妨げるもの

  1. 署名を剥がすMyAssembly
  2. 偽/ダミーの RSA キー ペアの作成
  3. アセンブリ属性を次のように変更します[assembly: InternalsVisibleTo("MyAssemblyTest, PublicKey=FakeRSAPublicKey")]
  4. MyAssembly独自の偽/ダミー RSA キー ペアで再署名する
  5. 独自のアセンブリ内の内部を消費すると、MaliciousAssembly

私はストロングネーミングの本当の義務が何であるかはっきりしていないと思います...いくつかの洞察をいただければ幸いです。

4

1 に答える 1

0

アセンブリに厳密な名前を付ける主な目的は、アセンブリを使用する他の誰かのコードの悪意のあるユーザーが、自分のコードを自分のコードに置き換えないようにすることです。

次の状況を考えてみましょうTransmitSecret.dll。顧客が安全な方法でサーバーと通信できるように、顧客に提供するアセンブリを作成します。署名されていない場合TransmitSecret.dll、悪意のあるユーザーは、あなたと同じインターフェイスを提示する独自のモジュールを作成し、コードを独自の悪意のあるコードでラップし、顧客の「安全な」送信をすべて傍受し、コピーを自分のモジュールに送信できます。サーバ。dll彼らはあなたの顧客のソースコードにアクセスしなくても、単にあなたのものを彼らのものに置き換えるだけでそれを行うことができます.

ただし、 が署名されていて、顧客のコードがそれに対してリンクされている場合TransmitSecret.dll、アセンブリを交換するトリックは機能しません。顧客のコードが を読み込もうとするとTransmitSecret.dll、.NET は変更に気づき、プログラムの起動を停止します。上。

于 2013-09-24T18:49:44.453 に答える