Kennt jemand einen kostenlosen Dekompiler, der eine gesamte Jar-Datei anstelle einer einzelnen Klasse dekompilieren kann? Ich habe ein Problem mit Unterklassen wie Name $ 1.Klassenname $ 2.Klassenname.Klasse
Kennt jemand einen kostenlosen Dekompiler, der eine gesamte Jar-Datei anstelle einer einzelnen Klasse dekompilieren kann? Ich habe ein Problem mit Unterklassen wie Name $ 1.Klassenname $ 2.Klassenname.Klasse
Antworten:
2009: JavaDecompiler kann mit einem JAR gute Arbeit leisten: Seit 0.2.5 werden alle Dateien in JAR-Dateien angezeigt.
Siehe auch die Frage "Wie" dekompiliere "ich Java-Klassendateien?" .
Die JD-Eclipse scheint sich jedoch seit Ende 2009 nicht geändert zu haben (siehe Änderungen ).
Daher kann die Integration in die neueste Version von Eclipse (3.8, 4.2+) problematisch sein.
JD-Core wird aktiv gewartet.
Beide sind das Ergebnis der fantastischen Arbeit von (SO-Benutzer) Emmanuel Dupuy .
2018: Eine modernere Option, die in den Kommentaren von David Kennedy Araujo erwähnt wird :
JetBrains / Intellij-Community / Plugins / Java-Dekompiler / Engine
Fernflower ist der erste tatsächlich funktionierende analytische Dekompiler für Java und wahrscheinlich für eine Programmiersprache auf hoher Ebene im Allgemeinen.
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\
Siehe auch Dekompilieren in Java-Dateien Intellij Idee für einen Befehl, der mit der neuesten IntelliJ IDEA arbeitet.
Zunächst ist zu beachten, dass alle Java-Archivdateien ( .jar
/ .war
/ etc ...) im Grunde genommen nur ausgefallene .zip
Dateien sind , mit einigen zusätzlichen Manifesten und Metadaten.
Zweitens verwende ich persönlich mehrere Tools, um dieses Problem auf allen Ebenen zu lösen:
.class
Dateienjar
s, durchführen. Einen Versuch wert.Der Vorteil all der oben genannten ist, dass ich kein anderes externes Werkzeug halten muss, das meine Arbeitsumgebung überfüllt. Alles, was ich jemals von einer dieser Dateien benötige, kann in meiner IDE verarbeitet oder nativ von anderen Dateien unterschieden werden.
Wenn Sie zufällig sowohl eine Bash-Shell als auch einen Jad haben:
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
Ich mag ein kleines bisschen damit einverstanden sein, aber es sollte mehr oder weniger wie angekündigt funktionieren. Sie sollten am Ende $JAR.tmp
Ihre dekompilierten Dateien enthalten.
javap
innerhalb dieser grundlegenden Schleifenstruktur und es funktioniert für mich.
Ich hatte vernünftigen Erfolg mit einem Tool namens (frustrierend) " JD: Java Decompiler ".
Ich habe es besser gefunden als die meisten Dekompilierer, wenn es um Klassen geht, die für Java 5 und höher kompiliert wurden . Leider kann es immer noch zu Schluckauf kommen, bei denen JAD normalerweise erfolgreich wäre.
Etwas wie:
jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r
vielleicht?
Fügen Sie Folgendes in decompile.jar.sh ein
# 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
Gebrauchsfertig, geben Sie einfach ein dj your.jar
und Sie erhalten einen your.jar.src
Ordner mit Quellen. Verwenden Sie die -d
Option für den Debug-Modus.
Sie extrahieren es und verwenden dann jad gegen das Verzeichnis.
Hinweis: Diese Lösung funktioniert nur für Mac- und * nix-Benutzer.
Ich habe auch versucht, Jad ohne Glück zu finden. Meine schnelle Lösung bestand darin, MacJad herunterzuladen , das Jad enthält. Sobald Sie es heruntergeladen haben, finden Sie jad unter [wo Sie Macjad heruntergeladen haben] / MacJAD / Contents / Resources / jad.