【问题标题】:How can you protect/encrypt your Java classes?您如何保护/加密您的 Java 类?
【发布时间】:2011-05-14 12:14:06
【问题描述】:

前段时间,在我的工作中,我需要保护一些类不让其他人阅读代码。为此,我创建了一个 EncryptedClassLoader,它加载了以前加密的类,也可以加载普通(未加密)的类。 以这种方式工作有点复杂,而且还要进行测试(编译、加密、解密)。

是否有任何免费的框架可以满足我的需求,并且易于处理?我的意思是,不仅混淆,而且加密文件,所以没有人可以读取或调试那部分代码。我可以轻松更改加密密钥也很棒(在我的应用程序中,它是硬编码的)。

提前致谢。

【问题讨论】:

  • 每个罐头都有一个开罐器。如果该类可以在 JVM 中执行,则可以通过某种方式获取其内容。例如,考虑一个被破解的 OpenJDK,它会转储加载的类的内容,作为一个简单的例子。
  • 如果你的代码太棒了以至于需要加密你最好只是版权算法恕我直言:)

标签: java encryption classloader protection


【解决方案1】:

简短的回答,你不能。加密不起作用。这是一篇关于为什么是 pointless to use an encrypted class loader 的旧文章:

很遗憾,你错了, 都认为你是 首先提出这个想法并在 认为它确实有效。和 原因与 加密方案的强度。

您可以对其进行混淆,但这只会到此为止,最后我坚信您的时间最好花在修复错误或添加功能上。

【讨论】:

    【解决方案2】:

    加密不会增加混淆的安全性。任何能够运行您的程序的人也可以将解密的字节码转储到磁盘。我认为这就是为什么加密字节码不是很常见的原因,例如在哪里签名。

    如果您确实想加密您的字节码,请确保您也对其进行混淆处理,我认为您当前使用的方法无需添加任何框架或库即可正常工作。

    【讨论】:

      【解决方案3】:

      我们使用JarProtector 库来加密我们的jar 文件。没有混淆,只有加密。没有更改加密密钥的选项,但永远不会调用 defineClass()。

      【讨论】:

      • 它是一个小巧易用的工具。
      【解决方案4】:

      保护代码的唯一方法就是不允许用户运行它。与其分发应用程序,不如出售对在线服务的访问权。然后,您的代码将放在服务器上,您唯一要公开的就是接口。

      另一种选择是通过合同和律师保护您的代码,但除非您写了一些真正好的东西,否则这将使您付出的代价超过您失去的收入。

      【讨论】:

        【解决方案5】:

        你可以试试VLINX Java Protector,它通过修改JVM来做一个原生的ClassLoader对类数据进行加解密,而不是Java写的ClassLoader,可以有效保护你的java代码

        【讨论】:

          猜你喜欢
          • 2020-08-05
          • 2018-07-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-07
          • 2019-08-04
          • 1970-01-01
          • 2012-03-02
          • 2012-04-24
          相关资源
          最近更新 更多