最好的方法来检查许可证

我们有一个自定义的许可证检查方法,这很简单,我们只是检查一个registry项(一个string,由另一个进程根据不同的参数设置),并授予许可证或拒绝。

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

我使用Windows 7的C + + VC + +。

谢谢,Rgds,calvin

完全防止破解的唯一方法是在远程访问用户的托管应用程序时使用付费。 这样,没有有效的付费账户的人不能使用该应用程序,任何人将自己的账户凭证交给其他人将会为自己的使用付费。

没有代码(除了可能允许登录的存根除外)被发送到客户端,更不用说存储在那里,所以客户端不能连接到你的服务器(这将不会受到威胁,但这是一个系统问题,而不是编码问题)。

你可能采取的任何其他制度将基本上依靠你的执照背后的法律影响力来阻止人们破解它。

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

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

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

您可以从硬件特定的值计算哈希,并在注册表中检查该值。 这样就不足以找到你正在寻找的值,而且算法。

一个数学上合理的方法是将特定于计算机的值(例如MAC地址)转换为质数,然后将其乘以自己的魔素数并存储该产品。

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

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

这也给了你更多的灵活性,例如,如果付款不明确,你可以撤销许可证。

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

这可以通过LicenseSpot完成。 在网站上有示例代码,尽管只在c#中。