这是我第一次从事单独的 Java 项目,该项目会通过直接销售产生收入(这意味着我会销售产品而不是第三方平台)。
我对以下问题感到好奇:开发人员如何阻止客户简单地分发他/她的软件?
我意识到总有办法绕过开发人员可以在他们的项目中设置的任何类型的安全措施。但是,看到我的产品将在本地运行(.exe 或 jar 文件),我无法监控我的客户在我销售产品后正在做什么。
有没有办法设置某种“幻觉墙”,没有更高级知识的人无法绕过?
非常感谢任何提示、建议或引用。
最佳答案
我有一个服务器。我的某些应用程序中的某些操作将使用某些状态信息调用服务器。所以我知道谁在使用我的软件。这在契约(Contract)中有明确规定,所以没有 secret 内容。
如果我想限制我的软件,我会执行以下操作:
- 当我的应用程序启动时,它会收集一些系统信息并对它们进行哈希/CRC 校验
- 如果有匹配文件,其内容与系统信息哈希匹配,我解锁应用
- 如果没有这样的文件,或者其中的哈希值不匹配(不同的系统,被操纵等),我将(重新)注册
- 注册完成
- >
- 通过向客户展示哈希,迫使他给我打电话/发电子邮件,或者
- >
- 该应用程序连接到我的服务器,检查注册信息,显示页面,然后根据我收集的一些其他信息强制用户付款或解锁。
- 在服务器端(或手动)我创建一个匹配系统信息哈希键的键
- 该 key 返回到应用程序(互联网或手动输入),应用程序检查新代码是否与其系统信息哈希匹配
- 如果 key 匹配,将 key 写入文件,并解锁应用
2 个缺点:
- java 真的很容易逆向工程:
- >
- 有人可以创建哈希生成器并创建丢失/错误的系统信息哈希文件
- >
- 如果您通过互联网连接,您应该使用 SSL/TLS,因为在其他情况下,有人可以通过反向工程 (telnet) 应用程序需要解锁的答案
- >
- 防止逆向工程或使其变得更加困难的一个好方法是创建纯 .exe/elf 文件。 GraalVM native-image 是可以完成这些壮举的工具之一。 (就代码安全性而言,仅使用 exe 包装器是毫无意义的,但我对用户有好处)
- 每当客户改变他的硬件时,他必须重新注册/重新连接
关于java - 如何制作未经开发人员许可不能转售的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72068087/