【问题标题】:How to encrypt a .jar file如何加密 .jar 文件
【发布时间】:2011-11-03 12:16:51
【问题描述】:

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

【问题讨论】:

    标签: java encryption ant public-key-encryption


    【解决方案1】:

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

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

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

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

    但是请注意,您在其中设置了多少安全性并不重要,因为客户端计算机必须能够执行它,它必须能够读取它,所以无论您的代码将被公开,您都可以只会让它变得更难。

    如果您真的有一个秘密的算法,无论如何都不想透露,请考虑将其转换为网络服务,将其托管在您的服务器上,这样您就不必将实际代码发送到客户端计算机,并且还可以通过检查对应用程序重要部分的访问来更好地防止未经授权的应用程序副本。

    【讨论】:

    • 实际上我想保护 .class 文件不被 .jar 文件中的访问,你有办法吗?
    • AlexR 的建议是使用自定义类加载器,它会即时解密 jar 文件,这是可行的,或多或少是您所要求的,但请记住,任何普通技术安装了 JAD 的程序员将能够对您的自定义类加载器进行逆向工程并访问该类。我添加了另一个解决方案的段落,但这很不寻常。
    【解决方案2】:

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

    即使使用混淆和字节码修改以及自定义类加载器,java 也是可破解/可反编译的,并且几乎总是可以将源代码置于某种可读状态。

    【讨论】:

      【解决方案3】:

      您想要混淆而不是加密 jar 文件。

      在 Java 中执行此操作的一个流行选择是 ProGuard

      【讨论】:

        【解决方案4】:

        没有。由于您的程序需要能够运行代码,因此无论如何它都是没有意义的。

        您可以混淆您的代码,但反编译 .class 文件会导致代码可读性降低(无意义的变量/类名等)。

        【讨论】:

          【解决方案5】:

          据我所知,标准 JVM 不支持此功能。但是您可以执行以下操作。将您的应用程序分成两部分。首先不会被加密。这将是一个简单的加载器,它将使用自定义类加载器实例化其余部分。这个类加载器将获取类作为字节数组,解密并加载它们。

          【讨论】:

          • 虽然这是一些人使用的方法,但总是有可能反编译自定义类加载器并破坏安全性。就像您可以读取解密的代码一样,您可以将其写为解密的。 :)
          【解决方案6】:

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

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

          【讨论】:

          • 我可以使用什么应用程序提供我的 .jar 文件来保存 .class 文件以防止在 .jar 文件中的访问??
          【解决方案7】:

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

          【讨论】:

          • file(1) 是个好东西。
          【解决方案8】:

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

          【讨论】:

            猜你喜欢
            • 2010-10-06
            • 1970-01-01
            • 1970-01-01
            • 2015-08-24
            • 2010-12-26
            • 2014-10-13
            • 2011-09-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多