00-反编译 JAR包
什么是Java反编译
Java反编译是一个对Java目标可执行程序进行逆向分析,从而得到原始代码的过程。
举一个例子,比如将 Java 源代码编译成 .class 字节码文件,那么把字节码文件转换成Java代码的过程就叫“反编译”。
知道了什么是Java反编译,那市面上有哪些主流Java反编译工具呢?
Java反编译 JAD 和 Jadclipse
JAD 是一款老牌的、经典的、使用起来简单的 Java 反编译工具,和eclipse的插件JadClipse,二者结合可以方便的在eclipse中查看class文件的源代码。
- 从官网 [https://sourceforge.net/projects/jadclipse/] 下载 jadClipse 的 jar 包到 eclipse 根目录下的
dropins
目录中(没有这个目录则新建) - 重启 eclipse 导航到
Windows
->Preferences
->Java
->jadClipse
(如果没有出现这一项,删除 eclipse 根目录下的configuration/org.eclipse.update
文件夹后重启 eclipse) - 在
Path to decompiler
中输入下载的 jad 的路径,如D:\dev\jad158g.win\jad.exe
- 导航到
Windows
->Perference
->General
->Editors
->File Associations
将*.class
和*.class without source
默认编辑器都设置为JadClipse Class File Viewer
- 然后就可以直接打开 .class 文件进行查看了
JD-GUI
JD-GUI是用C++开发的Java反编译器,它由PavelKouznetsov开发,支持三个平台:Windows、Linux和Apple MacOS。
JD分为JD-GUI、JD-Eclipse/JD-Intellij两种运行方式,JD-GUI是以单独的程序的方式运行,JD-GUI不需要安装,直接单击运行,JD-Eclipse/JD-Intellji则是以一个Eclipse/IDEA插件的方式运行。
官网:https://github.com/java-decompiler
使用非常方便,下载后将类文件或者 jar 包直接拖动到界面即可,如下图所示:
Luyten
Luyten是一款很强大的反编译工具包,是一款github的开源工具,软件功能非常强大,界面简洁明晰、操作方便快捷,设计得很人性化。
比较精准的一个java反编译工具,笔者有时候用jd-gui反编译不出来的class用luyten都可以反编译出来。
工具软件下载路径:https://github.com/deathmarine/Luyten/releases/tag/v0.5.3
直接在页面打开目标.class或者.jar包文件,即可直观的查看反编译后的源码,很强大,如下图所示:
CFR
CFR是一款功能强大的反编译工具,可以反编译类的注解,jd-gui无法反编译的,CFR却游刃有余。
反编译jar包方法:
把 cfr 工具(比如 cfr-0.150.jar)和要反编译的jar(比如 test.jar)放在一起
java -jar cfr-0.150.jar test.jar –outputdir ./
运行命令就可以把反编译后的test.jar代码保存到当前路径下。
arthas 反编译
如果我们想通过反编译查看服务器上运行的代码是不是正确地,该怎么办呢?有一个更好的工具:arthas。
是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。