Java反编译工具使用对比,最好用的Java反编译工具 — JD-GUI、XJad

Java反编译工具使用对比,最好用的Java反编译工具 — JD-GUI、XJadJava 反编译工具使用对比 最好用的 Java 反编译工具 JD GUI 大家都知道 将源代码转换成二进制执行代码的过程叫 编译 比如将 C 源代码编译成 exe 可执行文件 那么把二进制执行代码转换成源代码的过程就叫 反编译 比如把 exe 转换为 C 源代码就叫 反编译 由于主流的 C 的编译器都进行了代码的优化 因此把 C 编译生成的 exe 文件反编译成 C 代码非常困难 但是像 Java net 这样基于虚拟机技术的编程语言则反编译非常容易 Java 平台下有 Jad Jode JD 等反编译器 net 平台

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/

2、Java反编译工具(XJad) v2.2 中文绿色版.zip 【免安装,直接解压运行】-CSDN下载  http://download.csdn.net/download/chenchunlin526/





三、反编译工具JD-GUI的使用

作为一个软件开发人员,在自学的成长道路上,不可避免的会借鉴别人开发完成的功能实现方法,js/css/html可以通过浏览器直接捕获,没有源码的能拿到calss文件也是一件幸事,那么如何查看class文件呢?这就要用到反编译工具了。

① JD-GUI这款Java反编译工具是纯绿色,完全免费的,非常适合开发者,其界面也简洁大方

Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad

② 鼠标单击“file”从中选择“Open File …“选项,弹出一个文件选择框,可以选择要打开的文件,或者直接单击文件夹图标,直接弹出文件选择框

Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad

③ 从打开的文件的左侧可以看到文件的保存位置,类及方法,右侧显示类的具体内容,注释不会显示,同时它会把这个类所在的包下的其他类也反编译成源码:

Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad

如需将预览的.class文件转换成.java文件,只需点击File菜单里的save即可。



④ 还有一种方法是直接打开jar包,鼠标单击文件夹图标,弹出文件选择框,选择一个jar包,单击‘确定’

Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad

⑤ 从打开的界面中可以看到整个jar包中的.class文件的反编译结果

Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad



顺便说一下XJad 的使用使用方法和JD-GUI都差不多),虽然版本比较老,且官方10多年没更新了,算是已经放弃了。

不过也可以可用:

使用说明:

========

1、打开一个或者多个*.class文件,XJad反编译后,重命名为*.java文件,

保存至当前文件夹,并在编辑器中打开查看;

2、打开一个文件夹,XJad将该文件夹下所有*.class文件进行反编译,并保存至该文件夹下,

依据包路径信息生成文件夹路径,如com.spring.framework.*,

将建立com\spring\framework的文件夹结构;

3、打开一个*.jar文件,XJad将该Jar文件中的所有*.class文件解压缩到临时目录并进行反编译,

并将源文件带包路径信息保存至当前文件夹下名称为“~” + *.jar 的文件夹中;


① 单个文件反编译
Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad



反编译好之后,会在原来的.class所在文件夹下生成一个同名的.java源码文件:
Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad

且XJad会自动打开反编译后生成的源码文件:
Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad



② 整个文件夹反编译,可以选择一个文件夹,XJad会把该文件夹下的所有.class文件全部反编译好。
比如,我的D盘新建一个文件夹,FindPassword,里面只有个FindPasswordController.class文件
Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad

然后选择 反编译文件夹:
Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad



确定之后:
Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad

提示已经反编译成功,我们现在到 D:\FindPassword 里查看,里面已经生成了一个按层次结构排行的源码文件包了
Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad



点进去看一下,文件夹里有刚反编译好的源码文件了:
Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad



记事本打开看一下,源码正常,只是没有了注释了
Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad



③ jar包反编译
Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad



确定之后
Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad

反编译之后,会在jar包所在的文件下,生成一个以“~”开头的源码文件夹:
Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad

打开进去看一下:
Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad



好了,JD-GUI 和 XJad的使用介绍到此介绍了。

———————-

工具下载:

1、JD-GUI(Java反编译工具) 0.3.6 绿色免费版.zip-CSDN下载  http://download.csdn.net/download/chenchunlin526/

2、Java反编译工具(XJad) v2.2 中文绿色版.zip 【免安装,直接解压运行】-CSDN下载  http://download.csdn.net/download/chenchunlin526/





版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215703.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午1:38
下一篇 2026年3月18日 下午1:38


相关推荐

  • java 零拷贝_java深拷贝

    java 零拷贝_java深拷贝在传统的数据IO模式中,读取一个磁盘文件,并发送到远程端的服务,就共有四次用户空间与内核空间的上下文切换,四次数据复制,分别是两次CPU数据复制,两次DMA数据复制。零拷贝指在进行数据IO或传输时,数据在用户态下经历了零次拷贝,并非不拷贝数据。通过减少数据传输过程中内核缓冲区和用户进程缓冲区间不必要的CPU数据拷贝与用户态和内核态的上下文切换次数,降低CPU在这两方面的开销,释放CPU执行其他任务,更有效的利用系统资源,提高传输效率,同时还减少了内存的占用,提升应用程序的性能

    2026年2月10日
    6
  • networkmanager服务是否启动_nmcli开热点

    networkmanager服务是否启动_nmcli开热点一、简介NetworkManager服务是管理和监控网络设置的守护进程,CentOS7更加注重使用NetworkManager服务来实现网络的配置和管理,CentOS7以前是通过network服务管理网络,以后的版本所有网络管理和设置统一由NetworkManager服务来维护。它是一个动态的,事件驱动的网络管理服务。NetworkManager在系统中的管理工具为nmcli二、nmcli简单使用2.1、查看#查看所有硬件设备信息nmclideviceshow#查看制定设备信息

    2022年10月4日
    5
  • 第九章《事务》

    第九章《事务》

    2021年5月29日
    90
  • 7.2_securecrt使用教程、SecureCRT配置详细图文教程

    7.2_securecrt使用教程、SecureCRT配置详细图文教程SecureCRT 是一款支持 SSH2 SSH1 Telnet Telnet SSH Relogin Serial TAPI RAW 等协议的终端仿真程序 最吸引我的是 SecureCRT 支持标签化 SSH 对话 从而可方便地管理多个 SSH 连接 设置项也极为丰富 简单的说是 Windows 下登录 UNIX Linux 服务器主机的软件 SecureCRT 支持 SSH 同时支持 Telnet 和 rlog

    2026年3月26日
    3
  • mysql dnslog_dnslog小技巧

    mysql dnslog_dnslog小技巧一 dnslog 利用场景主要针对无回显的情况 Sql BlindRCESSRF RemoteFileIn 二 原理将 dnslog 平台中的特有字段 payload 带入目标发起 dns 请求 通过 dns 解析将请求后的关键信息组合成新的三级域名带出 在 ns 服务器的 dns 日志中显示出来 三 案例展示 1 sql 盲注普通的注入输入 1 and 1 1 查询成功 1 and 1

    2026年3月18日
    2
  • 一文让你测底明白如何在 Spring Boot 上传中将 MultipartFile 转 File 对象

    一文让你测底明白如何在 Spring Boot 上传中将 MultipartFile 转 File 对象

    2026年3月15日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号