点击上方红色字体,选择“加星标公众号”
优质文章,第一时间送达
一、简介
1.什么是反编译?
大家都知道,将源代码转换成二进制可执行代码的过程称为“编译”,比如将C源代码编译成.exe可执行文件; 那么将二进制可执行代码转换为源代码的过程称为“反编译”。 例如,将exe转换为C源代码称为“反编译”。
由于主流C编译器都对代码进行了优化,所以将C编译生成的exe文件反编译成C代码是极其困难的。 然而,对于Java、.net等基于虚拟机技术的编程语言来说,反编译非常容易。 Java平台下有Jad、Jode、JD等反编译器,.net平台下有Reflector等反编译器。 他们的反编译质量极高,与源代码几乎没有任何区别。
2、源代码是通过反编译得到的吗?
反编译后的代码与源代码非常接近,但与源代码有一些区别,比如对一些表达式进行了优化,例如下面的源代码:
整数i=1+1;
研究过《编译原理》的同事都知道,有一种“不断优化”的编译优化算法,所以上面的源码通常优化为:int i=2;
由于编译过程中已经进行了优化,“1+1”的原始信息被扔掉了,所以反编译后的代码只能是:
整数i = 2;
可以看出,反编译后的代码与源代码是不同的。
例如:在andriod中
下载 = (按钮)findViewById(R.id.xiaz);
优化为 download = (Button)findViewById(0x7f070018);
3、程序可以反编译不是不安全吗?
可以采用代码混淆等技术来增加反编译的难度,降低反编译代码的可读性,但不可能完全避免反编译。
4、反编译器的原理是什么?
由于Java、.net等基于虚拟机技术的语言平台都采用了Byte Code的二进制结构,因此很容易将Byte Code转换为“抽象语法树”(简称AST,在《编译原理》课程中)概念),然后使用反编译器将 AST 转换为代码。
2. 反编译工具和插件有哪些?
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和Apple 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 反编译器项目旨在开发用于反编译和剖析 Java 5 及更高版本“字节代码”的工具。
JD-Core 是一个从一个或多个“.class”文件重建Java 源代码的库。 JD-Core可用于恢复丢失的源代码并探索运行时Java的源代码。 支持新的 Java 5 功能,例如注释、泛型或类型“enum”。 JD-GUI 和 JD-Eclipse 包含 JD-Core 库。
2. 贾德
jad是一种使用特别广泛的Java反编译工具。 Jadclipse是一个基于jad的反编译插件。 JAD 文件包含 MIDlet 套件的标头信息,例如开发应用程序的公司、应用程序名称及其大小。
3.XJad(比较好用,但目前版本是2.2,2006年发布,一直没有更新,有bug,不推荐)
XJad是一款基于Jad核心的Java源程序反编译软件,内置Jad1.5.8e2;
它可以处理多个*.class文件、文件夹中的所有文件,甚至*.jar文件;
具有多页文本编辑器,还可以集成在资源管理器中,随时可以右键操作;
支持java句型高亮;
4. 鲁伊滕
比较准确的java反编译工具,没用过,用的人也比较少。
……
反编译工具有很多,但推荐JD-GUI,其次是XJad。
----------------------
反编译工具下载:
1.JD-GUI(Java反编译工具)0.3.6绿色免费版.zip【免安装,直接解压运行】-CSDN下载
2.Java反编译工具(XJad) v2.2中文绿色版.zip【无需安装,直接解压运行】-CSDN下载
3.反编译工具JD-GUI的使用
作为一名软件开发人员,在自学成长的道路上,免不了要学习借鉴别人开发的功能实现方法。 js/css/html可以通过浏览器直接抓取,不用源码也能收到calss文件也是一件幸事,那么如何查看class文件呢? 这就要用到反编译工具了。
① JD-GUI,Java反编译工具,纯红色,完全免费,非常适合开发者,界面简洁优雅
② 点击“文件”,选择“打开文件...”选项,会弹出文件选择框,可以选择要打开的文件,或者直接点击文件夹图标,会直接弹出文件选择框
③在打开的文件右侧可以看到该文件的存储位置、类别和技能。 右侧显示课程的具体内容,不会显示评论。 同时还会将该类所在包下的其他类反编译成源码:
要将预览的 .class 文件转换为 .java 文件,只需单击“文件”菜单中的“保存”即可。
④ 另一种方式是直接打开jar包,用鼠标点击文件夹图标,会弹出文件选择框,选择一个jar包,点击“确定”
⑤ 从打开的界面中可以看到整个jar包中.class文件的反编译结果
顺便说一句,XJad的使用(使用方法和JD-GUI类似),虽然版本比较老,而且正式版已经10多年没有更新了,但早就废弃了。
但也可用:
使用说明:
========
1.打开一个或多个*.class文件,XJad反编译后,重命名为*.java文件,
保存到当前文件夹,并在编辑器中打开查看;
2、打开一个文件夹,XJad会反编译该文件夹中的所有*.class文件并保存在该文件夹中。
根据包路径信息生成文件夹路径,如com.spring.framework.*,
将构建comspringframework的文件夹结构;
3、打开一个*.jar文件,XJad将Jar文件中的所有*.class文件解压到临时目录并反编译。
并将带有包路径信息的源文件保存到当前文件夹下名为“~”+*.jar的文件夹中;
① 单文件反编译
反编译后苹果反编译源码,会在原.class所在文件夹中生成同名的.java源代码文件:
并且XJad会手动打开反编译后生成的源代码文件:
② 要反编译整个文件夹,可以选择一个文件夹,XJad 会反编译该文件夹下的所有.class 文件。
例如,我在盘符中新建一个文件夹FindPassword,里面只有一个FindPasswordController.class文件
然后选择反编译的文件夹:
确认后:
提示已经反编译成功。 现在我们到D:FindPassword查看一下,里面已经生成了一个按层次排列的源文件包。
点进去一看,文件夹里有刚刚反编译出来的源代码文件:
打开记事本看看,源码正常,但是没有注释
③jar包反编译
确认后
反编译后,jar包所在文件下会生成一个以“~”开头的源码文件夹:
打开它看看:
好了,JD-GUI和XJad的使用就介绍到这里了。
----------------------
工具下载:
1.JD-GUI(Java反编译工具)0.3.6绿色免费版.zip-CSDN下载
2.Java反编译工具(XJad) v2.2中文绿色版.zip【无需安装,直接解压运行】-CSDN下载