2009-05-01 1 views
1

EvidenceパラメータでAssembly.LoadFromオーバーロードを使用して、アセンブリの名前が厳密に指定されていることを確認できますか?私は、アセンブリ名、文化、バージョン、公開鍵トークンを指定できるようにしたい。この情報のいずれかが一致しない場合、アセンブリは読み込まれません。Assembly.LoadFrom - 強力な名前の署名を検証するためのエバイデンドオーバーロードの使用

答えて

0

これを行う別の方法が見つかりました。

var assemblyName = new AssemblyName(<fully qualified type name>); 
assemblyName.CodeBase = <path to assembly> 

Assembly.Load(assemblyName); 
2

あなたはそれをロードした後に議会の公開鍵を取得することができます - それが正常にロードし、公開鍵を持っている場合、それは厳密な名前付きだ:

Assembly assembly = Assembly.LoadFrom (...); 
byte[] pk = assembly.GetName().GetPublicKey(); 

まだよく、アセンブリの公開キーとバージョン情報を確認する前にそれを読み込む:GetPublicKey()がnull以外の値を返し、その後、アセンブリが正常にロード

AssemblyName an = AssemblyName.GetAssemblyName ("myfile.exe"); 
byte[] publicKey = an.GetPublicKey(); 
CultureInfo culture = an.CultureInfo; 
Version version = an.Version; 

場合、それは有効な厳密な名前を持っています。

1

System.Windows.Forms.dllにパッチを当てるための厳密な名前検証を破る方法があります。私がそれを使っているなら、あなたはそれについてできることはあまりありません。私のトリックは完全な信頼を必要とします。

私がしたことは、dllにパッチを当て、dllをパッチ適用し、ngenでそれを展開し、ローダーにパッチを当ててオリジナルの代わりにパッチを適用したngenイメージを取得することでした。私がやったことは、dllをngenedした株を壊すことだった。 (私は実際にこの道をテストし、潜在的に誰かのソフトウェアを壊すことが悪い選択であると判断した)。

私はこれを行うのは良い考えではありません。私はAssembly.Loadからの署名を検証することは、悪い考えであると言います。

+0

おそらく遅延署名していますか?その場合、これは、そのアセンブリに対して厳密名検証(sn -Vr)を無効にしたマシンでのみ機能します。それ以外の場合、何をしていますか? .NETフレームワークアセンブリの秘密鍵が漏洩していますか? –

+0

鍵が漏洩していません。ローダーは、取得したファイルが要求されたファイルであると仮定します。 – Joshua

+0

@Joshuaはあなたのトリックが教育目的のためにどのように機能するかを詳しく説明することができます。 ? –

関連する問題