假设您确实想防止许可证滥用,有更好的方法可以做到这一点。“电话回家”方法很容易自己动手,但正如您所注意到的那样,它充满了漏洞。
免责声明:我在一家生产商业工具来解决这些许可证管理和版权保护问题的公司工作。还有其他类似的产品可从各种供应商处获得。
这与考虑如何为您的应用程序进行设置没有什么不同。选择是自己推出或购买现有的第 3 方工具集。乍一看,自己动手做看起来更便宜,但这可能只是因为你还没有真正发现创建健壮可靠的东西的所有真正要求。第三方工具供应商需要为其产品收费,但他们花了数年时间发现特定问题集的所有问题并解决了问题。这样您就可以省去工作,让您可以自由地专注于您的应用程序可以增加价值的地方。
不同之处在于,如果您设置错误,您的用户会被激怒;如果您获得错误的版权保护,您的产品将被盗版。
无论如何,将许可证验证检查减少到二进制“非此即彼”条件是非常容易破解的——通过网络进行检查使其容易 10 倍(记录播放攻击)。现代方法对可执行文件进行加密,并且许可证包含在解密它的密钥中(这是一种过度简化,因为实际的方法包括更多的复杂性,使其几乎不可能绕过)。只有拥有有效的许可证才能在程序加载和运行时解密可执行文件。
如果您想按照您描述的方式进行操作,请考虑以下事项:让应用程序使用可预测的、不断变化的值(例如从随机数表中查找加上一些外部值(如时间))来创建某种散列. 让服务器实现相同的代码。服务器将哈希发送到应用程序,应用程序将其与自己的哈希进行比较。如果它们匹配,则允许该应用程序运行。如果他们不这样做,它就会出错。由于哈希在每次启动尝试时都不同,因此通过网络记录它不会允许用户在下次尝试启动时让它运行。