【问题标题】:How to license my c# application [duplicate]如何许可我的 C# 应用程序 [重复]
【发布时间】:2012-01-18 09:21:42
【问题描述】:

可能重复:
License for C# desktop application

我想在试用几天后锁定我的程序,如果用户购买了许可证,则可以使用该程序几个月。

我不知道如何做到这一点。一个想法是在安装程序时制作一个本地临时密钥,并在几天后将其锁定(这里的问题是用户可以更改他的计算机的日期和时间..该程序的理念是在线使用和离线,所以我无法比较从我的服务器到计算机的日期)。

另一件事是,如何进行许可服务。我可以生成很多序列号,然后当用户付款时,我可以给他一个序列号,每次程序启动时,我都可以检查序列号是否在我的网络服务中。

我的路好吗??有什么建议吗?

【问题讨论】:

  • 第 2 段 - 用于在线和办公室。第 3 段 - 检查序列号是否在我的网络服务中。我在那里看到一个问题......

标签: c# web-services licensing


【解决方案1】:

如果此应用程序是用 C# 编写的,并且您想编写自己的许可功能,则首先需要在部署可执行文件之前对其进行模糊处理。这是为了阻止人们使用反汇编程序阅读您的 CIL 代码(存储在 .exe 中)。

要获得软件许可,您需要选择一种加密方法。对于这种加密,对称方法本质上等同于非对称方法(因为在任何情况下您都必须提供密钥)。可以使用

选择加密方法
public enum EncryptionAlgorithm { Des = 1, Rc2, Rijndael, TripleDes }; 

对于每种方法及其详细信息,请参阅 Wikipedia。 Rijndael 加密算法旨在取代老化的 DES 算法。与 DES 一样,它是一种分组密码。它使用 128 位、192 位或 256 位密钥,是一个不错的选择。在下文中,我将假设您不会将加密密钥存储在代码中(硬编码),而是将其提供在单独的文件中(“产品密钥”);因此,您将提供两个许可证文件,即启用解密的产品密钥和加密的许可证文件。

一旦您选择了一种加密方法,通常会想出一个散列或算法来处理产品密钥/初始化向量 (IV);您获取一个 128 位密钥(例如)并使用某种方法/转换对其进行加扰。然后使用密钥(即为您部署软件的每个用户随机/伪随机生成)来生成 IV。

然后您使用“随机”密钥、IV 和选定的加密方法来加密一些许可证文本(包括许可证日期)。

internal ICryptoTransform GetCryptoServiceProvider(byte[] bK, byte[] iVec){ ... }

要使用您的方法解密文件,您实际上是执行相反的过程。关于许可需要注意的一件事是,您不应该花太多时间担心人们破解软件。使用上述方法使其变得非常困难,但不要花费太多时间来提出一种越来越复杂的方法,因为如果某些(诚然非常有才华的)黑客想要破解您的代码,他很可能会这样做。此外,您必须假设用户不会违法并共享许可证文件!我无法就使用外部公司来运行您的代码许可(我一直自己编写)的经验发表评论,但这可能是一个昂贵的选择。

希望对你有所帮助。

【讨论】:

  • 对于每个方法及其详细信息,请参阅 Wikipedia 顶级建议,考虑到它已被涂黑。
  • @Killercam 我给你的答案 +1 了,因为它比我提供的更好。我很想听听您对这个相关问题的看法:stackoverflow.com/questions/8682525/…。对于桌面应用程序,我很乐意使用第三方许可解决方案,但是我需要跨平台的 WPF SL 和 WP7 许可组件。最好的问候,
  • @AndrewBurnett-Thompson 博士。我已经回复了你的帖子。我希望它会有所帮助。请注意,我已经成功使用了所描述的方法。它是在对如何最好地部署我们自己的应用程序进行了一段时间的广泛研究之后开发的。一切顺利。
  • "(因为无论如何您都必须提供密钥)" 在许可情况下,对称加密绝对不等同于非对称。例如,使用 RSA(非对称)签署许可文件意味着您的软件中仅包含公钥(用于验证签名)。相应的私钥用于生成签名,软件中未包含。这就是签署某些东西的全部意义所在。另一方面,在您的软件中包含对称算法密钥(您必须解密任何内容)会使加密几乎毫无意义。
  • 同意。如您所知,公钥可以为所有人所知,并用于加密消息。使用公钥加密的消息只能使用私钥解密。但是-您如何建议将私钥提供给用户以解密非启用 Web 的应用程序中的许可证文件?你必须提供它,这就是在这种情况下它等同于对称方法的原因。
【解决方案2】:

虽然它在很大程度上取决于您的确切要求,但目标技术(Winforms、WPF、Silverlight 等)我建议使用第三方许可组件,例如 Quick License ManagerLicensing Pro dotNet

虽然推出自己的解决方案会更便宜,但它被破解或规避的可能性要高得多。使用第三方解决方案意味着您有一个外部团队或公司致力于保持许可模式的安全和更可靠。

最好的问候,

【讨论】:

  • 使用第三方解决方案意味着破解者之前已经面临“保护”,并且可以重新利用他们的知识更快地破解您的应用程序:)
  • @snemarch 明智 - 也是要考虑的一点。我想这取决于你自己的解决方案有多好!
  • 我认为部署您自己的解决方案时的关键是“产品密钥”的哈希/转换。提供给代码的产品密钥 -> 一些复杂的哈希/转换 -> 使用转换后的密钥进行解密。即使使用 .NET 进行混淆,对于经验丰富的黑客来说,建立从 CIL 使用的加密/解密算法也可能相对简单。但是,在使用密钥之前使用晦涩的数学哈希/转换来操作密钥是该过程的一个强大部分,并扩展了需要解决/破解的代码区域。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 2011-10-05
  • 1970-01-01
  • 2014-10-22
  • 2011-03-15
  • 1970-01-01
  • 2012-06-29
相关资源
最近更新 更多