我有一个非常大的问题。 这就是“如何为我的软件创建许可证”。
OK,觉得这是我的许可证密钥 - 12345YW
当用户进入这个许可证密钥,软件应该允许他使用该软件。 好吧,一旦用户输入许可证密钥,我的软件必须记住,他已经进入了有效的密钥,对吧?(因为从开始下一次,它没有提示牌对话框)我的问题是,怎样才能使我的软件记住用户已经进入许可? 在基于Windows的应用程序,大多数他们的做的就是进入到Windows注册表中的条目。 我可以这样做? (那么关于Ubuntu和Mac吗?)
我觉得写一个.txt文件SO 3 M软件可以读取它,找到许可证是否进入或没有的。 然而,这是最secureless系统,我能想到的。
所以,如果我输入上面的许可密钥,我怎样才能让我的软件,记住了吗? 我真的很高兴,如果你可以给我一个代码示例太(即:我不知道如何编辑注册表,在windows的注册表等的情况下)。 请帮我...
许可软件还没有一个解决的问题 - 或者至少,这样做安全,没有不方便用户,并没有在重大基础设施的投资没有得到解决。
由您存储许可证状态的位置/机理主要是无关紧要 - 注册表只不过是一个文本文件更安全的 - 它需要几秒钟,以获得对内容的访问,而“隐藏”在注册表中没有按一些偏远回水入口“T做很多工作来帮助。
据推测,您的软件有某种持久性的东西去(数据库文件系统?); 您可以使用相同的持久性机制来存储注册状态。
当然,任何软件可以读/写可以通过人们试图让您的软件未经授权的访问访问。 所以,你可以加密的记录; 那么你有管理该加密机制的关键问题; 据我所知,有这种不可靠的解决方案现在。
所以,那么你可能在互联网上的“许可证服务器”; 您的软件可能阅读您的设备唯一标识符(MAC地址的实例),将其发送到您的许可证服务器,让服务器返回许可证状态。 再次,这是非常容易的规避,现在你需要你的用户在线使用软件。
如果你的软件是用户远程吸引力,黑客将打破以天为单位的许可证密钥保护,并在互联网上发布的详细说明。 苹果去非凡的长度,以保护在iPhone / iPad的软件,然而越狱应用程序解锁。
在我看来,除非你的软件是值得的收入数千万美元,你应该让生活尽可能容易为你的用户,而不用担心安全方面的太多了 - 使用一些现成的(比如@bunting建议) ,或满足于一个文本文件。
具体来说,我将:
- 检查有效许可证文件的应用程序启动时存在
- 如果许可文件不存在,要求用户输入许可证密钥
- 比较该密钥与您的许可证密钥
- 写一个“有效”的文件到文件系统,在您的应用程序目录; 可替换地,修改现有的配置文件。
这是十分容易折断; 所以你可以走一步。
首先,Java应用程序很容易被反编译,并且攻击者可以轻松地阅读你的“许可证”不变。 你应该使用混淆,使这个困难(虽然不是不可能)。
其次,你可以加密你的本地许可证数据; 这也将使它更难了完全的休闲黑客。 您可能包括加密方案有些地方数据,这样黑客可以不只是重新分配了工作许可密钥应用程序(例如,通过乘以本机的MAC地址的许可证密钥)。
在这两种情况下,你是“硬连接”许可证到应用程序; 有布告栏,其中黑客发布的许可证密钥应用程序,你就不能比issueing应用程序的新版本使用新的密钥回应其他。
我很惊讶,一个可能被忽视。 以保护从一个不可信赖的客户数据最简单的方法是不要让客户端拥有它。 几个应用程序架构允许这样的:一个Web应用程序,一个桌面客户端RPC'ing到远程服务器,或高性能薄客户端连接到虚拟桌面的远程服务器上。 Web应用程序已经流行,由于其安装,数据备份和维护的区域优势。
因此,而不是试图通过使强制执行一个邪恶的客户对公司的安全策略软件获得的荣誉基本的计算机科学博士...
(可能性极小)
...你只需把信任的服务器上的知识产权和客户端只是有用户界面(和非机密逻辑)。 这种策略有它自己的疑难杂症的。 它的跟踪记录方式比客户端拷贝保护更好,虽然。
注意:好处是,你得到的收入为“管理”为您的客户软件络绎不绝。
好像你正在试图建立授权到您的软件。 你有没有考虑使用这个库,而不是做手工? 也许看看真实许可 ,它应该做你所需要的。