我想给我的客户端提供一个可执行jar文件,我有一段代码在一段时间后过期。但是如果客户端使用一些反编译器并读取类文件,他可以修改并使代码工作。有什么方法可以阻止这种情况发生。
我可以使用deleteOnExit()或其他一些技术???
答案 0 :(得分:7)
如果您担心某人会破解您的软件,您将需要使用某种客户端/服务器架构,您的客户端只能登录服务器中的网页。
如果有人真的想要,任何代码都可以破解。当然,大多数时候它根本就不值得。
答案 1 :(得分:3)
最佳解决方案是PaaS(平台即服务).. 将您的逻辑作为服务器应用程序放在服务器上,让客户端应用程序通过Web服务或任何其他方式与服务器应用程序通信..这是最好的真正解决方案..
BTW:使用模糊处理无法保护您的代码。
答案 2 :(得分:1)
抱歉,目前正在使用的任何环境都不可能。如果您担心客户窃取您的代码,那么重新评估您与他的关系可能会很好。
另一方面,您可以为他提供软件的门控VNC视图,以便他可以使用它,但您仍然可以控制环境。
答案 3 :(得分:1)
过去,我使用Zelix KlassMaster来进行混淆。它做得非常好,但是,您必须花时间对其进行配置,以使其能够满足您的需求。如果你使用反射,那么你必须确保它不会混淆那些类/方法/属性名称等。其中一个强大的功能是它也会混淆字符串。
所有这一切,最终结果是您的客户仍然会以非常难以理解的格式提供您的代码。但是,如果他真的有时间和精力,他可以对其进行逆向工程。
很多还取决于你想要保护的确切内容。如果您试图保护实际的IP,那么混淆将帮助您。如果您试图保护许可,那么混淆只会使某人更难以找出您的许可模块在哪里以及如何规避它们。在后一种情况下,我建议您使用类似AspectJ之类的东西来编织几个不同类别的许可检查,以使其更难以打破。然而,这也不是防止失败的。
正如其他人已经说过的那样,唯一一个万无一失的系统就是不首先给客户端代码并转换为SAAS(服务作为软件)解决方案。
答案 4 :(得分:0)
如何使用能够从加密存储加载类的修改过的类加载器。因为你没有直接暴露罐子,里面的类可能会有所帮助,但正如所有其他人所说 - 它不会是防弹的。