繁体   English   中英

如何加密.jar文件

[英]How to encrypt a .jar file

我正在一个项目中,我们需要加密.jar文件,所以没有人可以访问jar文件中的.class文件....是否有任何java编码可以帮助我加密.jar文件?

即使您加密jar文件,它也必须在JVM能够运行之前解密,因此您需要另一个包含在JVM中解密和加载的类的jar文件。

由于这个第二个jar文件本身不能加密,想要查看类文件的恶意用户可以简单地查看第二个jar文件中的类,然后解密你的超级机密jar文件并访问它。

也许您可以使用混淆器来提高代码的安全性,但它最终会保护(使其更难但不是不可能)您的类文件来自反编译,而不是被使用。

如果混淆不够,你可以考虑将你的jar文件编译为windows的DLL或unix / linux的SO,这将使反编译变得更加困难,但并不总是能够正确地做到这一点,而且它通常是PITA。 GCJ能够以某种方式做到这一点,还有其他商业产品实际上将.class / .jar直接编译为机器代码。

但请注意,放入它的安全性并不重要,因为客户端计算机必须能够执行它,它必须能够读取它,因此无论您的代码将被暴露,您只能制作它更难。

如果你真的有一个如此秘密的算法你不想透露什么,考虑将其转换为Web服务,将其托管在你的服务器上,这样你就不必将实际代码发送到客户端机器和通过检查对其重要部分的访问权限,还可以更好地防止未经授权的应用程序副本。

我假设您知道任何熟练的Java编码器都可以对您使用(或编写)的Java工具进行逆向工程,并仍然可以对应用程序的jar进行解码? 编写读取“加密”代码的自定义类加载器也可以反编译,并且可以编写工具来绕过它。

即使使用模糊处理和字节码修改以及自定义类加载器,java也是可攻击/可反编译的,并且源几乎总是可以进入某种可读状态。

您想要对jar文件进行模糊处理,而不是加密。

在Java中这样做的一个流行选择是ProGuard

不。因为你的程序需要能够运行代码,所以无论如何都是毫无意义的。

您可以对代码进行模糊处理,因此反编译.class文件会导致代码不太可读(无意义的变量/类名等)。

据我所知,标准JVM不支持此功能。 但是你可以做到以下几点。 将您的申请分为两部分。 首先不会加密。 它将是一个简单的加载器,它将使用自定义类加载器实例化其余的。 这个类加载器将Classes作为字节数组,解密并加载它们。

如果你在jar中打包 - >只需将其重命名为jarname.ABCD或任何误导扩展名,甚至取消扩展名,并相应地在你的应用程序中指定jar名称。

如果您不想提供对jar内部类文件的访问,为什么要为您的jar提供应用程序? 感觉你的问题在概念上有点错误......

如果您需要一些自定义加载类的方法,请考虑使用自定义类加载器。

我更喜欢jCrypt 这是一个简单的工具,你可以加密类(和资源)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM