小智..
7
我是Cryptolens软件许可平台背后的开发人员之一,并且从14岁起就开始从事许可系统的开发。在此答案中,我根据自己多年的经验提供了一些技巧。
解决此问题的最佳方法是设置一个许可证密钥服务器,应用程序的每个实例都将调用该服务器以验证许可证密钥。
许可证密钥服务器的好处
许可证密钥服务器的优点在于:
您始终可以立即更新或阻止许可证密钥。
每个许可证密钥可以锁定到一定数量的计算机上(这有助于防止用户在线发布许可证密钥供他人使用)。
注意事项
尽管在线验证许可证使您可以更好地控制应用程序的每个实例,但是并不总是存在Internet连接(尤其是针对大型企业时),因此我们需要另一种执行许可证密钥验证的方法。
解决方案是始终使用诸如RSA或ECC之类的公共密钥密码系统对服务器的许可证密钥响应进行签名(如果计划在嵌入式系统上运行,则可能会更好)。您的应用程序应仅具有公共密钥来验证许可证密钥响应。
因此,如果没有互联网连接,则可以改用以前的许可证密钥响应。确保在响应中同时存储日期和机器标识符,并检查日期是否太旧(例如,您允许用户最多30天处于离线状态,等等),并且许可证密钥响应属于正确的设备。
请注意,即使您已连接到Internet,也应始终检查许可证密钥响应证书,以确保自从它离开服务器以来未对其进行更改(即使您的API仍要这样做,也必须这样做)。许可证密钥服务器使用https)
保护秘密算法
大多数.NET应用程序都可以很容易地进行逆向工程(Microsoft提供了一个双汇编程序来获取IL代码,某些商业产品甚至可以检索C#等源代码)。当然,您始终可以混淆代码,但是它永远不是100%安全的。
在大多数情况下,任何软件许可解决方案的目的都是为了帮助诚实的人诚实(即,愿意付款的诚实用户不要在试用期满后忘记付款,等等)。
但是,您可能仍然有一些绝对不希望泄漏给公众的代码(例如,预测股价的算法等)。在这种情况下,唯一的方法是创建一个API端点,应用程序将在每次执行该方法时调用该端点。它需要Internet连接,但可以确保客户端计算机永远不会执行您的密码。
实作
如果您不想自己实现所有功能,建议您看一下本教程(Cryptolens的一部分)