功能介绍
1、支持众多Java编译器的反编译;
2、支持对整个jar文件进行反编译,并本源代码可直接点击进行相关代码的跳转;
更新日志
- 1、修正了“.class”表达式的识别错误。
2、修正错误识别“开关枚举”指令。
3、用已知的数字常量(例如Long.MAX_VALUE)替换数值。
4、删除了不必要的“java.lang”前缀。
5、修正了在最后位置上包含三元运算符的try-cacht语句的识别错误。
6、添加了返回的通用变量的转换说明。
7、隐藏匿名类的合成字段。
8、在内部,改进的JD-Core内存管理(复杂的智能指针C ++ 11由基本但非常高效的内存池替代)
使用方法
一、如何使用JD-GUI?
1、JD-GUI在一般电脑上是不能直接运行的,首先我们需要保证电脑中安装有JAVA,大家可以将java反编译工具下载并安装,
2、下载安装完成后即可运行使用
二、反编译得到的是源代码吗?
反编译得到的代码是非常接近于源代码,但是或多或少与源代码有一些差异的,比如一些表达式被优化掉了,比如:
下面的源代码:
int i=1+1;
学过《编译原理》的同学知道有“常量优化”这个编译优化算法,因此上边的源代码一般会被优化为:int i=2;
由于在编译过程中已经进行了优化,把“1+1”这个原始的信息丢掉了,因此反编译出来的代码只能是:
int i=2;
可以看到反编译得到的代码和源代码是有区别的。
比如:andriod中
download = (Button)findViewById(R.id.xiaz);
被优化成了download = (Button)findViewById(0x7f070018);
常见问答
一、什么是JD-GUI?
JD-GUI是一个独立的图形实用程序,显示“.class”文件的Java源代码。您可以使用JD-GUI浏览重建的源代码,以便即时访问方法和字段。
二、程序可以反编译岂不是很不安全?
可以采用代码混淆等技术来加大反编译的难度和降低反编译代码的可读性,但是完全避免反编译是不可能的。
三、java反编译工具的原理是什么?
由于Java、.net这样的基于虚拟机技术的语言都是采用了ByteCode的二进制结构,因此很容易将ByteCode转化为“抽象语法树”(简称AST,《编译原理》这门课中的概念),然后采用反编译器就可以将AST转换为代码了。
编辑点评
JD-GUI这款软件是一款反编译软件Java的,这款软件必须运行在Java编译软件平台上,这是一款非常专业性的软件,对于软件工程师或者软件开发工作者来说这款软件能把反编译做到极致