1

我有一个带有自定义控件、扩展和其他东西的 .NET DLL (C#/VB)。

我希望它只对我可用。有什么方法可以限制对 DLL 的未经授权的访问?

4

7 回答 7

3

好吧,首先不要重新分配程序集。一旦组装在野外,任何人都可以使用它。您可以通过混淆它来使其更难,但“入口点”仍然存在并且可用。

从理论上讲,您可以使用CAS做一些事情,但我不确定这是否可能。

于 2010-02-09T13:08:58.837 回答
1

如果您对程序集进行强命名,请考虑使用PublisherIdentityPermissionAttribute。您可以将此添加到您的 DLL 中,并且只有使用正确的发布者密钥签名的程序集才能调用该方法或类。

这是免费的,并且内置在 .NET 框架中。如果您需要其他功能(例如将 DLL 许可给其他开发人员的能力),请考虑使用专业级别的复制保护工具,例如我们的工具DeployLX Licensing

于 2012-03-12T16:22:40.467 回答
1

这不是完全可能的。如果你想让你的代码运行,它必须是可执行的。您可以放入支票、打包、加密密钥、看门狗、监视器、看守和各种许可方案,但归根结底,如果您的代码有效,它必须以某种方式解锁才能使用。

这就是 DRM 不起作用的原因。你想保护 X,但又想让别人看到它。问题是您不想查看/使用 X 的人和您想要使用 X 的人在某种程度上是同一个人

我厌倦了处理第 3 方许可代码(破坏/取消注册/认为我本应成为的不是合法用户),以至于我成为了 FSF 成员。不值得我花时间绕过别人的限制,也不值得我花时间处理它们。他们的代码并不是那么特别。

于 2010-02-09T20:47:09.543 回答
1

正如 Anton 指出的那样,您最好的选择是打包/加密/混淆 DLL。然后祈祷没有人会经历拆包的所有麻烦。

对此的通常术语只是“包装”。

这就是游戏开发者使用 f.ex Sony 的SecuROM所做的事情。

但是所有的打包程序都有相同的缺点:

  1. 它们可以进行逆向工程,并且加密密钥必须嵌入二进制文件中
  2. 它们通常要花钱,而那些不花钱的(UPX)很容易拆包。
  3. 解包过程可能会引入平台不兼容问题。
  4. 打包的二进制文件往往会吓跑反病毒软件。

使用打包程序的公司通常会发布必须能够在每台可以想到的计算机上运行的二进制文件。如果你真的是这个意思,我想你可以用唯一的密钥加密每个单独的 dll,然后在解密阶段要求它通过互联网访问运行,以获得一些挑战-响应魔法。无论如何都是矫枉过正。

你也可以自己做打包机,但是当我说的时候相信我:你不想去那里;)

总之,想要达到的目标,即使是大玩家也不容易。SecuROM 游戏需要多长时间才能出现在piratebay 上?所以你唯一能做的就是“提高标准”并希望被优秀的逆向工程师忽视。

最后,知道你正在做什么:这对你来说值得吗?假设您将 DLL 解压后交付 - 原样。人们仍然需要对其进行逆向工程才能使用它。谁仍然使用未记录的 3rd-party 库?我只在精神错乱的时候这样做过一两次。

于 2010-02-09T20:32:56.497 回答
1

也许您可以使用许可/复制保护工具来更改您的 dll。在调用者内部,您提供所需的许可证号。

于 2010-02-09T13:21:08.947 回答
0

您必须在 DLL 中添加检查以验证调用者是您。但这带来了其他挑战:

你如何证明你是你的一个DLL。(您可以检查更简单的内容,例如当前用户名,但这可能并不完美)。

您可以要求 exe 文件由您的证书签名。

于 2010-02-09T13:10:59.620 回答
0

您应该检查许可基础架构。我不知道如何实现它,但是您通过创建一个 .licx 文件来使用它,然后我认为构建过程使用 lc.exe 工具来做一些事情来嵌入许可证。

于 2010-02-09T20:24:39.433 回答