2

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

4

6 回答 6

17

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

于 2010-02-11T12:24:22.867 回答
8

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

于 2010-02-11T12:53:20.463 回答
2

简而言之,您无法阻止您的代码被逆向工程。

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

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

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

于 2010-02-11T12:36:04.107 回答
0

我已经在一个 jar上对exe(生成自)进行了逆向工程。 如果您错过了文件并且只有. launch4j
jarexe

  1. 假设您的 exe 名称xyz.exe将其重命名为xyz.exe.zip
  2. 转到 RAD/eclipse 为 ex:temp 创建一个 java 项目。
  3. 转到文件选择导入,导入窗口将打开。
  4. 转到常规并选择存档文件,然后单击下一步。
  5. 在存档文件窗口中单击浏览并选择您的zip(例如:xyz.exe.zip)
  6. 在进入文件夹中选择目标路径,我选择了创建的 java 项目临时,然后单击完成。
  7. 你可以.class在上面的项目中看到你的所有文件。
  8. jd-gui您打开.class需要检查的源文件时,您可以看到src.
于 2015-03-27T06:15:02.090 回答
-1

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

于 2013-06-11T20:19:02.943 回答
-3

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

于 2010-02-11T12:24:37.633 回答