我们如何反编译java那么容易?

逆向工程 二元分析 反编译 C 爪哇
2021-06-18 18:38:41

我看过很多视频,每个人都可以如此轻松地反编译 jar 文件。但我了解到我们不能那么容易地反编译任何编译过的文件。我在 Gidhra 有一点经验。我分析了一些 C 编译的二进制文件。C 编译的二进制文件不是那么容易反编译,我自己见过。但是java反编译是如何工作的呢?工具只是提取其中编写的所有源代码。你可以以这个视频为例,Youtube IPPSEC 请告诉我C和Java编译文件反编译的区别。

1个回答

简而言之,区别在于 Java 和本机代码编译和执行的格式。编译为本机代码格式可从生成的可执行文件中消除 Java 代码设计保留的大量信息,包括但不限于以下列表:

  • 班级名称
  • 方法名称
  • 属性名称和类型
  • 方法边界
  • 确切的异常定义
  • 类结构
  • 所谓的语言中方法的字节码代码,它很容易理解和反编译,因为它是基于引用的语言,并且包含其他被调用方法的精确签名设计

我们对代码了解得越多,就越容易理解(和反编译)它。

Java 代码在 Java 虚拟机 (JVM) 中执行。本机代码直接在处理器上执行。

JVM正在执行.jar文件。.jar 文件是包含具有类定义的.class文件的zip 档案这种格式在这里定义,我们可以在参考文档中找到类文件包含的所有内容。我们知道的关于 java 字节码的大部分信息在本地代码编译期间丢失了。

如果您想更多地了解 java 类的内部结构,我建议您编写一些简单的 java 类,编译它,然后用javap反汇编它