Java 反编译工具哪家强?
点击上方蓝色字体,选择“标星公众号”
优质文章,第一时间送达
大家都知道,将源代码转换成二进制执行代码的过程叫“编译”,比如将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转换为代码了。
JD-GUI是属于Java Decompiler项目(JD项目)下个的图形化运行方式的反编译器。
JD-Eclipse属于Java Decompiler项目(JD项目)下个Eclipse插件化运行方式的反编译插件。
JD-IntelliJ属于Java Decompiler项目(JD项目)下个Intellij插件化的运行方式的反编译插件。
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库。
XJad是基于Jad核心的Java源程序反编译软件,内置Jad1.5.8e2;
可处理多个*.class文件,可以处理文件夹内的所有文件,甚至可以处理*.jar文件;
带有多页面文本编辑器,也可集成在资源管理器中,随时点击右键都可进行操作;
支持java语法的高亮显示;
使用说明:
========
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的使用介绍到此介绍了。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:
https://blog.csdn.net/chenchunlin526/article/details/78259682
粉丝福利:Java从入门到入土学习路线图
👇👇👇
👆长按上方微信二维码 2 秒
感谢点赞支持下哈