2009-05-01 48 views

回答

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(); 

更妙的是,檢查裝配的公鑰和版本信息之前加載它:

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

如果的getpublickey()返回一個非空值,然後組裝成功加載,它有一個有效的強名稱。

1

我有辦法打破修補System.Windows.Forms.dll的強名稱驗證。如果我正在使用它,你可以做的事情就不多了。我的詭計需要完全信任。

我所做的就是修補dll,部署修補過的dll,修改它,然後修補加載程序以獲取修補過的ngen圖像而不是原始圖像。我所能做的就是破壞股票的dll。 (我實際測試過這條路,並決定有可能打破別人的軟件是一個糟糕的選擇。)

我不是說這是個好主意。我說這取決於從Assembly.Load驗證簽名是一個壞主意。

+0

您是否延遲簽名?如果是這樣,這隻會在您禁用該組件的強名稱驗證(sn -Vr)的機器上運行。否則,你在做什麼? .NET框架程序集的私鑰是否泄露? – 2009-05-01 02:53:33