反编译jar的class文件
前言
我们在进行代码审计的时候,很多时候我们只能拿到jar或者war之类的部署包。直接解压jar包是class文件,虽然放在idea里面也可以解析查看内容,但是不能够编辑修改等。下面我们学习一下怎么反编译成Java文件(前提是jar没有被做过特殊处理)
JAD
下载:https://varaneckas.com/jad/
把classes文件放在文件夹后,放在jad同一个文件夹下面,执行命令
执行命令
jad -o -r -s java -d decodeJava classes/**/*.class
反编译之后的Java文件就在decodeJava文件夹下
Luyten
下载:https://github.com/deathmarine/Luyten
设置编码(中文乱码)
需进行下面的配置,反编译后的中文才能正常显示。否则,是 Unicode 编码
选择要反编译的 jar 文件
生成 & 保存反编译后的 java 文件
IDEA自带的插件
进行反编译
利用Idea直接查看引入的jar包,或者利用idea反编译插件,将jar包变成java文件。
Mac
java -cp "/Applications/IntelliJ IDEA.app/Contents/plugins/java-decompiler/lib/java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true *.jar "/Users/***"
Window
I:/java15/openjdk-15-36_windows-x64_bin/jdk-15/bin/java.exe -cp "I:/idea/IntelliJ IDEA 2020.1/plugins/java-decompiler/lib/java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true *.jar "./result"
参数说明
-
idea自带的反编译插件我位置—— /Applications/IntelliJ IDEA.app/Contents/plugins/java-decompiler/lib/java-decompiler.jar -
需要反编译的jar包——*.jar -
结果输出位置——"/Users/***"
结果输出后还是一个jar文件,直接解压就可以,里面是.java格式的
碰到错误处理方式
-
我猜测该问题原因是idea自带jvm是11版本的,然后这个包是使用jdk11编译的 -
运行的时候用的是自己的环境,52就代表了1.8版本,低版本编译在高版本可以兼容运行,但是高版本的编译在低版本就无法运行
换成高版本的jdk解决
class version对应的版本
Java 1.0 45.0
Java 1.1 45.3
Java 1.2 46.0
Java 1.3 47.0
Java 1.4 48.0
Java 5 49.0
Java 6 50.0
Java 7 51.0
Java 8 52.0
Java 9 53.0
Java 10 54.0
Java 11 55.0
Java 12 56.0
Java 13 57.0
Java 14 58.0
Java 15 59.0
Java 16 60.0
Java 17 61.0
Java 18 62.0
Java 19 63.0
批量反编译
Mac
for z in *.jar;
do /Users/java15/jdk-15.0.2.jdk/Contents/Home/bin/java -cp "/Applications/IntelliJ IDEA.app/Contents/plugins/java-decompiler/lib/java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true $z "/Users/lib";
done
Window(poweershell)
foreach ($i in Get-ChildItem -Include *.jar -Recurse) { I:/java15/openjdk-15-36_windows-x64_bin/jdk-15/bin/java.exe -cp "I:/idea/IntelliJ IDEA 2020.1/plugins/java-decompiler/lib/java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true $i "./result" }
批量解压
Mac
for f in *.zip; do unzip $f; done
Windows
直接使用压缩软件批量
原文始发于微信公众号(pentest):反编译jar的class文件
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论