检查许可证的最佳方法

时间:2011-02-17 11:02:58

标签: c++ windows licensing

我们有一个自定义许可证检查方法,非常简单,我们只检查一个注册表项(一个字符串,由另一个基于不同参数的进程设置)并授予许可证或拒绝。

我开始知道,一旦他们知道我们正在寻找哪个regkey,任何人都可以简单地解决这个问题。或者通过在汇编代码中搜索cmp指令。 我只是想知道这个许可证检查问题的更好解决方案。我可能不需要非常复杂的程序或任何此类程序。但如果它应该比现有的好一点。

我在Windows 7中使用C ++ \ VC ++。

谢谢& Rgds,calvin

5 个答案:

答案 0 :(得分:2)

完全防止破解的唯一方法是使用远程用户访问的托管应用程序。 这样,没有有效付费帐户的人就无法使用该应用程序,任何将其帐户凭据交给其他人的人都将支付他们的使用费用。

没有代码(可能存在允许登录的存根除外)被发送到客户端,更不用说存储在那里了,因此客户端无法在没有连接到服务器的情况下运行(希望不会受到损害,但这是一个sysop问题,而不是编码问题。)

您可能采用的任何其他系统基本上都必须依靠许可证背后的法律影响力来阻止人们破解它。

答案 1 :(得分:1)

您可以从特定于硬件的值计算哈希值,并在注册表中检查该值。这样,找到您要查找的值是不够的,还有算法。

这种数学上合理的方法是将计算机专用值(例如MAC地址)转换为素数,将其与您自己的魔术素数相乘并存储产品。

编辑:但请注意,除了非常简单的保护方案之外,通常不值得使用任何保护方案。即使是大公司也在努力解决这个问题。

答案 2 :(得分:1)

您需要以某种方式保护您的代码免受逆向工程;有许多所谓的可执行文件保护程序,我不会在这里命名。无论你计算什么,只需要两条NOP指令就可以将保护检查的流程推向不希望的方向。

当然,你要保护什么样的代码真的很重要;对于解释型语言,几乎不可能保护自己。

啊,对不起,我可以说一个非商业性的:臭名昭着的尤达的PE保护者。

答案 3 :(得分:0)

任何在本地运行的逻辑总是容易被规避。关于根据您的应用程序实际存储许可证,我会编写一个Web服务并运行您自己的服务器。每次启动许可证仍然有效时,让应用程序检查您的服务。

这也为您提供了更大的灵活性,例如,如果付款不清楚,您可以撤销许可。

答案 4 :(得分:0)

您可以使用公钥/私钥加密来完成此操作。拥有本地签名文件而不是包含许可证信息的注册表,并且有一个Web服务器来检查许可证是否有效。这应该给你足够的保护。

可以使用LicenseSpot完成此操作。在网站上有示例代码,但仅限于c#。