许可软件还没有解决的问题 - 或者至少,这样做安全,没有给用户造成不便,并且没有在大型基础设施上投资也没有解决。
您存储许可证状态的位置/机制通常是无关紧要的 - 注册表不再是安全的文本文件 - 它需要几秒钟的时间才能访问内容,并“隐藏”一些远程回水的注册表并没有太大的帮助。
假设你的软件有某种持久性的东西(数据库文件系统?);您可以使用相同的持久性机制来存储注册状态。
当然,任何您的软件可以读取/写入的内容都可以被试图未经授权访问您的软件的人访问。所以,你可以加密记录;那么你有管理该加密机制的密钥的问题; afaik,目前没有可靠的解决方案。
那么,你可能有一个“许可证服务器”在互联网上;您的软件可能会读取您机器的唯一标识符(MAC address),将其发送到您的许可证服务器,并让服务器返回许可证状态。再说一次,这是非常微不足道的,现在你要求你的用户在线使用你的软件。
如果您的软件对用户具有远程吸引力,黑客将在几天内破解许可密钥保护,并在互联网上发布详细说明。苹果为保护Iphone/Ipad上的软件做出了极大的努力,然而越狱应用却可以解锁它们。
在我看来,除非您的软件价值数千万美元的收入,否则您应该为您的用户尽可能简化生活,并且不要过多担心安全方面 - 使用现成的东西(如@bunting建议),或者解决一个文本文件。
具体来说,我想:
- 检查有效许可证文件的应用程序启动时存在
- 如果许可文件不存在,要求用户输入许可证密钥
- 比较可用您的许可证密钥输入密钥
- 将“有效”文件写入您的应用程序目录中的文件系统;或者,修改现有的配置文件。
这是轻而易举的打破;所以你可以更进一步。首先,Java应用程序易于反编译,攻击者可以轻松读取您的“许可证”常量。你应该使用混淆器来使这个变得困难(虽然不是不可能)。其次,你可以加密你的本地许可证数据;这也会让整个偶然的黑客变得更难。您可以在加密方案中包含一些本地数据,这样黑客就不会仅仅使用有效的许可证密钥(例如,将许可证密钥与机器的MAC地址相乘)重新分发应用程序。
在这两种情况下,您都将许可证“硬连线”到应用程序中;在黑名单中有黑名单发布应用程序许可证密钥的公告板,除了通过用新密钥发布新版本的应用程序之外,您无法做出回应。
让软件“记住”一件事很简单。使它不平凡的黑客是别的... – Mysticial
使用license4j应用程序它将帮助你...检查他们的视频在youtube – 2017-10-04 18:08:03