有人知道免费的反编译器可以反编译整个Jar文件而不是单个类吗?我对诸如name $ 1.class name $ 2.class name.class之类的子类有问题
有人知道免费的反编译器可以反编译整个Jar文件而不是单个类吗?我对诸如name $ 1.class name $ 2.class name.class之类的子类有问题
Answers:
2009年:JavaDecompiler可以用jar很好地工作:由于0.2.5,因此显示JAR文件中的所有文件。
不过,自2009年下半年以来,JD-Eclipse似乎并未发生变化(请参阅“ 更改”)。
因此,将其与最新的Eclipse(3.8,4.2+)集成可能会出现问题。
JD-Core会得到积极维护。
两者都是(SO用户)Emmanuel Dupuy出色工作的结果。
2018:一个更现代的选项,提到在评论由大卫·肯尼迪阿劳霍:
JetBrains / intellij-community / plugins / java-decompiler / engine
Fernflower是第一个实际可用的Java反分析反编译器,并且可能是一般而言的高级编程语言。
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\
另请参阅如何使用最新的IntelliJ IDEA将命令反编译为Java文件intellij idea。
首先,值得记住的是,所有Java存档文件(.jar
/ .war
/ etc ...)基本上都是花哨的.zip
文件,其中包含一些清单和元数据。
其次,为解决此问题,我个人使用了几种工具来处理所有级别的问题:
.class
文件时jar
s)之间进行即时比较。非常值得一试。前面提到的所有优点是,我不需要拿着任何其他会使我的工作环境混乱的外部工具。这些文件之一所需要的一切都可以在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
在这个基本的循环结构中使用它,并且对我有用。
我使用(令人沮丧地)名为“ JD:Java Decompiler ” 的工具取得了合理的成功。
在处理针对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
调试模式选项。
您提取它,然后对目录使用jad。