保护许可证验证

本文关键字:验证 许可证 保护 | 更新日期: 2023-09-27 18:37:11

我已经实现了一个 C# 程序集来验证应用程序的许可证。问题是关于将其运送到客户端,他们可以轻松找到我们用于加密字符串的密钥。

签署

对应用程序进行签名有点痛苦,因为正在使用的多个组件未进行签名和按编译。所以我们必须手动拆卸并使用snk文件再次组装。装配加载是一种连锁反应。我想澄清一下,只有正在加载的即时程序集才需要签名?从这些附属程序集加载的程序集也需要签名?

混淆

社区版并没有真正混淆字符串。 代码基本上是可见的。我应该去专业版吗?

我对此很陌生。请帮忙。

保护许可证验证

我想

指出一个问题,我相信您在尝试保护您的软件时已经意识到了这个问题。由于将运行应用程序的计算机必须能够"看到"您使用的所有代码和数据,因此其他人总会以某种方式对您的应用程序进行逆向工程。用于保护软件的所有密钥和机密都将在随附的数据和程序集中提供...

签署

签名(强命名)用于阻止其他开发人员将关键程序集(许可证验证)替换为他们控制的程序集,这将允许他们绕过您的保护。要由强命名程序集加载的所有程序集本身都必须具有强名称。这样做的原因是,否则其他人可以用实际破坏许可证验证功能的新实现替换其中一个辅助依赖项(链下游的非强名称程序集)。

是的,您必须在链的更下方对所有程序集进行强命名。我从经验中知道,这可能是一种痛苦,因为许多免费库不是作为强命名程序集分发的。在许多情况下,您可以使用 Ilmerge 合并两个 DLL 来解决此问题,然后将生成的组合 dll 强命名。请参阅此处的示例 ilmerge 调用。

混淆

有免费的混淆工具可以正确混淆字符串,否则是的,您必须使用更高级别的最付费混淆工具。我个人喜欢的工具是Eazfuscator,它功能齐全且免费。Eazfuscator除了混淆之外,还支持合并程序集和强命名它们。

许可证验证注释

自己实施许可证验证是一种痛苦和容易出错的问题。我建议您查看其他替代方案,要么根本不进行许可证验证,因为它为您的软件增加了一定程度的维护和复杂性,而实际上可能不会提供任何经济利益。或者看看现成的许可证实现,例如这个小选择(按初始价格的顺序):

  • https://github.com/ayende/rhino-licensing(免费/开源)
  • http://www.simplesoftwarelicensing.com/pricing/hobbyist-edition/(免费)
  • http://www.simplesoftwarelicensing.com/(39 美元起)
  • http://www.ssware.com/cryptolicensing/cryptolicensing_net.htm(149 美元起)
  • http://www.infralution.com/licensing.html(170 美元起)
  • http://ellipter.com/(249 美元起)
  • http://desaware.com/products/licensingsystem/index.aspx(1495美元起)
  • http://www.crypkey.com/products/instant.php(1895 美元起)

这只是可用内容的一小部分,搜索网络将提供许多现成的解决方案。

免责声明:我开发了上面的"简单软件许可"产品,作为Donationcoder新年编程挑战的一部分。