2012-01-27 127 views
0

我想给一个可执行的jar文件给我的客户端,我有一段代码在一段时间后过期。但是,如果客户端使用反编译器并读取类文件,他可以修改并使代码正常工作。有什么方法可以阻止这种情况发生。隐藏java代码

我可以使用deleteOnExit()或其他一些技巧吗?

+0

您可以在运行时将jar复制到临时目录并启动另一个JVM,然后从那里删除原始文件。但实际上不是,所以你可以向我们解释你实际需要做什么。 – Viruzzo 2012-01-27 15:00:53

+0

使用[obfuscator](http://en.wikipedia.org/wiki/Obfuscated_code)。 – ikromm 2012-01-27 15:00:48

+0

这会让它更难,但不能保证客户端不能逆向工程代码并破解它。 – Jesper 2012-01-27 15:05:07

回答

1

对不起,目前在任何类型的环境中不可能使用。如果您担心客户窃取您的代码,重新评估您与他的关系可能会很好。

另一方面,你可以为他提供一个门控的VNC视图来显示你的软件,他可以使用它,但是你仍然可以控制环境。

3

对此的最佳解决方案是PaaS(平台即服务).. 将您的逻辑放在服务器上作为server-app,并让client-app通过web服务或任何其他方式与server-app进行通信。是最好的解决方案..

顺便说一句:使用混淆无法保护您的代码。

7

如果你担心有人会破解你的软件,你需要使用某种客户端/服务器架构,客户端只能登录到服务器的网页。

如果有人真的想要也可以破解任何代码。当然,大多数时候它不值得。

1

在过去,我使用Zelix KlassMaster来执行混淆。它做得非常好,但是,您必须花时间对其进行配置,使其能够满足您的需求。如果你使用反射,那么你必须确保它不会混淆这些类/方法/属性名称等。它的一个强大功能是它也会混淆字符串。

所有的说法,最终的结果是,你的客户仍然会有你的代码,alebit在一个非常难以理解的格式。但是,如果他真的有时间和精力,他可以对其进行逆向工程。

很多还取决于你试图保护的是什么。如果您试图保护实际的IP,那么混淆会帮助您解决问题。如果您试图保护许可,那么混淆只会让人们更难以确定您的授权模块在哪里以及如何规避它们。在后一种情况下,我会建议你使用类似AspectJ的东西来编织许多不同类别的许可证检查,以使它更难以破解。然而,这也不是防错的。

正如其他人已经说过的,唯一的傻瓜证明系统是不给客户端的代码,并改为SAAS(服务作为软件)解决方案。

0

如何使用能够从加密存储中加载类的修改过的类加载器呢?因为你不直接暴露jar和它内部的类可能会有所帮助,但是正如所有其他人所说的 - 它不会防弹。