【发布时间】:2011-11-03 12:16:51
【问题描述】:
我正在一个项目中工作,我们需要加密 .jar 文件,因此没有人可以访问 jar 文件中的 .class 文件.... 是否有任何 java 编码可以帮助我加密.jar 文件?
【问题讨论】:
标签: java encryption ant public-key-encryption
我正在一个项目中工作,我们需要加密 .jar 文件,因此没有人可以访问 jar 文件中的 .class 文件.... 是否有任何 java 编码可以帮助我加密.jar 文件?
【问题讨论】:
标签: java encryption ant public-key-encryption
即使您加密了 jar 文件,也必须在 JVM 能够运行它之前对其进行解密,因此您需要另一个包含解密和加载到 JVM 中的类的 jar 文件。
由于第二个 jar 文件本身无法加密,因此想要查看您的类文件的恶意用户可以简单地查看第二个 jar 文件中的类,然后解密您的超级机密 jar 文件并访问它。
也许您可以使用混淆器来提高代码的安全性,但它最终会保护(使其更难但并非不可能)您的类文件不被反编译,而不是被使用。
如果混淆还不够,您可以考虑将您的 jar 文件编译为适用于 windows 的 DLL 或适用于 unix/linux 的 SO,这将使反编译变得更加困难,但并不总是能够正确地做到这一点,而且通常一个皮塔饼。 GCJ 能够以某种方式做到这一点,并且还有其他商业产品实际上会将 .class/.jar 直接编译为机器码。
但是请注意,您在其中设置了多少安全性并不重要,因为客户端计算机必须能够执行它,它必须能够读取它,所以无论您的代码将被公开,您都可以只会让它变得更难。
如果您真的有一个秘密的算法,无论如何都不想透露,请考虑将其转换为网络服务,将其托管在您的服务器上,这样您就不必将实际代码发送到客户端计算机,并且还可以通过检查对应用程序重要部分的访问来更好地防止未经授权的应用程序副本。
【讨论】:
我假设您知道任何熟练的 Java 编码器都可以对您使用(或编写)的 Java 工具进行逆向工程,并且仍然可以解码应用程序的 jar?还可以编写自定义类加载器来读取您的“加密”代码,并且可以反编译并编写一个工具来绕过它。
即使使用混淆和字节码修改以及自定义类加载器,java 也是可破解/可反编译的,并且几乎总是可以将源代码置于某种可读状态。
【讨论】:
您想要混淆而不是加密 jar 文件。
在 Java 中执行此操作的一个流行选择是 ProGuard。
【讨论】:
没有。由于您的程序需要能够运行代码,因此无论如何它都是没有意义的。
您可以混淆您的代码,但反编译 .class 文件会导致代码可读性降低(无意义的变量/类名等)。
【讨论】:
据我所知,标准 JVM 不支持此功能。但是您可以执行以下操作。将您的应用程序分成两部分。首先不会被加密。这将是一个简单的加载器,它将使用自定义类加载器实例化其余部分。这个类加载器将获取类作为字节数组,解密并加载它们。
【讨论】:
如果您不想提供对 jar 中的类文件的访问权限,为什么要为您的 jar 提供应用程序? 感觉你的问题在概念上有点错误......
如果您需要一些自定义加载类的方式,请考虑使用自定义类加载器。
【讨论】:
如果你在 jar 中打包 -> 只需将其重命名为 jarname.ABCD 或任何误导性的扩展名,甚至取消扩展名,然后在你的应用程序中相应地指定 jar 名称。
【讨论】:
file(1) 是个好东西。
我更喜欢jCrypt! 这是一个简单的工具,您可以在其中加密类(和资源)
【讨论】: