1、通过java-decompiler.jar进行反编译
可以使用 IDEA 中的 “Java Bytecode Decompiler”,该插件一般都内置了,可以直接使用,即java-decompiler.jar,位置:
./JetBrains/IntelliJ IDEA 2020.3.2/plugins/java-decompiler/lib/java-decompiler.jar
如何反编译jar包:
D:/jdk11/bin/java.exe -cp "D:/JetBrains/IntelliJ IDEA 2020.3.2/plugins/java-decompiler/lib/java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true C:/Users/admin/Downloads/DataStorage-5.1.jar DataStorage
# D:/jdk11/bin/java.exe java路径,配置了path的可以直接使用java -cp,这样写的好处是可以指定jre版本
# "D:/JetBrains/IntelliJ IDEA 2020.3.2/plugins/java-decompiler/lib/java-decompiler.jar" java-decompiler.jar的位置
# org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler 执行反编译的类
# -dgs=true
# C:/Users/admin/Downloads/DataStorage-5.1.jar jar包或.class文件所在位置
# DataStorage 默认是jar包或.class文件所在文件夹中的文件夹名称,要提前创建好,也可以给完整的路径
执行情况:
结果:
如果报错,说明编译java使用的jre版本比较高,需要安装这个版本的jre来执行编译命令
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/jetbrains/java/decompiler/main/decompiler/ConsoleDec
ompiler has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java
Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
class file version 与jre版本对应关系
49 = Java 5
50 = Java 6
51 = Java 7
52 = Java 8
53 = Java 9
54 = Java 10
55 = Java 11
56 = Java 12
57 = Java 13
58 = Java 14
2、JD-GUI
其实本质上也是使用java-decompiler.jar这个,只是jar包的作者写了一个gui的操作页面可以更方便的反编译jar包或.class文件
源码位置: https://github.com/java-decompiler/jd-gui
在简介中可以找到JD-GUI的下载位置
下载位置:http://java-decompiler.github.io
下载完后点击exe文件即可使用