这是我第一次从事一个直接销售收入的独立Java项目(这意味着我将销售产品而不是第三方平台)。
我对以下内容很好奇:开发人员如何阻止客户简单地分发他/她的软件?
我意识到总有办法绕过开发人员在项目中设置的任何类型的安全性。然而,看到我的产品将在本地运行(.exe或jar文件),我没有办法监控我的客户在我销售产品后正在做什么。
有没有办法把某种"幻觉墙";没有更高级知识的人无法绕过?
任何提示、建议或参考都是非常感谢的。
我有一个服务器。我的一些应用程序中的一些操作将调用服务器提供一些状态信息。所以我知道谁在用我的软件。这在合同里写得很清楚,所以没有什么秘密。
如果我想限制我的软件,我可以这样做:
- 当我的应用程序启动时,它收集一些系统信息和哈希/crc他们
- 如果存在匹配文件,其内容与系统信息散列匹配,则解锁应用
- 如果没有这样的文件,或者它里面的哈希值不匹配(不同的系统,操作等),我将(重新)注册
- 注册完成
-
- 通过显示客户端哈希,迫使他打电话/发邮件给我,或
-
- 应用程序连接到我的服务器,检查注册信息,显示页面,然后强制用户支付,或解锁,这取决于我收集的一些其他信息。
在服务器端(或手动)创建一个与系统信息散列密钥匹配的密钥。 - 键返回到应用程序(互联网或手动输入),应用程序检查新代码是否匹配其系统信息哈希
- 如果密钥匹配,将密钥写入文件,并解锁应用
2缺点:
- java真的很容易逆向工程:
-
- 有人可以创建一个哈希生成器并创建缺失/错误的系统信息哈希文件
-
- 如果你通过互联网连接,你应该使用SSL/TLS,因为在其他情况下,有人可以只是逆向工程(telnet)的答案,应用程序需要解锁
-
- 一个防止逆向工程或使其变得更加困难的好方法是创建纯。exe/elf文件。GraalVM本机映像就是能够完成这种壮举的工具之一。(当涉及到代码安全性时,仅使用exe包装器是相当无意义的,但它对用户有好处)
- 每当客户端更改硬件时,他必须重新注册/重新连接
我为我的电脑购买的所有软件都必须通过互联网注册一次许可密钥或具有usb许可人。也许这对你们来说是一些想法。缺点是,为产品注册运行服务器或向客户发送usb许可人。但我想知道是否有其他的解决方案