Java应用程序是否有安全的解决方案将它们绑定到特定的用户或计算机,例如通过使用MAC地址(不安全,因为可以更改?)或任何其他硬件特定数据?
我们不想创建像 USB 棒 / 加密狗这样的硬件解决方案,但需要检查软件的用户是否被允许使用它。
一般来说,哪个是对抗软件盗版的最佳选择?
总是在线?
服务器检查?
使用硬件数据进行识别?
...
Java应用程序是否有安全的解决方案将它们绑定到特定的用户或计算机,例如通过使用MAC地址(不安全,因为可以更改?)或任何其他硬件特定数据?
我们不想创建像 USB 棒 / 加密狗这样的硬件解决方案,但需要检查软件的用户是否被允许使用它。
一般来说,哪个是对抗软件盗版的最佳选择?
总是在线?
服务器检查?
使用硬件数据进行识别?
...
过去,结合使用本地系统识别和在线检查对我来说很有效;两者或许并不相互排斥。您可以使用以下一种或多种方法获取各种系统相关属性:
System.getProperty("user.name");
System.getProperty("user.home");
System.getProperty("os.arch"); // the operating system architecture
System.getProperty("os.name");
System.getProperty("os.version");
然后可以使用java.security.MessageDigest包对这些详细信息进行散列处理,并将其与服务器上的用户帐户相关联。然后,验证用户和机器就像让您的客户端软件将生成的哈希作为其启动例程的一部分发送到服务器一样简单。
一种流行的趋势是软件在启动时(或定期)使用中央服务器检查许可证的有效性。通过这种方式,您可以撤销被盗用的许可证。可能有许多服务可以为您管理这些许可证,我看到使用了 Esellerate。
同时,您添加到 Java 应用程序的任何保护都可以很容易地被逆向工程或简单地重载,除非您竭尽全力混淆和保护代码。这是一项非常艰巨的任务,结果可能不值得付出努力。
一些公司(例如我工作的公司)除了基本的许可证生成/验证代码外,并没有竭尽全力。信任客户的诚实和仅向有效的许可证持有者提供支持相结合,效果很好。