2010-09-17 80 views
4

這個問題似乎已經死了,所以我決定提供賞金。如何保護我客戶的客戶的.net winforms程序集

我最感興趣的是知道如果我在下面的ETA1中的​​場景是可行的並且被使用。如果不是,那麼很好的解釋爲什麼不會是一個好的答案。另一個好的答案將是一個替代方案(但不包括internalsvisibleto屬性)。

最好的答案是,是的,它是可行的,每個人都這樣做,客戶喜歡它! ETA2:我想我已經想到了一個很好的解決方案。我向客戶提供一個可分發版本,其版本與其版本一樣實用,但未經許可且使用屬性隱藏類別和成員。 我可以用編譯器指令在每一個重要的成員上做到這一點,但我想知道是否有一些全局的方法來隱藏一個類的所有成員?


簡化的情景: -
我有一個以某種方式延伸的控制一類,我想賣下的兩個牌照我的課;

(1)標準 - 客戶獲得x個使用我的類的控件,但無法實例化類(其內部)。
(2)開發人員 - 除了可以使用我的課程創建自己的控件外,其他與標準課程相同。

我的問題是,當開發者客戶出售他們的控件時,他們不得不讓我的課程暴露給他們的所有客戶。

---忽略這個 在我的頭腦中,圍繞它的唯一方法是讓開發者以某種方式將我的程序集合到他們的程序中,並且這樣我就可以將構造函數保持在內部。或者,使用內部可見的屬性。 /忽略此---

我敢肯定這裏有人有相同的情況,任何幫助將不勝感激。 ETA1:我在這裏大聲思考,但是,我可以有一個客戶可以添加的允許調用程序集名稱列表。當他們運送他們的產品時,他們客戶的組件將不在列表中,因此他們將無法實例化某些類。 (該列表顯然可以被哈希)。

+0

我不確定這是您尋找的內容,但SecureTeam CLICesure允許您保護您的代碼以及添加許可功能 – TimothyP 2010-10-02 21:39:30

回答

1

我相信你已經想出了唯一真正的解決方案,假設運行時會支持它。只要你的是一個單獨的DLL,如果開發者可以實例化你的對象,那麼其他任何人都可以,無論你試圖將它隱藏在構造函數,工廠等等之後。

不過,我想知道,消費者是否可能無法通過將發貨組件集成到自己的限制中來避開這種限制?

+0

總是有解決方法,比如使用反射,但我想顯示我至少做了一個努力。 – Jules 2010-09-17 20:56:40

0

這是一個艱難的,只是由於.NET的本質。這是在黑暗中拍攝的,但您可以查看諸如CodeVeil之類的產品,該產品可在IL級別提供彙編加密。您的組裝本質上將被加密運輸,並且鑰匙將交給您的客戶。客戶將是唯一能夠解密裝配說明的實體。現在,CodeVeil對其解密密鑰聲明如下:

即使密鑰存儲在不會造成不安全的應用程序中。事實上,密鑰本身並不像數據本身的轉換那麼重要。 CodeVeil還使用許多運行時保護操作來阻止黑客試圖捕獲解密的程序集。此外,CodeVeil使用一個非常特殊的解密系統,它僅解密.NET運行時的足夠信息以執行該特定方法。代碼永遠不會與程序集本身存儲在同一內存中,因此解密後的代碼不能轉儲到磁盤進行分析。

這顯然是一件好事,但這是你必須研究的部分,因爲我不熟悉他們用作解密算法一部分的其他技術。這很酷的事情是,如果它起作用,你的客戶會很開心,他們可以通過他們自己的API暴露你的程序集的一部分,從而使他們的客戶開心。同時,您的代碼不受ILDASM和Reflector等工具的影響。

2

我相信你會在註冊表中的某處存儲許可信息(即標準和開發人員)。在這種情況下,我想更簡單的解決方案是實施LicenseManager。這是大多數.NET組件供應商使用的。

http://msdn.microsoft.com/en-us/library/fe8b1eh9.aspx

希望這有助於!

1

爲什麼不使用許可證密鑰?你的班級讀取許可證密鑰,並根據許可證提供的許可權限,在運行時禁用方法?

許可證密鑰可以在配置文件中定義。