2014-12-07 56 views
21

我有了1個引用的程序集(TEST.EXE,Test.dll的)到應用數字簽名有道已經引用的程序

我想是時候test.exe運行時,它應顯示發佈者的名稱爲應用程序「TestCompany」。

要做到這一點,我對它進行了數字簽名,並且按照我的要求進行了操作。如果我更改test.exe的一個字節,則發佈者名稱爲「未知」。這很好。

但是,如果我更改test.dll,應用程序將以任何狀況運行,並將發佈者名稱顯示爲「TestCompany」。這對我不好。

所以我在test.dll上加上了強名,並在app.config中加入了<bypassTrustedAppStrongNames enabled="false" />

再次,沒有區別。所以我再次搜索,發現bypassTrustedAppStrongNames只檢查程序集是否具有強名稱。不是驗證。這對我來說並不好。

我真正想要的是保護用戶,而不是我的應用程序。如果用戶運行我的應用程序,並且它從我這裏說,它必須來自我作爲每個單字節。如果應用程序被更改,即使是單個字節,它也必須通知用戶,而不是從我那裏通知。這是什麼數字標誌假設與強名稱一起做,但他們似乎都不是那麼好。或者我錯過了什麼?

我能想到的最後一種可能的方法是手動檢查程序集的強名稱。

PS:目標的.NET Framework 2.0

+0

我想也許你必須用-vf參數運行Sn.exe(強名稱工具),然後測試返回代碼。或者甚至可能捕獲並解析輸出。 – RenniePet 2014-12-07 10:41:13

+0

http://msdn.microsoft.com/en-us/library/cc713694%28v=vs.110%29.aspx有一個註冊表設置可以做你想做的事情。 – RenniePet 2014-12-07 10:46:19

+0

@RenniePet:是的,我可以使用'StrongNameSignatureVerificationEx'進行手動檢查,但我期待着按照它的意圖檢查自己。他們禁用了框架3.5的驗證,以加速應用程序的啓動。但即使停用也是如此。 – xmen 2014-12-07 11:10:17

回答

1

我的大部分重要組件不會被加載在我的項目參考。 我要做的是宣佈互操作接口(通用於所有項目作爲基礎......是的,這對被引用..)然後我使用加載在運行時的所有組件:

Assembly assembly = Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1"); 
Type type = assembly.GetType("MyClass"); 
object instanceOfMyType = Activator.CreateInstance(type); 

我用這個數原因。我有不同的類實現,我必須根據用戶/客戶配置調用。它也似乎是一個很好的選擇,以確保您使用我的公共令牌和版本加載特定程序集。

一個小小的研究後,我發現這些職位:

好,我是看着你的問題後,那種震撼。它引發了我對關注現在引用我的DLL。我不知道這是多麼安全,但它似乎比參考它更安全。

我還沒有在MS文檔中找到任何有關使用Assembly.LoadbypassTrustedAppStrongNames的參考資料。我稍後將運行一些測試,但使用它似乎更安全。

+3

是的我一直在通過互聯網閱讀,這些鏈接是其中之一,強名稱似乎打破了它的用途SHA1。微軟推出了'EnhancedStrongName',它使用SHA256,但是它來自.net 4.5。 – xmen 2014-12-10 09:42:34

相關問題