有没有人知道一个可以反编译整个Jar文件而不是单个类的免费反编译器?我有一个处理子类名称如name$1.class name$2.class name.class的问题。
有没有人知道一个可以反编译整个Jar文件而不是单个类的免费反编译器?我有一个处理子类名称如name$1.class name$2.class name.class的问题。
Vineflower/vineflower
反编译器(版本)。java -jar vineflower.jar -dgs=1 c:\Temp\binary\library.jar c:\Temp\souce
2022更新:QuiltMC/quiltflower是最新的最先进的Java反编译器:
Quiltflower是一个现代化的、通用的反编译器,专注于提高代码质量、速度和易用性。
Quiltflower是Fernflower和Forgeflower的一个分支。
请查看输出示例。
Runs nice with jbang
https://github.com/QuiltMC/quiltflower/releases/download/1.8.1/quiltflower-1.8.1.jar
或者:
java -jar quiltflower.jar -dgs=1 c:\Temp\binary\library.jar c:\Temp\binary\Boot.class c:\Temp\source\
另请参阅“如何反编译Java类文件?”的问题。
然而,自2009年底以来,JD-Eclipse似乎没有变化(参见更改)。
因此,它与最新的Eclipse(3.8、4.2+)的集成可能会有问题。
JD-Core正在积极维护。
两者都是(SO用户)Emmanuel Dupuy出色工作的结果。
请参考如何在IntelliJ IDEA中反编译为Java文件,以获取与最近的IntelliJ IDEA配合使用的命令。Fernflower is the first actually working analytical decompiler for Java and probably for a high-level programming language in general.
java -jar fernflower.jar [-<option>=<value>]* [<source>]+ <destination> java -jar fernflower.jar -hes=0 -hdc=0 c:\Temp\binary\ -e=c:\Java\rt.jar c:\Temp\source\
这个很好用:jdec.app,来自Leonardo Santos。
首先,值得记住的是,所有Java归档文件(.jar
/.war
/等等...)都是基本上只是带有一些添加清单和元数据的花哨的.zip
文件。
其次,为了解决这个问题,我个人使用多个工具来处理这个问题的各个方面:
.class
文件jar
。非常值得一试。所有上述工具的优点是,我不需要保留任何其他外部工具,因为它们会使我的工作环境混乱。我将来自这些文件的所有内容都可以在我的IDE内部处理或与其他文件进行本地比较。
如果您同时拥有bash shell和jad:
JAR=(your jar file name)
unzip -d $JAR.tmp $JAR
pushd $JAR.tmp
for f in `find . -name '*.class'`; do
jad -d $(dirname $f) -s java -lnc $f
done
popd
我可能有一点点偏差,但它应该更或多或少按照广告所说的方式工作。你最终应该得到包含反编译文件的$JAR.tmp
。
javap
在这个基本的循环结构中,它对我很有效。 - Chris Princecd
和 cd -
,对于这个用例来说已经足够了 :-) - ljrk我使用过一个名为(令人沮丧的)"JD: Java反编译器"的工具,取得了合理的成功。
我发现与大多数反编译器相比,它在处理针对Java 5及更高版本编译的类时效果更好。不幸的是,它仍然可能会出现一些问题,而JAD通常可以成功。
类似这样:
jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r
也许呢?
将以下内容插入到decompile.jar.sh中
# Usage: decompile.jar.sh some.jar [-d]
# clean target folders
function clean_target {
rm -rf $unjar $src $jad_log
}
# clean all debug stuff
function clean_stuff {
rm -rf $unjar $jad_log
}
# the main function
function work {
jar=$1
unjar=`basename $jar.unjar`
src=`basename $jar.src`
jad_log=jad.log
clean_target
unzip -q $jar -d $unjar
jad -d $src -ff -r -lnc -o -s java $unjar/**/*.class > $jad_log 2>&1
if [ ! $debug ]; then
clean_stuff
fi
if [ -d $src ]
then
echo "$jar has been decompiled to $src"
else
echo "Got some problems check output or run in debug mode"
fi
}
function usage {
echo "This script extract and decompile JAR file"
echo "Usage: $0 some.jar [-d]"
echo " where: some.jar is the target to decompile"
echo " use -d for debug mode"
}
# check params
if [ -n "$1" ]
then
if [ "$2" == "-d" ]; then
debug=true
set -x
fi
work $1
else
usage
fi
准备就绪,只需输入dj your.jar
,您将获得带有源代码的your.jar.src
文件夹。使用-d
选项进行调试模式。
注意:此解决方案仅适用于 Mac 和 *nix 用户。
我也试图找到 Jad,但没有成功。我的快速解决方案是下载 MacJad,其中包含 jad。一旦你下载了它,你可以在 [where-you-downloaded-macjad]/MacJAD/Contents/Resources/jad 中找到 jad。
你需要先解压它,然后使用jad对该目录进行操作。