反编译JAR能干什么: 排查问题、分析商业软件代码逻辑,学习优秀的源码思路。
下载地址:http://java-decompiler.github.io/
点评:支持的java版本不会太高,中文注释能够正常显示。
下载地址:https://github.com/deathmarine/Luyten
点评: 支持更多,但是中文不正常显示。底层使用的是Procyon。
下载地址:https://github.com/skylot/jadx
点评:卡了很长时间都没显示解析完,很耗内存与时间。
下载地址:https://github.com/Konloch/bytecode-viewer
点评:大部分都能正常查看,也能够查看字节码指令。
下载地址:https://github.com/google/android-classyshark
点评: 测试两个jar都直接失败,放弃。
jd-gui.exe功能多但是支持java版本不太高,Luyten支持版本更多,但是中文显示不好。Bytecode Viewer也不错。Jadx强项在APK逆向方面,更吃资源。Class Shark使用未成功,你们看着办。
实际上面的反编译的工具失败了,我们还可以利用Idea自带的反编译工具。
新建一个Maven项目,在项目的pom中加入需要反编译的Jar包,groupId、artifactId可以随便写。
<dependency>
<groupId>vip.codehomegroupId>
<artifactId>testartifactId>
<scope>systemscope>
<version>1.0version>
<systemPath>C:\\Users\\codehome\\Desktop\\{jar名称}.jarsystemPath>
dependency>
JD-GUI是一款开源的反编译软件,通过它我们可以比较方便的进行jar包的反编译。
1、其下载地址如下所示
2、下载完成后,解压压缩包即可
3、我这里以mac系统为例,双击打开解压文件夹中JD-GUI
程序
新版m1芯片mac可能会出现如下报错
提示内容描述的是需要jdk1.8以上,实际上并不是这个原因,我这里使用的是jdk11,要解决这个问题还需要修改一个文件
2、右键点击JD-GUI
,点击显示包内容
3、进入Contents/MacOS
文件夹,打开universalJavaApplicationStub.sh
文件,使用新版的文件替换,新版文件内容可以在如下地址复制
https://raw.githubusercontent.com/tofi86/universalJavaApplicationStub/master/src/universalJavaApplicationStub
4、双击打开软件,将需要反编译的jar包拖到软件界面中
5、选中全部文件,点击File-Save All Sources
保存反编译完的源码,选择保存路径
6、等待反编译完成即可
7、反编译完成后,在BOOT-INF/classes
文件夹下可以看到生成的源码
如此我们就拿到了想要的源码了,简单快捷!当然生成的源码在文件夹结构上会有些偏差,只需要手动调整一下即可,核心源码是可以完整捕捉的。
项目上线后,如果遇到问题阻塞,我们第一步要做的就是去查看日志,但是代码不是一个人写的,说不定就会遇到没有日志的,遇到这种情况,只能去看日志的报错行数是哪里,否则,无从下手。
查看日志报错行数时,发现现有代码又和线上的代码不一致,怎么办?
这个时候我们就需要反编译,反编译有很多工具可以使用,比如JD-GUI
。本文接下来就介绍一下如何通过我们神奇的Idea
软件进行反编译jar包。
首先,我们要保证IDEA中有反编译插件。通过【File】——>【Settings】——>【Plugins】输入Decompiler
进行查看,看是否有Java Decompiler
这个插件。
没有安装就下载安装,然后重启IDEA即可。
test
文件夹
3. 黄色代码是替换的内容
java -cp + “插件路径” + org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true + jar包 + 反编译后存储位置
java -cp "D:\IDEA\IntelliJ IDEA 2020.1.4\plugins\java-decompiler\lib\java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true test.jar test
4.然后才此目录下执行命令(两种方式都可以,自行选择)
4.1 通过 cmd 的方式反编译,输入 cmd 回车,输入上面的命令回车
4.2 通过 Git Bash Here 的方式反编译,在当前目录下右键Git Bash Here,输入上面的命令回车
**注意 **:如果不先创建目录,就执行的话,可能会报错。