java - 将工作应用程序从一台电脑复制到另一台电脑的安全性
问题描述
我创建了 JavaFx 应用程序。现在我想保护它不被复制到其他计算机。更详细地说,我向一位客户出售我的应用程序,安装此应用程序后,我需要保护它从一台计算机复制到其他计算机。我如何可以防止从其他计算机复制它。应用程序是jar格式
解决方案
理论上,你不能。
但是:您可以做一些事情来减少机会。我将从最安全的开始提及它们。
即:远程许可(也就是将许可保存在服务器中)。您的应用程序可以生成一种唯一类型的id,并且无论何时启动,它都会检查此 id 是否在远程服务器的数据库中。(这里的好选择是将 RESTful 服务作为后端。然后一个 HTTP 请求就足够了。)如果远程中不存在此 id,您的程序将终止。
如果客户端没有互联网连接,应该终止它吗?
有一个选项可以处理这个问题,但仍然可以“绕过”。每当它启动(通过互联网连接)时,它都会在本地存储“肯定”答案(文件、注册表或其他东西)。然后,只要客户端未连接到 Internet(远程检查失败),您的程序就会开始在本地搜索“肯定”答案。如果它找到它,它就会开始。
如果客户对应用程序进行逆向工程,找到它存储“肯定”答案的位置,手动创建它,然后将规则添加到他的防火墙以防止您的应用程序与远程通信怎么办?
你告诉我。我能想到的最好的方法是在远程检查失败时检查防火墙规则。
第二个选项:创建第二个 .jar 生成一种“肯定”答案(如上所述)。将此 .jar 运行到您的客户端。然后从他的电脑中删除它。然后你的应用程序会寻找这个“肯定”的答案。如果存在,则应用程序运行。否则,它终止。如果他将应用程序复制到另一台电脑上,它不会运行,因为您没有在那里运行第二个 jar。
如果他对您的应用程序进行逆向工程并找到您存储这个“肯定”答案的位置和方式怎么办?
他将能够复制您的申请,而您永远不会知道。
推荐阅读
- c++ - 括号检查器完美地适用于单个测试用例,但对于所有测试用例一起它会给出分段错误?
- java - RxJava插入&返回Id方法(房间)调试
- ansible - Ansible 子组变量不覆盖父组变量
- mysql - SQL case 语句 - 根据其他 2 个表从第三个中选择值
- postgresql - 将选定的模式从 postgres 数据库克隆到新服务器
- webpack - Webpack/Plugin/Preset 文件不允许导出对象,只有函数
- ios - 为什么 UIStackView 不断折叠标签?
- node.js - 让到期日期触发 MongoDB 中的函数?
- excel - 比较两列 onEdit,如果匹配,则将新添加的颜色着色
- python - 为什么我在给定的 python 代码中不断出错?