jar包或.class文件反编译

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文件即可使用
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: jar文件Java语言中常见的一种打包文件格式,它将多个Java文件、资源文件和其他文件打包成一个文件。一般情况下,jar文件是已经编译成机器码的二进制文件,无法直接查看其中的源代码。但是,通过使用反编译工具,我们可以将jar文件中的字节码还原成Java源代码。 在进行jar文件反编译时,我们通常会使用一些专门的反编译工具,如Java Decompiler、JD-GUI等。这些工具能够将jar文件中的字节码重新转换成Java源代码,并呈现给我们查看和分析。 使用这些反编译工具,我们可以对jar文件中的代码进行查看、修改和学习。例如,我们可以查看第三方库的源码,了解其实现原理;或者对某个jar文件进行定制修改,以适应特定需求。 需要注意的是,虽然反编译可以还原代码的结构和逻辑,但无法还原原始的变量名和注释。这是因为在编译过程中,Java源代码的变量名和注释会被编译器丢弃,只保留了与机器码执行有关的信息。因此,在反编译后的代码中,我们可能会看到一些类似"var1"、"var2"这样的临时变量名,而注释则可能被省略或被替换成了一些默认的注释。 总之,通过反编译jar文件,我们可以获取到其中的Java源代码,从而进行代码的分析和修改。这对于学习和项目调试等方面都起到了重要的作用。 ### 回答2: jar文件是一种Java语言的归档文件格式,可以将多个Java文件打包成一个文件反编译指的是将已经编译过的二进制文件(如jar文件)转换回可读的源代码。 要反编译一个jar文件中的Java源码,我们可以使用各种反编译工具,例如JD-GUI、Java Decompiler、FernFlower等。 首先,我们需要将jar文件导入到反编译工具中。这些工具通常提供一个用户界面,让我们可以轻松地导入并查看jar文件的内容。在工具的界面上,我们可以看到jar文件中包含的类文件和资源文件的列表。 接下来,我们可以选择一个或多个类文件,并使用反编译工具将其转换成可读的Java源码。这些工具通常会将反编译后的源代码显示在一个编辑器或浏览器窗口中,使我们能够查看和编辑源代码。 需要注意的是,由于编译后的二进制文件丢失了一些原始代码的信息(如变量和方法名),所以反编译后的源码可能不会与原始源代码完全相同。此外,反编译后的源码可能也会缺少一些编译器优化后的改进。 总结起来,jar文件反编译Java源码是一种将已编译的二进制文件转换回可读的源代码的过程。通过使用反编译工具,我们可以将jar文件中的类文件转换成可读的Java源码,以便于我们查看和编辑源代码。但需要注意的是,反编译后的源码可能与原始源代码存在一些差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值