java - 如何为我的 Java 软件创建许可证?

标签 java security licensing registry

关闭。这个问题需要details or clarity .它目前不接受答案。












想改善这个问题吗?通过 editing this post 添加详细信息并澄清问题.

6年前关闭。




Improve this question




我有一个非常大的问题。那就是“如何为我的软件创建许可证”。

好的,认为这是我的许可证 key - 12345YW

当用户输入此许可证 key 时,该软件应允许他使用该软件。好的,一旦用户输入许可证 key ,我的软件必须记住他输入了有效 key ,对吗?(因为从下次开始,它不必提示许可证对话框)我的问题是,我怎样才能使我的软件要记住用户已经输入的许可证?在基于 Windows 的应用程序中,大多数应用程序所做的是在 Windows 注册表中输入一个条目。我可以这样做吗? (那么 Ubuntu 和 Mac 呢?)

我想写一个 .txt 文件,以便 m 软件可以读取它并查找是否输入了许可证。然而,这是我能想到的最不安全的系统。

那么,如果我输入了上面的许可证 key ,我怎样才能让我的软件记住它呢?如果您也能给我一个代码示例,我真的很高兴(即:我不知道如何编辑注册表,如果是 Windows 注册表等)。请帮我...

最佳答案

许可软件还不是一个解决的问题 - 或者至少,安全地这样做,不会给用户带来不便,并且没有投资于主要基础设施也没有解决。

您存储许可证状态的位置/机制大多无关紧要 - 注册表并不比文本文件更安全 - 访问内容需要几秒钟的时间,并且“隐藏”注册表的某些远程死水中的条目不会帮不了什么忙。

据推测,您的软件具有某种持久性(数据库?文件系统?);您可以使用相同的持久性机制来存储注册状态。

当然,您的软件可以读/写的任何内容都可以被试图未经授权访问您的软件的人访问。所以,你可以加密记录;那么你就有了管理该加密机制的 key 的问题; afaik,目前没有可靠的解决方案。

那么,你可能在互联网上有一个“许可服务器”;您的软件可能会读取您机器的唯一标识符 (MAC address例如),将其发送到您的许可证服务器,并让服务器返回许可证状态。同样,这很容易绕过,现在您要求您的用户在线使用您的软件。

如果您的软件对用户具有远程吸引力,黑客会在几天内破解许可证 key 保护,并在互联网上发布详细说明。 Apple 不遗余力地保护 Iphone/Ipad 上的软件,但越狱应用程序将它们解锁。

在我看来,除非你的软件值(value)数千万美元的收入,否则你应该让用户的生活尽可能简单,不要太担心安全方面 - 使用现成的东西(如@bunting 推荐) ,或者选择一个文本文件。

具体来说,我会:

  • 在应用程序启动时检查是否存在有效的许可证文件
  • 如果许可证文件不存在,请要求用户输入许可证 key
  • 将该 key 与您的许可证 key 进行比较
  • 将“有效”文件写入应用程序目录中的文件系统;或者,修改现有的配置文件。

  • 这很容易破解;所以你可以更进一步。

    首先,Java 应用程序很容易反编译,攻击者可以轻松读取您的“许可”常量。您应该使用混淆器来使这变得困难(尽管并非不可能)。

    其次,您可以加密本地许可证数据;这也会让完全不经意的黑客更难。您可以在加密方案中包含一些本地数据,这样黑客就不能仅使用有效的许可证 key 重新分发您的应用程序(例如,通过将许可证 key 乘以机器的 MAC 地址)。

    在这两种情况下,您都将许可证“硬连线”到应用程序中;有一些公告板,黑客可以在其中发布应用程序的许可证 key ,除了使用新 key 发布新版本的应用程序之外,您将无法做出回应。

    关于java - 如何为我的 Java 软件创建许可证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10548510/

    相关文章:

    java - 如何处理 "AES/GCM/NoPadding"的 IV 和身份验证标签?

    java - Android WebView 未加载 Instagram 授权

    java - sling 如何使用 osgi 包

    jakarta-ee - Java EE 客户端-服务器架构中的安全性

    json - 如何安全地使用用户提供的 JSON 文本?

    licensing - EULA 和许可证之间的区别

    java - 许可管理器工具开发?

    c++ - 简单的软件许可证 key 服务器建议?

    java - 如何在 Struts 2 optgroup 中显示 Map 值的元素(对象列表)?

    java - 如何使 AnchorPane 在另一个 AnchorPane 内圆角