2011-02-17 60 views
3

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

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

我用C++ \ VC++与Windows 7

感谢& RGDS,卡尔文

+0

[防止复制保护规避](http://stackoverflow.com/questions/203229/preventing-copy-protection-circumvention) – tenfour 2011-02-17 12:38:25

+0

可能的重复感谢,您的建议提供了有关我的部分问题的见解。我的问题更多的是更好的方式和良好的做法。 – rplusg 2011-02-17 12:50:54

回答

1

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

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

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

1

你可以从特定硬件的值计算哈希并为您在注册表中的值。这种方式不足以找到您要查找的值,而且算法也是如此。

这样做的数学上合理的方法是将特定于计算机的值(例如MAC地址)转换为质数,并将其与您自己的魔素数相乘并存储该产品。

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

+1

...但要小心人们更换网卡,例如,如果机器的主板在保修期内交换,可能会发生这种情况。 – 2011-02-17 12:22:23

1

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

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

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

0

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

这也给了你更多的灵活性,例如,如果付款没有清除,你可以撤销许可证。

0

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

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