Wie eine ganze Jar-Datei zu dekompilieren? [geschlossen]
-
22-07-2019 - |
Frage
Kennt jemand einen freien Decompiler, die eine ganze Jar-Datei anstelle einer einzelnen Klasse dekompilieren kann? Ich habe ein Problem mit Unterklassen wie Name $ 1.class Name $ 2.Klasse name.class
Lösung
2009: Java Decompiler kann mit einem Glas einen guten Job machen: seit 0.2.5, Alle Dateien, in JAR-Dateien werden angezeigt.
Siehe auch die Frage „Wie kann ich‚dekompilieren‘ Java-Klasse-Dateien? ".
Die JD-Eclipse-scheint nicht seit Ende 2009 geändert zu haben, obwohl (siehe Änderungen ).
So seine Integration mit dem neuesten Eclipse-(3.8, 4.2 und höher) könnte problematisch sein.
JD-Core-aktiv gehalten wird.
Beide sind das Ergebnis der fantastischen Arbeit von (SO Benutzer) Emmanuel Dupuy .
2018: Eine modernere Option, genannt in den von David Kennedy Araujo Kommentare:
JetBrains / intellij-community / plugins / java-Decompiler / Motor
Fernflower ist die ersten tatsächlich arbeiten analytische Decompiler für Java und wahrscheinlich für einen High-Level-Programmiersprache 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 Wie Java-Dateien dekompilieren IntelliJ IDEA für einen Befehl mit dem letzten IntelliJ IDEA arbeiten.
Andere Tipps
Wenn Sie geschehen, sowohl einen Bash-Shell und 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 könnte ein winzig, klein bisschen weg mit, dass sein, aber es sollte wie in der Werbung mehr oder weniger arbeiten. Sie sollten mit $JAR.tmp
mit Ihren dekompilierten Dateien enden.
Zunächst einmal ist es zu bedenken, dass alle Java-Archivdateien (.jar
/ .war
/ etc ...) sind alle im Grunde nur fancy.zip
Dateien , mit ein paar zusätzlichen Manifeste und Metadaten.
Zweitens, um dieses Problem anzugehen ich persönlich mehrere Tools verwenden, die dieses Problem auf allen Ebenen behandeln:
- Jad + Jadclipse während für decompiling
.class
Dateien in IDE arbeiten - WinRAR , mein Lieblings-Kompressions-Tool unterstützt natives Java Archive (siehe wiederum erster Absatz).
- unvergleichbar , mein Lieblings Diff-Tool, wenn sie richtig auf konfiguriert tun -the-fly Vergleiche zwischen jeder Archivdatei, einschließlich
jar
s. Nun einen Versuch wert.
Der Vorteil von all den oben genannten, ist, dass ich kein anderes externes Werkzeug, das clutters meiner Arbeitsumgebung zu halten. Alles, was ich jemals von einem dieser Dateien benötigen, kann in meinem IDE oder diffed mit anderen Dateien nativ behandelt werden.
Ich habe angemessenen Erfolg mit einem Werkzeug namens (frustrierende) ": Java Decompiler JD" hatte.
Ich fand es besser als die meisten decompilers , wenn sie mit Klassen zusammengestellt für Java 5 und höher zu tun. Leider kann es immer noch einige Schluckauf haben, wo JAD normalerweise gelingen.
So etwas wie:
jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r
vielleicht?
Bitte geben Sie den folgenden in 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
- chmod + x decomplie.jar.sh // ausführbare
- ln -s ./decomplie.jar.s / usr / bin / dj
Ready to use, geben Sie einfach dj your.jar
und Sie werden your.jar.src
Ordner mit Quellen. Verwenden Sie -d
Option für den Debug-Modus.
Eine JAR-Datei ist nur eine Zip-Datei mit Glas-Erweiterung. Sie sollten in der Lage sein zu (Winzip) wie eine Zip-Datei ein Glas zu entpacken.
Sie es extrahieren und dann jad gegen die dir verwenden.
. 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 war zum Download MacJad die jad enthält. Sobald Sie es heruntergeladen haben jad in [where-you-Download-macjad] / MacJAD / Contents / Resources / jad finden.