java反编译工具
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
相关阅读
大多商业软件,会对程序进行加密、加壳等安全措施以防范软件被破解,从而使得反编译越来越难。反编译是一个对目标可执行程序进行逆向
一些Java反编译工具/源代码查看工具的介绍摘要: 有的朋友抱怨他们在使用他们公司的闭源框架时看不到底层的源代码。那么可以尝试
Framework-Res.apk 反编译、编译、打包、替换详细教程
本文来自:http://www.anzhuo.cn/thread-156429-1-1.html 美化系统必学一步:对apk文件的编译跟反编译详细教程!!!文字颜色说明:紫色:普通
一、工具介绍: 1.apktool:aapt.exe,apktool.bat,apktool.jar;三个在同一目录结合使用,用来反编译apk,apk重新打包; 2.dex2jar:该工具