【问题标题】:Best Java obfuscator? [closed]最好的 Java 混淆器? [关闭]
【发布时间】:2011-02-02 00:20:05
【问题描述】:

我正在开发一个安全软件,并且想要混淆我的 java 代码,这样就无法进行逆向工程。什么是最可靠的java混淆器?

【问题讨论】:

  • 我有一些同事创建了一些严重混淆的代码。但这不是他们的意图。
  • @Mnementh:这足以让您的特定应用程序的逆向工程成本过高。
  • @Robert Harvey:不知道你为什么认为这个问题没有建设性。它与编程有关,在我看来,它与任何其他编程问题一样好

标签: java obfuscation


【解决方案1】:

首先,您确实需要记住,对某些东西进行逆向工程是永远不可能的。一切都是可破解的。使用智能 IDE 的智能开发人员已经可以走得更远了。

嗯,你可以找到here 一个列表。 ProGuard 很不错。我自己使用过它,但只是为了“缩小”Java 代码。

【讨论】:

  • @BalusC: 那么你用什么工具来混淆java代码呢?你确实混淆了你的java代码,不是吗?
  • @Thinhbk 混淆使获取有用的堆栈跟踪变得更加困难。
  • @ThorbjørnRavnAndersen:同意。 IMO,混淆将使堆栈跟踪变得几乎无用。在这种情况下,我在日志消息中使用了一些技巧,这会有所帮助。
  • @Thinhbk Proguard 生成一个映射以将混淆的堆栈跟踪转换回原始代码。否则,正如您所说,堆栈跟踪将变得无用(但无论如何谁会得到未捕获的异常......;-))
  • @Matthieu:是否可以将堆栈跟踪自动转换为原始代码?这会很棒,对我来说是新的。我只知道如果代码库很大,手动翻译回来会很困难。
【解决方案2】:

如果计算机可以运行它,那么有适当动机的人就可以对其进行逆向工程。

【讨论】:

  • 有多少人能读懂混淆代码并理解其中的逻辑?我有很多工程师朋友,他们做不到。只有约翰纳什可以做到这一点;)
  • @kodmanyagha 如果他们有足够的动力,他们会学习的。这并不难。
  • 在数学意义上,可以在没有方法对其进行逆向工程的情况下运行。这就是同态加密的意义所在,但需要解决很多障碍才能使其在计算机软件而非 SaaS 上实际可用。我们正在慢慢地向那里移动。 Gentry 关于全同态加密和 Amit Sahai 等人的“数学拼图”的开创性著作。朝着这个方向迈出了一大步。只有一个缺失的元素(我称之为“障碍函数”)可以使整个方案可行。现在不可能的事情将来都会成为可能。
  • @kodmanyagha 如果动机足够强大,人类可以阅读和分析任何混淆代码。甚至有人编写了一个程序来读取 Java/Javasript 语法并将所有变量重命名为更具可读性的名称,然后重新读取修改后的源代码。我认为混淆不能真正保护代码。
【解决方案3】:

查看我的文章 Protect Your Java Code - Through Obfuscators And Beyond [Archived],了解混淆与其他三种使您的应用逆向工程成本更高的方法的讨论,以及工具链接和进一步阅读材料的集合。

【讨论】:

  • 这是我真正需要的。我想为我的项目编写 PHP 混淆器。逻辑到处都是一样的。谢谢...
  • 关于 Java 混淆和软件集合的酷而广泛的文章。
【解决方案4】:

我认为 Proguard 是最好的。也可以将它与您的 IDE(例如 NetBeans)集成。但是,请考虑,如果您混淆代码,可能很难在日志中跟踪问题。

【讨论】:

  • +1 表示“考虑到如果您混淆了代码,可能很难在日志中跟踪问题”。就在你认为调试已经够难的时候......
  • 一个好的混淆器可以改变名称和行号信息,应该产生一个日志来逆转这个过程。这样,至少堆栈跟踪对于混淆的二进制文件仍然有用。
  • ProGuard 创建这样的反向文件进行调试。 :-)
【解决方案5】:

正如这里其他地方所说,proguard 很好,但可能不知道的是,这里还有一个第三方 maven 插件http://pyx4me.com/pyx4me-maven-plugins/proguard-maven-plugin/...我已经一起使用它们了'很好。

【讨论】:

    【解决方案6】:

    我使用了Allatori,它做得很好。

    【讨论】:

      【解决方案7】:

      确实,对某些代码进行逆向工程总是可能的,就像不可能有序地保护一所房子,这样任何人都无法窃取它。 不过,这并不能阻止我锁门。 其实我不在java世界,我用BitHelmet.net。

      【讨论】:

      • +1 带您回到 net 0。这个答案并非没有帮助。
      【解决方案8】:

      我曾经在我以前的公司使用Klassmaster,它工作得非常好,并且可以很好地与构建系统集成(maven 支持非常好)。但它不是免费的。

      【讨论】:

        【解决方案9】:

        我们对 jar 进行加密而不是混淆处理的运气要好得多。我们使用Classguard

        【讨论】:

        【解决方案10】:

        我不确定该解决方案是否安全,但关于ClassGuard 解决方案,阅读文章和评论很有趣:http://www.javaworld.com/community/?q=node/1604#comment-12296

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-22
        • 2016-01-17
        • 1970-01-01
        • 1970-01-01
        • 2010-09-14
        相关资源
        最近更新 更多