Domanda

Qualcuno conosce un decompilatore gratuito che può decompilare un intero file Jar anziché una singola classe? Ho un problema con le sottoclassi come name $ 1.class name $ 2.class name.class

È stato utile?

Soluzione

2009: JavaDecompiler può fare un buon lavoro con un vaso: da 0.2.5, Tutti i file, in Vengono visualizzati i file JAR.

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

Vedi anche la domanda " Come posso fare & # 8220; decompilare & # 8221; File di classe Java? & Quot; .

JD-Eclipse non sembra essere cambiato dalla fine del 2009 (vedi modifiche ).
Quindi la sua integrazione con l'ultimo Eclipse (3.8, 4.2+) potrebbe essere problematica.

JD-Core è attivamente mantenuto.

Entrambi sono il risultato del fantastico lavoro di (utente SO) Emmanuel Dupuy .


2018: un'opzione più moderna, menzionata nei commenti di David Kennedy Araujo :

JetBrains / intellij-community / plugins / java-decompilatore / motore

  

Fernflower è il primo decompilatore analitico realmente funzionante per Java e probabilmente per un linguaggio di programmazione di alto livello in generale.

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\

Vedi anche Come decompilare in file java intellij idea per un comando che funziona con IntelliJ IDEA recente.

Altri suggerimenti

Se ti capita di avere sia una shell bash che una 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

Potrei essere un po 'piccolo con quello, ma dovrebbe funzionare più o meno come pubblicizzato. Dovresti finire con $ JAR.tmp contenente i tuoi file decompilati.

Prima di tutto, vale la pena ricordare che tutti i file di archivio Java ( .jar / .war / etc ...) sono praticamente tutti solo fantasiosi < code> .zip file , con alcuni manifest e metadati aggiunti.

In secondo luogo, per affrontare questo problema uso personalmente diversi strumenti che gestiscono questo problema a tutti i livelli:

  • Jad + Jadclipse mentre si lavora in IDE per decompilare i file .class
  • WinRAR , il mio strumento di compressione preferito supporta nativamente gli archivi Java (di nuovo, vedi primo paragrafo).
  • Beyond Compare , il mio strumento diff preferito, se configurato correttamente può fare su confronti al volo tra qualsiasi file di archivio, inclusi jar . Vale la pena provare.

Il vantaggio di tutti i suddetti è che non ho bisogno di alcun altro strumento esterno che ingombra il mio ambiente di lavoro. Tutto ciò di cui avrò mai bisogno da uno di questi file può essere gestito all'interno del mio IDE o diffuso in modo nativo con altri file.

Ho avuto un discreto successo con uno strumento chiamato (frustrante) " JD: Java Decompiler " ;.

L'ho trovato migliore della maggior parte dei decompilatori quando ho a che fare con le classi compilate per Java 5 e successive . Sfortunatamente, può ancora avere qualche singhiozzo in cui JAD avrebbe normalmente successo.

Qualcosa del tipo:

jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r

forse?

Inserisci quanto segue 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: <*> 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 // eseguibile
  • ln -s ./decomplie.jar.s / usr / bin / dj

Pronto per l'uso, basta digitare dj your.jar e otterrai la cartella your.jar.src con i sorgenti. Utilizzare l'opzione -d per la modalità debug.

Un file jar è solo un file zip con estensione jar. Dovresti essere in grado di decomprimere (winzip) un barattolo proprio come un file zip.

Lo estrai e poi usi jad contro la directory.

Nota: questa soluzione funziona solo per utenti Mac e * nix.

Ho anche provato a trovare Jad senza fortuna. La mia rapida soluzione è stata quella di scaricare MacJad che contiene jad. Una volta scaricato, puoi trovare jad in [dove-hai-scaricato-macjad] / MacJAD / Contenuti / Risorse / jad.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top