2010-02-09 83 views
1

我有一個.NET DLL(C#/ VB)與自定義控件,擴展和其他東西。保護裝配?

我希望它只適用於我。 有什麼辦法來限制對DLL的未經授權的訪問?

+1

你沒有說明什麼語言? – t0mm13b 2010-02-09 13:06:59

+2

@tommie我想這是.NET – 2010-02-09 13:10:22

+0

@Anton:不夠公平......但擺振應該補充一個標籤來表示什麼語言我們猜測,而不是他的意思是在C/C++ .NET或資源DLL ++? – t0mm13b 2010-02-09 13:12:31

回答

1

你最好的選擇是按照Anton的指示打包/加密/混淆DLL。然後祈禱沒有人會經歷解開它的所有麻煩。

這個通常的術語只是「包裝」。

這是遊戲開發者用f.ex索尼的SecuROM做的事情。

但所有的包裝程序具有相同的缺點:

  1. 它們可以反向工程和加密密鑰必須嵌入二進制
  2. 他們通常需要錢,而那些不這樣做( UPX)很容易解包。
  3. 平臺不兼容性問題可以通過解包過程引入。
  4. 打包的二進制文件往往會讓反病毒感染。

使用封隔器的公司通常會發布必須能夠在每臺可以運行的計算機上運行的二進制文件。如果你是真的想要它,我想你可以加密每一個唯一的密鑰隨附的DLL,然後要求它在互聯網訪問中運行,以解密階段的一些挑戰 - 反應魔術。無論如何都是過度殺傷。

你也可以讓自己的包裝,但相信我,當我說:你不想去那裏;)

總之,你想要什麼並不簡單,即使是大牌球星來實現。 SecuROM遊戲需要多長時間才能出現在piratebay上?所以你唯一能做的就是「提高標準」,並希望不被優秀的反向工程師注意到。

最後,知道你要自己成什麼:會不會是值得的嗎?比方說,您將DLL解壓縮 - 就這樣。人們仍然需要對其進行逆向工程才能使用它。誰使用無證第三方庫?在瘋狂的時刻我只做過一次或兩次。

+0

我不在乎,它是一個私人程序,必須在10-15臺機器上運行。我想了解更多關於加密和訪問加密的DLL的信息。 – Shimmy 2010-02-11 22:20:32

3

那麼,首先不要重新分配程序集。只要裝配在野外,任何人都可以使用它。你可以通過obfuscating使它更難,但「入口點」仍然存在並且可用。

從理論上講,你可以用CAS做點什麼,但我不確定這是否可能。

+0

這不是在野外,我正在尋找一種方法來限制它到達那裏...... – Shimmy 2010-02-09 13:16:01

+1

CAS不會保護你完全信任的人。 CAS不打算強制執行組件許可,因此不能很好地執行它。 – erikkallen 2010-02-09 20:21:55

0

您必須在DLL中添加檢查以驗證調用者是您。但是,這引發了其他挑戰:

你如何證明你是一個DLL。 (你可以檢查一些簡單的東西,比如當前的用戶名,但這可能不完美)。

您可能會要求exe文件由您的證書籤名。

+0

如何創建這些'支票'? 我不介意改變組件具有授權的GUID等 – Shimmy 2010-02-09 13:15:28

+0

如果(Environment.UserName =「MuUserName」!) 拋出新的異常(「此功能是不適合你」)的內部列表的源代碼; 證書更復雜,不是那麼容易找到 – Arve 2010-02-09 13:41:47

+0

代碼示例中,我想我可以證明我是我,因爲我會用我自己的代碼,這個DLL,問題是我如何識別DLL的調用者。 – Shimmy 2010-02-11 22:17:46

1

也許你可以使用授權/複製保護工具來改變你的dll。並且在呼叫者內部,您提供了所需的許可證號碼。

+0

問題是如何識別DLL的調用者,這可能嗎? – Shimmy 2010-02-11 22:14:49

+0

你可以使用Assembly.GetCallingAssembly來檢查調用程序集 – 2010-02-12 00:56:36

0

您應該查看許可基礎設施。我不知道如何實現它,但是通過創建.licx文件來使用它,然後,我認爲構建過程使用lc.exe工具來執行某些操作來嵌入許可證。

1

這不是完全可能的。如果你想讓你的代碼運行,它必須是可執行的。您可以輸入支票,打包,加密密鑰,看門狗,監視器,管理員和各種許可方案,但如果您的代碼工作,必須以某種方式解鎖以便可以使用。

這就是爲什麼DRM不起作用。你想保護X,但你想讓其他人查看它。問題是你不想查看/使用X的人,並且你想要使用X的人在某個級別上是同一個人

我有這麼厭倦了處理第三方授權碼(破/註銷/思考我是不是一個合法的用戶時,我應該是),我成了一個FSF成員。我不值得花時間去解決別人的限制,我不值得花時間來處理他們。他們的代碼並不是那麼特別。

1

如果你強命名程序集,請考慮使用PublisherIdentityPermissionAttribute。您可以將其添加到您的DLL中,只有使用正確的發佈者密鑰簽名的程序集才能夠調用該方法或類。

這是免費的,並內置到.NET框架中。如果您需要其他功能(例如將DLL許可給其他開發人員的功能),請考慮使用專業級別的版權保護工具,例如我們的工具DeployLX Licensing

+0

但它可以反編譯?如果是這樣,我更喜歡混淆選項。 – Shimmy 2012-03-12 17:48:00

+1

.NET中的所有不受保護的內容都可以反編譯。它是平臺的一部分。如果你想讓你的代碼防篡改,你需要的不僅僅是混淆。像DeployLX CodeVeil(http://codeveil.com)這樣的工具將使用一個自我依賴的加密密鑰,該加密密鑰用來自另一個的代碼加密該程序集的一部分。任何修改都會破壞加密密鑰,從而破壞程序集。 – 2012-03-12 17:50:56

+0

有趣。謝謝! – Shimmy 2012-03-12 17:51:56