我正在一个需要加密.jar文件的项目中,所以没有人可以访问jar文件中的.class文件....是否有任何java编码可以帮助我加密.jar文件?
答案 0 :(得分:15)
即使您加密jar文件,它也必须在JVM能够运行之前解密,因此您需要另一个包含在JVM中解密和加载的类的jar文件。
由于第二个jar文件本身不能加密,想要查看类文件的恶意用户可以只查看第二个jar文件中的类,然后解密你的超级机密jar文件并访问它。 / p>
也许您可以使用混淆器来提高代码的安全性,但它最终会保护(使其更难但不是不可能)您的类文件来自反编译,而不是被使用。
如果混淆是不够的,你可以考虑将你的jar文件编译为windows的DLL或者unix / linux的SO,这会使反编译变得更加困难,但是并不总是可以正确地做到这一点,而且通常一个PITA。 GCJ能够以某种方式做到这一点,还有其他商业产品实际上将.class / .jar直接编译为机器代码。
但是请注意,放入它的安全性并不重要,因为客户端计算机必须能够执行它,它必须能够读取它,所以无论你的代码是什么,你都可以只会让它变得更难。
如果你真的有一个如此秘密的算法你不想透露什么,考虑将其转换为Web服务,将其托管在你的服务器上,这样你就不必将实际代码发送到客户端计算机,还可以通过检查对其重要部分的访问来更好地防止未经授权的应用程序副本。
答案 1 :(得分:3)
我假设您知道任何熟练的java编码器都可以对您使用(或编写)的Java工具进行逆向工程,并仍然可以对应用程序的jar进行解码?编写读取“加密”代码的自定义类加载器也可以反编译,并且可以编写工具来绕过它。
即使使用模糊处理和字节码修改以及自定义类加载器,java也是可攻击/可反编译的,并且源几乎总是可以进入某种可读状态。
答案 2 :(得分:3)
您希望对jar文件进行模糊处理,而不是加密。
在Java中这样做的一个流行选择是ProGuard。
答案 3 :(得分:1)
没有。由于你的程序需要能够运行代码,所以无论如何都是毫无意义的。
您可以对代码进行模糊处理,因为反编译.class文件会导致代码不太可读(无意义的变量/类名等)。
答案 4 :(得分:1)
据我所知,标准JVM不支持此功能。但是你可以做到以下几点。将您的申请分为两部分。首先不会加密。它将是一个简单的加载器,它将使用自定义类加载器实例化其余的。这个类加载器将Classes作为字节数组,解密并加载它们。
答案 5 :(得分:0)
如果您不想提供对jar内部类文件的访问权限,为什么要为您的jar提供应用程序? 感觉你的问题在概念上是错误的......
如果您需要一些加载类的自定义方法,请考虑使用自定义类加载器。
答案 6 :(得分:0)
如果你用jar包装 - >只需将其重命名为jarname.ABCD或任何误导性扩展,甚至取消扩展,并相应地在您的应用程序中指定jar名称。
答案 7 :(得分:-1)
我更喜欢jCrypt! 这是一个简单的工具,您可以在其中加密类(和资源)