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

War es hilfreich?

Lösung

2009: Java Decompiler kann mit einem Glas einen guten Job machen: seit 0.2.5, Alle Dateien, in JAR-Dateien werden angezeigt.

http://java.decompiler.free.fr/sites/default/screenshots/screenshot1.png

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 jars. 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.

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top