回答
您可以嘗試在「受保護」程序集中的某個位置驗證入口程序集(Assembly.GetEntryAssembly
)。
您可以在程序集中使用InternalsVisibleToAttribute
,並將應用程序集指定爲「朋友」。這將阻止使用類型的其他程序集,只要它們被標記爲internal
,但將允許您的應用程序仍使用這些類型。
從MSDN:
通常,類型和與 內部範圍(在C#)和朋友 範圍(在Visual Basic)成員都是可見 僅在組件,其中,它們被定義 。 InternalsVisibleToAttribute屬性 使它們對指定程序集中的類型 也可見。
該屬性應用於組裝級別的 。這意味着它可以包含在 源代碼文件的開頭,也可以是 ,包含在 Visual Studio項目的AssemblyInfo文件中。您可以使用 屬性指定可訪問當前程序集的內部類型和 成員的單個程序集 。若要 使組件的內部類型和 成員對其他 組件可見,則必須爲每個組件包含一個 單獨的InternalsVisibleToAttribute 屬性。
不,這不會阻止任何人裝載您的裝配,它只是使用內部類型的組件(至少在沒有一些重大的努力中,到底誰能只是拆卸阻止他們你的代碼並以這種方式使用它)。
和僅使用內部類,可能在某一時刻 – Snowbear
應該強調的是,這僅梳妝打扮很隨意濫用是困難的。 –
@Marc:同意 - 只要你的代碼/程序集在用戶手中,就沒有安全措施,如果有人願意付出足夠的努力打破它(Schneier會批准),那麼這個安全措施將永遠持續下去。 – BrokenGlass
不能阻止人們使用技術方法使用您的DLL。您可以嘗試使其更加困難,但足夠熟練的用戶將能夠修改程序集,以便他們可以使用它。
您可以嘗試合法的方法。您可以在許可協議中包含一條禁止用戶在其他應用程序中使用您的程序集的條款。但它不會阻止每個人。
最終,沒有。這聽起來像你正在部署一個DLL,但你想保留它的使用方式的唯一控制。這只是一場軍備競賽;最終如果有人真的,真的想(AB)使用它,他們可以。即使這意味着需要對您添加的任何預防性代碼進行反彙編,消除混淆和解除武裝。
阻止的唯一方法:不要給它們。考慮爲某些功能使用Web服務。然後他們沒有組裝。
混淆它並保留文檔的祕密。還包括關鍵在: http://www.codeguru.com/columns/experts/article.php/c4643
組件的SN在組件中可見。它只是減輕了程序集的篡改(例如添加了「源代碼信任」) - 它不控制對內部解析和加載檢查之外的程序集的訪問。我給了一個+1,因爲有工具(不是SN)來加密一個程序集並在運行時/加載時對它進行解密,我相信如果它更多地探索這條路徑,這個問題會變得更好。但是,它仍然存在問題:如果程序X可以訪問它,那麼程序Y也可以 - 例如它被黑客檢查如何加載組件:-) – 2011-02-19 19:16:06
- 1. 防止OpenGL.framework加載在Cocoa程序
- 2. 防止C程序
- 3. 如何防止程序加載兩次?
- 4. 如何防止EF4動態加載所有程序集
- 5. C#.NET安全性如何防止程序加載
- 6. 防止爲某些應用程序加載C#dll
- 7. 如何防止.NET應用程序從GAC加載/引用程序集?
- 8. SQL Server停止加載程序集
- 9. 如何防止在Windows中加載多個程序?
- 10. 防止在Shiny中執行觀察應用程序加載
- 11. 如何從c#加載C++程序集?
- 12. 程序集在C#應用程序中加載的地方?
- 13. 防止加載MicrosoftAjaxWebForms.debug.js
- 14. 正在加載程序集
- 15. C#動態加載程序集
- 16. C#:如何從GAC加載程序集?
- 17. 未能加載程序集C#
- 18. 防止在rails 3.2中加載資源
- 19. 防止在Internet Explorer中加載Angular 2
- 20. 防止在JavaScript中加載頁面?
- 21. 防止在圖庫中加載圖像
- 22. 防止圖像加載在html中
- 23. 防止在Cocoa WebView中加載資源
- 24. 在C++ Builder應用程序中動態加載C#.NET程序集
- 25. 最簡單的方法來防止有人加載我的託管程序集?
- 26. 程序集加載順序
- 27. 在.NET Core中加載程序集
- 28. 在ASP.NET中從Bin加載程序集
- 29. 如何在app.config中加載程序集?
- 30. 在appdomain中加載程序集
謝謝,這是最簡單的方法。這是工作。 – Gabriel