防止他人使用我的dll

我是.net的新手,想知道如何阻止他人使用/引用我编译的库。 我做了一些研究,但没有找到明确的答案。 是authenticode还是强名称还是其他什么? 它有多可靠?

这些库是商业桌面软件的一部分

如何阻止他人使用我编译的库?

我想知道如何防止有人使用我的牙刷。 我找到了解决方案。 我不让他们使用我的牙刷。

如果您不希望别人使用您的软件, 请不要向他们提供您的软件

如果您希望某人能够在不知道实施细节的情况下使用您的代码function ,那么请编写Web服务,将软件放在Web服务器后面,人们可以通过您提供的服务使用您的软件。 他们只看到Web服务器,而不是您的实现细节。

是authenticode还是强名称还是其他什么?

不。您的方案是希望保护自己 ,软件提供商和用户 。 这完全倒退了。 .NET安全系统旨在保护您的用户免受不良软件提供商的侵害。

authenticode和强名称都是系统,软件用户可以获得证据,certificate软件确实是由他们认为由他们提供的人提供的,而不是冒充你的邪恶黑客。

例如,假设我变得邪恶,并向您发送一个新版本的System.DLL,我说这是一个来自Microsoft的软件升级,但实际上是在监视您输入密码并通过电子邮件发送给我。 我可以发送一个名为“System.DLL”的DLL,但我不能发送一个具有Microsoft强名称的DLL,因为我无法创建 Microsoft强名称。 只有微软可以做到这一点,因为微软的签名密钥埋藏在11号楼的深处,并由鲨鱼用激光束或其他东西守卫。 强大的名字保护免受我的伤害 他们不保护微软

同样,强大的名称可以保护您的客户免受冒充 您的 攻击者的侵害。 它们不会保护免受客户的侵害。 你不是受到攻击的人; 他们是!

这些库是商业桌面软件的一部分

商业桌面软件模型预先假定软件提供商信任客户以根据其许可使用该软件。 如果您不信任您的客户,那么您需要一个完全不同的模型,例如将软件保留在Web服务器上,并且只允许通过Web界面进行访问。

我想我得到你所说的:你已经付出了很多努力进入一个对你的应用程序至关重要的库,你不希望别人在他们自己的应用程序中使用该dll的副本基本上偷你的代码,即使他们看不到它。 该框架不是为此而构建的。 您可以使用访问修饰符隐藏某些代码,但公共仍然是公共的。 然而…

将组件放入我知道可以被其他人复制和使用的库中时我常常做的是给特定的类一个必须设置为我的名字©和年份的属性。 没有那个确切的文本,该课程将无法工作(或将工作,但很差)。 由于他们不能改变代码,他们将被迫承认他们偷了它。 你甚至可以在那里输入密码。 当然,这种解决方案并不完美,但它是最简单的。 我不再这样做了,因为我只是不在乎。

编辑:想想看,有些商业组件需要登录才能使用。 通常以您从作者购买的用户名和字节数组的forms。