2

これが状況です。私は DLL A と BAdll を参照しており、B.dll のコードを使用しています。B.dLL は想定どおりの動作をしていないため、デバッグ ステートメントをいくつか追加しようとしています。

ilSpy を使用して B.dll を逆コンパイルし、必要なコードを追加し、新しい B.dll をコンパイルし、古いものを削除して新しいものをドロップします。

現在、A.DLL はこのエラーで失敗します。

System.IO.FileLoadException: Could not load file or assembly 'B, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b089z623fagfd396' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'B, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b089z623fagfd393'

ソース コードも秘密鍵も持っていないので、DLL の公開鍵を古いものと一致させることはできないと思います。そのキーが一致しないため、参照は失敗します。これは設計によるものですか?私がやろうとしていることを私がするのを防ぐために特別に構築された構造ですか. 基本的に、ソースがないアプリケーションをハッキングしていると思います。

とにかく私はこれを行うことができますか?

A.dll を逆コンパイルして再構築することもできると思いますが、実際には相互に参照している DLL が約 200 あります。

4

1 に答える 1

1

私がやろうとしていることを私がするのを防ぐために特別に構築された構造ですか.

はい、アセンブリに厳密な名前を付ける (公開キー トークンを与える) 理由の 1 つは、実行しようとしている正確なプロセスを防ぐためです。

何百もの DLL を再コンパイルする必要がある代わりに、ツールを使用してsnそのキーの検証を無効にすることができるため、理論的には、必要なことは次のとおりです。

sn –Vr *,b089z623fagfd393

また、キーで署名された DLL を探しているすべてのアセンブルは、キーb089z623fagfd393なしで DLL をロードしようとしてもエラーになりません。

テストが完了したら、次のいずれかを実行できます

sn –Vu *,b089z623fagfd393

その単一のキーに対して再度有効にするか、

sn -Vx

以前に設定されたすべての免除に対して再度有効にします。

于 2015-03-23T21:30:35.077 に答える