2011-02-19 159 views
1

我想阻止程序集從另一個應用程序加載。所以它只能從我的應用程序加載。防止在c中加載程序集#

Rigth現在我正在使用Assambly.LoadFrom加載程序集。

回答

1

您可以嘗試在「受保護」程序集中的某個位置驗證入口程序集(Assembly.GetEntryAssembly)。

+0

謝謝,這是最簡單的方法。這是工作。 – Gabriel

1

您可以在程序集中使用InternalsVisibleToAttribute,並將應用程序集指定爲「朋友」。這將阻止使用類型的其他程序集,只要它們被標記爲internal,但將允許您的應用程序仍使用這些類型。

從MSDN:

通常,類型和與 內部範圍(在C#)和朋友 範圍(在Visual Basic)成員都是可見 僅在組件,其中,它們被定義 。 InternalsVisibleToAttribute屬性 使它們對指定程序集中的類型 也可見。

該屬性應用於組裝級別的 。這意味着它可以包含在 源代碼文件的開頭,也可以是 ,包含在 Visual Studio項目的AssemblyInfo文件中。您可以使用 屬性指定可訪問當前程序集的內部類型和 成員的單個程序集 。若要 使組件的內部類型和 成員對其他 組件可見,則必須爲每個組件包含一個 單獨的InternalsVisibleToAttribute 屬性。

不,這不會阻止任何人裝載您的裝配,它只是使用內部類型的組件(至少在沒有一些重大的努力中,到底誰能只是拆卸阻止他們你的代碼並以這種方式使用它)。

+0

和僅使用內部類,可能在某一時刻 – Snowbear

+1

應該強調的是,這僅梳妝打扮很隨意濫用是困難的。 –

+1

@Marc:同意 - 只要你的代碼/程序集在用戶手中,就沒有安全措施,如果有人願意付出足夠的努力打破它(Schneier會批准),那麼這個安全措施將永遠持續下去。 – BrokenGlass

1

不能阻止人們使用技術方法使用您的DLL。您可以嘗試使其更加困難,但足夠熟練的用戶將能夠修改程序集,以便他們可以使用它。

您可以嘗試合法的方法。您可以在許可協議中包含一條禁止用戶在其他應用程序中使用您的程序集的條款。但它不會阻止每個人。

3

最終,沒有。這聽起來像你正在部署一個DLL,但你想保留它的使用方式的唯一控制。這只是一場軍備競賽;最終如果有人真的,真的想(AB)使用它,他們可以。即使這意味着需要對您添加的任何預防性代碼進行反彙編,消除混淆和解除武裝。

阻止的唯一方法:不要給它們。考慮爲某些功能使用Web服務。然後他們沒有組裝。

0

混淆它並保留文檔的祕密。還包括關鍵在: http://www.codeguru.com/columns/experts/article.php/c4643

+0

組件的SN在組件中可見。它只是減輕了程序集的篡改(例如添加了「源代碼信任」) - 它不控制對內部解析和加載檢查之外的程序集的訪問。我給了一個+1,因爲有工具(不是SN)來加密一個程序集並在運行時/加載時對它進行解密,我相信如果它更多地探索這條路徑,這個問題會變得更好。但是,它仍然存在問題:如果程序X可以訪問它,那麼程序Y也可以 - 例如它被黑客檢查如何加載組件:-) – 2011-02-19 19:16:06