【问题标题】:Does compilng java code to exe (e.g. using Launch4Java) ensure code cannot be reversed engineered?将 java 代码编译为 exe(例如使用 Launch4Java)是否确保代码不能被逆向工程?
【发布时间】:2011-01-15 16:54:05
【问题描述】:

经过自己的实验,我确信 java 代码混淆在防止逆向代码工程方面是不安全的。 因此,我转而使用 Launch4J 将我的一个核心 jar 文件捆绑到一个 EXE 文件中。 jar 文件也包含主入口方法。 这会再次保护代码逆向工程吗?

【问题讨论】:

  • 顺便说一句:launch4j 将 Java 代码编译为 exe。它只是将原始 jar 包装在一个 exe 中。这比真正的 java-to-exe 编译更容易规避(@Valentins 对 Thorbjørns 答案的评论证明了这一点)
  • 如果您确实需要隐藏某些内容,请将您的应用程序联网并在服务器上运行敏感代码。逆向工程几乎任何可执行文件都不是一个非常困难的问题。
  • 你为什么担心逆向工程? (换句话说,你的业务是什么?)

标签: java reverse-engineering launch4j


【解决方案1】:

如果计算机可以运行它,人类就可以对其进行逆向工程。

【讨论】:

  • 编译后的 .exe 文件需要包含运行程序逻辑所需的信息。如果计算机能够运行它,那么人类就可以阅读它。可能有点难(因为字节码比原生汇编更简单),但还是可以的。
  • 另外我刚刚在 ubuntu 上测试过,file-roller 能够打开 exe 并给我原封不动的 jar
  • 确实,据我所知,至少从 1970 年代开始,就有一些工具(例如反汇编程序)可以帮助对本机代码进行逆向工程。
【解决方案2】:

Launch4J 不会将您的 Java 代码转换为本机可执行代码,它只是提供一个本机启动器,用于查找 JDK 并将您的 JAR 作为资源(无论是否打包在可执行文件中)。这只是一种方便 - 而不是安全性。如果您的 JAR 在可执行文件的外部,那么有人可以像常规 Java 应用程序一样对您的代码进行逆向工程。如果您的 JAR 被打包到可执行文件中 - 据推测,有人编写了将 JAR 包装在可执行文件中的逻辑,并且有人可以编写逻辑以从可执行文件中解包 JAR(或使用可以从可执行文件中提取资源的众多工具之一) - 然后可以像常规 Java 应用程序一样对代码进行逆向工程。

【讨论】:

    【解决方案3】:

    简单地说,你不能阻止你的代码被逆向工程。

    • 您已经注意到了混淆的好处(没什么,真的
    • 类切片/组合(有目的地混合'n'匹配各种类以破坏代码的逻辑结构)也不会有太大帮助,尤其是当您必须调试怪物时.
    • 您也不能真正加密/混淆字节码,因为在字节码到达您的自定义 ClassLoader 之后,它已经恢复为完全可读的格式。 More information here

    即使您获得了代码保护,也可以对其进行监控。也许在字节码级别,也许在 ASM 级别,这并不重要——重要的是当人们可以监控正在执行的代码时,它也可以被逆向工程。有些方法确实比其他方法需要更多时间,但并非不可能。

    停止以security through obscurity 的方式思考,而是开始分析您遇到的真正的安全等问题并相应地解决它们。防止逆向工程——即使它不会是徒劳的练习——也不会神奇地解决你的软件问题。

    【讨论】:

      【解决方案4】:

      我已经通过一个 jar 对 exe(从 launch4j 生成)执行了逆向工程。
      如果您错过了jar 文件并且只有exe,以下是检查源代码的步骤。

      1. 假设你的exe名字是xyz.exe重命名为xyz.exe.zip
      2. 转到 RAD/eclipse 为 ex: temp 创建一个 jave 项目。
      3. 转到文件选择导入,导入窗口将打开。
      4. 转到常规并选择存档文件,然后单击下一步。
      5. 在存档文件窗口中单击浏览并选择您的zip(例如:xyz.exe.zip)
      6. 在 Into 文件夹中选择目标路径,我选择了已创建的 java 项目 temp 并单击 Finish。
      7. 你可以在上面的项目中看到你所有的.class文件。
      8. jd-gui你打开.class文件你需要检查哪个源,你可以看到src

      【讨论】:

        【解决方案5】:

        如果您将可执行文件从 .exe 重命名为 .zip,您将能够查看所有 .class 文件以及从 .jar 重命名为 .zip 之类的内容,并且使用像 http://java.decompiler.free.fr 这样的反编译器,人们仍然可以查看您的源代码。

        【讨论】:

          【解决方案6】:

          应该的。然而,这将失去 Java 的全部意义。

          【讨论】:

          • java 是一种非常通用且简单的语言。不要认为使用另一种语言可以很容易地提高工作效率。对于我的应用,我不需要“一次编写,到处运行”功能。
          • 不会的。如果人们可以对 Windows 等部分进行逆向工程以弄清楚如何入侵,那么他们肯定可以对 exe 文件进行逆向工程。
          猜你喜欢
          • 2015-04-13
          • 2013-10-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-11
          • 2017-05-28
          • 1970-01-01
          • 2020-04-28
          相关资源
          最近更新 更多