Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad
一、前言
1、什么是反编译?
大家都知道,将源代码转换成二进制执行代码的过程叫“编译”,比如将C源代码编译成.exe可执行文件;那么把二进制执行代码转换成源代码的过程就叫“反编译”,比如把exe转换为C源代码就叫“反编译”。
由于主流的C的编译器都进行了代码的优化,因此把C编译生成的exe文件反编译成C代码非常困难。但是像Java、.net这样基于虚拟机技术的编程语言则反编译非常容易,Java平台下有Jad、Jode、JD等反编译器,.net平台下则有Reflector等反编译器,他们的反编译质量非常高,甚至和源代码几乎没什么差别。
2、反编译得到的是源代码吗?
反编译得到的代码是非常接近于源代码,但是或多或少与源代码有一些差异的,比如一些表达式被优化掉了,比如,下面的源代码:
int i=1+1;
学过《编译原理》的同学知道有“常量优化”这个编译优化算法,因此上边的源代码一般会被优化为:int i=2;
由于在编译过程中已经进行了优化,把“1+1”这个原始的信息丢掉了,因此反编译出来的代码只能是:
int i=2;
可以看到反编译得到的代码和源代码是有区别的。
比如:andriod中
download = (Button)findViewById(R.id.xiaz);
被优化成了download = (Button)findViewById(0x7f070018);
3、程序可以反编译岂不是很不安全?
可以采用代码混淆等技术来加大反编译的难度,和降低反编译代码的可读性,但是完全避免反编译是不可能的。
4、反编译器的原理是什么?
由于Java、.net这样的基于虚拟机技术的语言平台,都是采用了Byte Code的二进制结构,因此很容易将ByteCode转化为“抽象语法树”(简称AST,《编译原理》这门课中的概念),然后采用反编译器就可以将AST转换为代码了。
二、反编译工具和插件有哪些?
1、 JD-GUI【推荐】
JD-GUI是属于Java Decompiler项目(JD项目)下个的图形化运行方式的反编译器。
JD-Eclipse属于Java Decompiler项目(JD项目)下个Eclipse插件化运行方式的反编译插件。
JD-IntelliJ属于Java Decompiler项目(JD项目)下个Intellij插件化的运行方式的反编译插件。
JD-GUI 是一个用 C++ 开发的 Java 反编译工具,由 Pavel Kouznetsov开发,支持Windows、Linux和苹果Mac Os三个平台。而且提供了Eclipse平台下的插件JD-Eclipse,Intellij平台下的插件JD-Intellij。JD-GUI不需要安装,直接点击运行,可以反编译jar,class文件。
支持jar包级的反编译,可将整个jar包直接保存为*.src.zip源代码包,反编译迅速,错误率极少。
JD分为JD-GUI、JD-Eclipse/JD-Intellij两种运行方式,JD-GUI是以单独的程序的方式运行,JD-Eclipse/JD-Intellji则是以一个Eclipse/IDEA插件的方式运行。
Java Decompiler项目”旨在开发一些工具,以便反编译和分析Java 5以及更高本的Java的“字节代码”。
JD-Core是一个库,是一个从一个或多个“.class”文件中重建Java源代码的库。JD-Core可用于恢复丢失的源代码并探索运行时Java的源代码。支持Java 5的新功能,例如注释,泛型或类型“枚举”。JD-GUI和JD-Eclipse包括JD-Core库。
2、Jad
jad是一款使用非常广泛地Java反编译工具,Jadclipse就是基于jad的反编译插件,JAD 文件包含 MIDlet 套件的标题信息,例如开发应用程序的公司、应用程序名称和大小。
3、XJad (比较好用,不过目前版本是2.2,是2006发布的了,一直没更新了,而且有bug,不推荐了)
XJad是基于Jad核心的Java源程序反编译软件,内置Jad1.5.8e2;
可处理多个*.class文件,可以处理文件夹内的所有文件,甚至可以处理*.jar文件;
带有多页面文本编辑器,也可集成在资源管理器中,随时点击右键都可进行操作;
支持java语法的高亮显示;
4、Luyten
比较精准的一个java反编译工具,没用过,用的人比较少。
......
还有很多反编译工具,但是主要推荐JD-GUI,其次是XJad。
----------------------
反编译工具下载:
1、JD-GUI(Java反编译工具) 0.3.6 绿色免费版.zip 【免安装,直接解压运行】-CSDN下载 http://download.csdn.net/download/chenchunlin526/10024535
2、Java反编译工具(XJad) v2.2 中文绿色版.zip 【免安装,直接解压运行】-CSDN下载 http://download.csdn.net/download/chenchunlin526/10029995
三、反编译工具JD-GUI的使用
作为一个软件开发人员,在自学的成长道路上,不可避免的会借鉴别人开发完成的功能实现方法,js/css/html可以通过浏览器直接捕获,没有源码的能拿到calss文件也是一件幸事,那么如何查看class文件呢?这就要用到反编译工具了。
① JD-GUI这款Java反编译工具是纯绿色,完全免费的,非常适合开发者,其界面也简洁大方
② 鼠标单击“file”从中选择“Open File ...“选项,弹出一个文件选择框,可以选择要打开的文件,或者直接单击文件夹图标,直接弹出文件选择框
③ 从打开的文件的左侧可以看到文件的保存位置,类及方法,右侧显示类的具体内容,注释不会显示,同时它会把这个类所在的包下的其他类也反编译成源码:
如需将预览的.class文件转换成.java文件,只需点击File菜单里的save即可。
④ 还有一种方法是直接打开jar包,鼠标单击文件夹图标,弹出文件选择框,选择一个jar包,单击‘确定’
⑤ 从打开的界面中可以看到整个jar包中的.class文件的反编译结果
顺便说一下XJad 的使用(使用方法和JD-GUI都差不多),虽然版本比较老,且官方10多年没更新了,算是已经放弃了。
不过也可以可用:
使用说明:
========
1、打开一个或者多个*.class文件,XJad反编译后,重命名为*.java文件,
保存至当前文件夹,并在编辑器中打开查看;
2、打开一个文件夹,XJad将该文件夹下所有*.class文件进行反编译,并保存至该文件夹下,
依据包路径信息生成文件夹路径,如com.spring.framework.*,
将建立com\spring\framework的文件夹结构;
3、打开一个*.jar文件,XJad将该Jar文件中的所有*.class文件解压缩到临时目录并进行反编译,
并将源文件带包路径信息保存至当前文件夹下名称为“~” + *.jar 的文件夹中;
① 单个文件反编译
反编译好之后,会在原来的.class所在文件夹下生成一个同名的.java源码文件:
且XJad会自动打开反编译后生成的源码文件:
② 整个文件夹反编译,可以选择一个文件夹,XJad会把该文件夹下的所有.class文件全部反编译好。
比如,我的D盘新建一个文件夹,FindPassword,里面只有个FindPasswordController.class文件
然后选择 反编译文件夹:
确定之后:
提示已经反编译成功,我们现在到 D:\FindPassword 里查看,里面已经生成了一个按层次结构排行的源码文件包了
点进去看一下,文件夹里有刚反编译好的源码文件了:
记事本打开看一下,源码正常,只是没有了注释了
③ jar包反编译
确定之后
反编译之后,会在jar包所在的文件下,生成一个以“~”开头的源码文件夹:
打开进去看一下:
好了,JD-GUI 和 XJad的使用介绍到此介绍了。
----------------------
工具下载:
1、JD-GUI(Java反编译工具) 0.3.6 绿色免费版.zip-CSDN下载 http://download.csdn.net/download/chenchunlin526/10024535
2、Java反编译工具(XJad) v2.2 中文绿色版.zip 【免安装,直接解压运行】-CSDN下载 http://download.csdn.net/download/chenchunlin526/10029995