Qualcuno sa di un decompilatore gratuito che può decompilare un intero file Jar invece di una singola classe? Ho un problema con le sottoclassi come name $ 1.class name $ 2.class name.class
Qualcuno sa di un decompilatore gratuito che può decompilare un intero file Jar invece di una singola classe? Ho un problema con le sottoclassi come name $ 1.class name $ 2.class name.class
Risposte:
2009: JavaDecompiler può fare un buon lavoro con un jar: da 0.2.5, vengono visualizzati tutti i file, in file JAR.
Vedi anche la domanda "Come posso" decompilare "i file di classe Java?" .
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 i file java intellij idea per un comando che funziona con IntelliJ IDEA recente.
Prima di tutto, vale la pena ricordare che tutti i file di archivio Java ( .jar
/ .war
/ etc ...) sono fondamentalmente solo .zip
file di fantasia , 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:
.class
filejar
s. Vale la pena provare.Il vantaggio di tutti i summenzionati è 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.
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 il $JAR.tmp
contenere i tuoi file decompilati.
javap
all'interno di questa struttura ad anello di base e funziona per me.
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 di simile a:
jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r
può essere?
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: $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
Pronto per l'uso, basta digitare dj your.jar
e otterrai la your.jar.src
cartella con le fonti. Utilizzare l' -d
opzione per la modalità debug.
Lo estrai e poi usi jad contro la dir.