我看过很多视频,每个人都可以如此轻松地反编译 jar 文件。但我了解到我们不能那么容易地反编译任何编译过的文件。我在 Gidhra 有一点经验。我分析了一些 C 编译的二进制文件。C 编译的二进制文件不是那么容易反编译,我自己见过。但是java反编译是如何工作的呢?工具只是提取其中编写的所有源代码。你可以以这个视频为例,Youtube IPPSEC 请告诉我C和Java编译文件反编译的区别。
我们如何反编译java那么容易?
逆向工程
二元分析
反编译
C
爪哇
2021-06-18 18:38:41
1个回答
简而言之,区别在于 Java 和本机代码编译和执行的格式。编译为本机代码格式可从生成的可执行文件中消除 Java 代码设计保留的大量信息,包括但不限于以下列表:
- 班级名称
- 方法名称
- 属性名称和类型
- 方法边界
- 确切的异常定义
- 类结构
- 所谓的语言中方法的字节码代码,它很容易理解和反编译,因为它是基于引用的语言,并且包含其他被调用方法的精确签名设计
我们对代码了解得越多,就越容易理解(和反编译)它。
Java 代码在 Java 虚拟机 (JVM) 中执行。本机代码直接在处理器上执行。
JVM正在执行.jar文件。.jar 文件是包含具有类定义的.class文件的zip 档案。这种格式在这里定义,我们可以在参考文档中找到类文件包含的所有内容。我们知道的关于 java 字节码的大部分信息在本地代码编译期间丢失了。
如果您想更多地了解 java 类的内部结构,我建议您编写一些简单的 java 类,编译它,然后用javap反汇编它。
其它你可能感兴趣的问题