2008-09-26 25 views
5

我寫了一個裝配,我不希望其他人能夠使用。我的程序集使用強名稱密鑰文件進行簽名,但是如何保護代碼以便只有使用同一個密鑰簽名的其他程序集才能調用此程序集中的成員?確保裝配不會被第三方使用

+0

可能重複的[如何防止他人使用我的.Net程序集?](http://stackoverflow.com/questions/96624/how-to-prevent-others-from-using-my-net-assembly) – Manishearth 2013-11-16 21:07:07

回答

12

有幾個選項,沒有很有效的,因爲他們只是將事情一點點困難,但不會阻止一個堅定的用戶解決任何限制:

在您的入口點中的每一個,你可以調用Assembly.GetCallingAssembly()並將結果與​​允許調用到庫中的程序集列表進行比較,否則會拋出異常。

您可以使用像ilmerge這樣的工具將您的程序集合併到主應用程序中,並將所有內部標記爲私有。與混淆器相結合,使結果稍微得到更好的保護。

但是,保護程序集與保護攻擊者實際訪問攻擊者的計算機一樣穩定:一旦授予了物理訪問權限,您可以做的很少,以保護內容。

0

聽起來像一個不可能的問題。你不能相信你的環境。這是一個基本的計算原理,也是公鑰/私鑰加密的原因。

3

您需要添加StrongNameIdentityPermissionAttributeattributes要求安全

[assembly:StrongNameIdentityPermissionAttribute(SecurityAction.RequestMinimum, 
PublicKey="00240000048000009400000006020000002400005253413100040000010001005" + 
"38a4a19382e9429cf516dcf1399facdccca092a06442efaf9ecaca33457be26ee0073c6bde5" + 
"1fe0873666a62459581669b510ae1e84bef6bcb1aff7957237279d8b7e0e25b71ad39df3684" + 
"5b7db60382c8eb73f289823578d33c09e48d0d2f90ed4541e1438008142ef714bfe604c41a4" + 
"957a4f6e6ab36b9715ec57625904c6")] 

看到這個msdn page更多信息

或做在代碼中看到this example

2

我建議你使用LicenseProvider屬性來確保使用到您的程序集。有關確切用法的更多信息可用here on MSDN

1

不確定這是否是最佳選擇,但是可以在程序集內部製作所有「公共」類,然後使用[InternalsVisibleTo]程序集級屬性顯式指定您的其他簽名程序集。

[assembly: InternalsVisibleTo('MyAssembly,Version=1.0.0.1, Culture=neutral,PublicKeyToken=..."); 

Here是屬性上的MSDN文檔。

+0

平凡繞過反思。 – AviD 2008-09-26 13:57:52