我寫了一個裝配,我不希望其他人能夠使用。我的程序集使用強名稱密鑰文件進行簽名,但是如何保護代碼以便只有使用同一個密鑰簽名的其他程序集才能調用此程序集中的成員?確保裝配不會被第三方使用
5
A
回答
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
1
起初我以爲你可以讓你的會員/班級在你簽名的程序集中保密,並將程序集InternalsVisibleTo attribute應用到你的其他程序集中。我猜想,反射會讓你通過這一切。
也許StrongNameIdentityPermission是你在找什麼。
相關問題
- 1. 使用Sonar監控第三方裝配使用情況
- 2. 如何確保從第三方
- 3. 使用Maven安裝第三方Jar
- 4. 會話被使用第三方DLL對PDF發佈
- 5. 方法不被稱爲第三次
- 6. 如何確保我的PHP應用程序不會被分配?
- 7. 包裝第三方DLL
- 8. 第三方jar的Maven導出不會與mvn安裝導出
- 9. 如何在android中使用第三方庫而不使用第三方庫
- 10. 如何使用第三方DLL不安裝
- 11. PowerShell使用第三方模塊而不安裝它
- 12. 在第三方服務器上保存第三方圖像
- 13. 安裝Firefox擴展使用第三方的安裝
- 14. 不使用第三方網關付款
- 15. 如果私鑰被盜,我的手機應用會使用第三方API嗎?
- 16. 使用第三方SDK CLASSE
- 17. 使用第三方RSS源
- 18. 使用第三方SMTP
- 19. 使用第三方庫
- 20. Codeigniter使用第三方類
- 21. 使用適配器與代理使用第三方庫
- 22. 由第三方代碼被損壞保護導入模塊
- 23. 第三表不會創建
- 24. 我們如何確保第三方庫不會在iOS應用中發送用戶數據?
- 25. 如果第三方Cookie被阻止,是否可以'假裝'一個網站是第三方來測試功能?
- 26. 將@Service自動裝配到第三方庫中的問題
- 27. 確保從第三方網站返回querystrings
- 28. iOS第三方框架確保沒有網絡連接
- 29. 南部不爲第三方安裝應用程序創建表
- 30. 在angular2中包裝第三方組件
可能重複的[如何防止他人使用我的.Net程序集?](http://stackoverflow.com/questions/96624/how-to-prevent-others-from-using-my-net-assembly) – Manishearth 2013-11-16 21:07:07