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.classCome decompilare un intero file Jar?
risposta
JavaDecompiler può fare un buon lavoro con un barattolo: da 0.2.5, vengono visualizzati tutti i file, in file JAR.
Vedi anche the question "How do I “decompile” Java class files?".
La JD-Eclipse non sembra essere cambiata dalla fine del 2009 (vedi Changes).
Quindi la sua integrazione con l'ultimo Eclipse (3.8, 4.2+) potrebbe essere problematico.
JD-Core viene mantenuto attivamente.
Entrambi sono il risultato del fantastico lavoro di (utente SO) Emmanuel Dupuy.
fyi, java decompiler funziona su windows, mac e linux. – yanokwa
@AlexS nice :) Passaggio successivo: controllo della versione (http://stackoverflow.com/questions/59561/what-tools-techniques-can-benefit-a-solo-developer) E quindi Integrazione continua (http: // stackoverflow .com/questions/130592/is-continuous-integration-important-for-a-solo-developer) – VonC
Chiunque ha il plug-in di eclipse per funzionare più con l'ultima eclissi e jdk7? Ho provato ma ottengo un errore di download. JD-Gui funziona ma jd-eclipse sembra fallire per me ... –
Si estrae e poi si usa jad contro la dir.
Non penso che tu possa semplicemente farlo contro la dir. Dovrai specificare {dir}/**/*. Classe – Vihung
Estrarre il jar e usare qualcosa come jad {dir}, l'ho appena testato e non funziona su Windows –
Un file jar è solo un file zip con estensione jar. Dovresti essere in grado di decomprimere (winzip) un jar proprio come un file zip.
Se vi capita di avere sia una shell bash e 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 piccolo, minuscolo po 'fuori con questo, ma dovrebbe funzionare più o meno come pubblicizzato. Dovresti finire con $JAR.tmp
contenente i tuoi file decompilati.
su ubuntu usa #!/Bin/bash invece di #!/Bin/sh perché beccous push non funziona per la shell di ubuntu predefinita ... – mossplix
Sto usando 'javap' all'interno di questa struttura di loop di base, e funziona per me. –
Prima di tutto, vale la pena ricordare che tutti i file Java Archive (.jar
/.war
/ecc ...) sono tutti .zip
file fondamentalmente solo fantasia, con un paio di manifesti aggiunto e metadati.
In secondo luogo, per affrontare questo problema Io personalmente uso diversi strumenti che trattano questo problema su tutti i livelli:
- Jad + Jadclipse mentre si lavora in IDE per decompilazione
.class
file - WinRAR, il mio strumento di compressione preferito nativamente supporta gli archivi Java (di nuovo, vedi il primo paragrafo).
- Beyond Compare, il mio strumento diff preferito, se configurato correttamente, può effettuare confronti al volo tra qualsiasi file di archivio, incluso
jar
s. Vale la pena provare.
Il vantaggio di tutti i suddetti è che non è necessario tenere nessun 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 con altri file in modo nativo.
lolz continuo a decomprimere le estensioni di chrome e firefox e ho dimenticato che .jar sono solo delle zip :) –
Il link a Jad è morto. – Zero3
Nota: questa soluzione funziona solo per utenti Mac e * nix.
Ho anche provato a trovare Jad senza fortuna. La mia soluzione rapida era scaricare MacJad che contiene jad. Una volta scaricato, puoi trovare jad in [where-you-download-macjad]/MacJAD/Contents/Resources/jad.
Ho avuto un discreto successo con uno strumento chiamato (frustrante) "JD: Java Decompiler".
L'ho trovato migliore della maggior parte dei decompilatori quando si tratta di classi compilate per Java 5 e successive. Sfortunatamente, può ancora avere qualche singhiozzo in cui normalmente il JAD avrebbe avuto successo.
Non è stato possibile scaricare la versione Windows o Linux di JD-GUI. Questo problema mi sembra solo? – mmdemirbas
@JanusTroelsen L'ho cancellato. Grazie per avermelo informato. Consente di mantenere pulite le risposte :) – pramodc84
Il collegamento è morto. – Zero3
Qualcosa di simile:
jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r
forse?
Ho usato jad per un po 'e avevo bisogno di un modo rapido per estrarre e decompilare un intero barattolo. Grazie, questo ha aiutato immensamente. –
Inserire il seguente 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 // eseguibile
- ln -s ./decomplie.jar.s/usr/bin/dJ
pronto all'uso, basta digitare dj your.jar
e si otterrà cartella your.jar.src
con le fonti. Utilizzare l'opzione -d
per la modalità di debug.
Grazie, ma ho dovuto cambiare "jad" in "./jad" sulla riga 23 ed eseguire "bash decompile.jar.sh foo.jar -d" perché non volevo inquinare la mia cartella bin – Sam
nessun ricompilatore? ricompila i file jad in jar? –
Ricorda due cose: 1) I copyright esistono per la fonte, la decompilazione e il riutilizzo sono un po 'sfuggenti e illegali nella maggior parte dei paesi 2) Anche con il fantasioso JavaDecompiler non otterrai la fonte originale. – Esko
grazie, ed è una piccola applet e voglio solo vedere e studiare il codice sorgente, non rubarlo. – StoneHeart
Ricorda altre due cose: 1) La semplice menzione di un decompilatore farà sì che il "più santo di te" esca e formuli giudizi di valore sui tuoi motivi, pur non avendo idea di quale sia l'utilizzo previsto, quindi fai attenzione a chi parli. 2) Il fantasioso JavaDecompiler ti darà un'eccellente interpretazione del codice, ben strutturata e di facile lettura - mancano solo commenti. È incredibilmente buono, recuperando un file JAR che aveva una fonte persa da tempo completa di nomi di variabili. Ovviamente non nascondiamo i nostri file JAR interni. – Andrew