我目前正在开发一个商业Java应用程序,我会尽力保护它免受破解。
我有几点想法,我希望在这个领域有更多经验的人可以帮我清除它们。
我使用服务器/客户端许可证系统保护我的软件。
许可证如何运作的简单说明:
服务器/客户端之间的通信是使用安全的SSL REST API进行的。
我的软件使用Proguard进行了混淆/保护。
这种方法是否足够好以防止破解,如果没有,你能提供一些额外的技巧来改善这种方法吗?
非常感谢。
答案 0 :(得分:6)
防止破解的唯一100%证明方法是将整个业务逻辑移至云端。如果应用程序在客户端的计算机上运行,则可能会被破解。唯一的问题是,如果你的软件足够有趣,黑客会花时间使用它。
听起来您已经使用了混淆器,将一些数据移动到云端并按需获取。我会说你已经受到入门级黑客和一些IT专家的保护了#34;我不会花更多的精力在它上面,如果更高级别的黑客"他们想要破解它。无论您使用什么加密,密钥(以及使用的算法)都将存储在您的应用程序的内存中,因此可以获得这些密钥。
现代DRM工具的工作方式是从已发布的二进制文件中剥离代码的重要部分(不仅仅是变量),并根据需要从服务器获取它们。他们试图为仅在特定客户的机器上运行的间隙提供此类代码(例如,通过编译市场上每个不同处理器的代码,确保代码不会在其他模型上运行)因此,收集每个可能硬件的所有缺失部分是不切实际的(或至少需要很长时间)。但是使用Java很难实现。
您应该考虑的另一件事:在每个版本中更改许可算法,并进行频繁更新。这样,真正的客户可以无缝地获得新功能和错误修正,但使用破解版本的人每次都必须搜索新的裂缝或坚持旧版本。最终他们中的一些人可能决定购买软件以避免不便。