Come posso aprire i file Java .class in modo leggibile dall'uomo?
Domanda
Sto cercando di capire cosa sta facendo il file di classe di un'applet Java sotto il cofano.Aprendolo con Blocco note o Blocco di testo mostra solo un mucchio di sciocchezze.
C'è un modo per riportarlo in un formato abbastanza leggibile in modo da poter provare a capire cosa sta facendo?
- Ambiente == Windows con VS 2008 installato.
Soluzione
jd-gui è il miglior decompilatore al momento.può gestire funzionalità più recenti in Java, rispetto al JAD sempre più polveroso.
Altri suggerimenti
Se non ti dispiace leggere il bytecode, javap dovrebbe funzionare bene.Fa parte dell'installazione JDK standard.
Usage: javap <options> <classes>...
where options include:
-c Disassemble the code
-classpath <pathlist> Specify where to find user class files
-extdirs <dirs> Override location of installed extensions
-help Print this usage message
-J<flag> Pass <flag> directly to the runtime system
-l Print line number and local variable tables
-public Show only public classes and members
-protected Show protected/public classes and members
-package Show package/protected/public classes
and members (default)
-private Show all classes and members
-s Print internal type signatures
-bootclasspath <pathlist> Override location of class files loaded
by the bootstrap class loader
-verbose Print stack size, number of locals and args for methods
If verifying, print reasons for failure
Se vuoi un decompilatore Java, puoi utilizzare lo strumento da riga di comando javap
per fare questo.Anche, Istruzioni per la decompilazione Java descrive come decompilare un file di classe.
quello che stai cercando è un decompilatore Java.Raccomando JAD http://www.kpdus.com/jad.html È gratuito per uso non commerciale e porta a termine il lavoro.
Nota:questo non renderà il codice esattamente uguale a quello che è stato scritto.cioè.perderai commenti e forse nomi di variabili, quindi sarà un po' più difficile che leggere semplicemente il normale codice sorgente.Se lo sviluppatore è davvero riservato, avrà offuscato anche il proprio codice, rendendolo ancora più difficile da leggere.
cpuguru, se la tua applet è stata compilata con javac 1.3 (o inferiore), la soluzione migliore è utilizzare Jad.
Sfortunatamente, l'ultimo JDK supportato da JAD 1.5.8 (14 aprile 2001) è JDK 1.3.
Se la tua applet è stata compilata con un compilatore più recente, potresti provare JD-GUI :questo decompilatore è in fase di sviluppo, tuttavia, genera sorgenti Java corretti, la maggior parte delle volte, per le classi compilate con JDK 1.4, 1.5 o 1.6.
DarenW, grazie per il tuo post.JD-GUI non è ancora il miglior decompilatore...ma ci sto lavorando :)
Come sottolineato da @MichaelMyers, usa
javap -c <name of java class file>
per ottenere il codice assembly JVM.Puoi anche reindirizzare l'output in un file di testo per una migliore visibilità.
javap -c <name of java class file> > decompiled.txt
Utilizzando Jad decompilarlo è probabilmente la soluzione migliore.A meno che il codice non sia stato offuscato, produrrà un risultato accettabile.
Questo è codice compilato, dovrai utilizzare un decompilatore come JAD: http://www.kpdus.com/jad.html
È necessario utilizzare un decompilatore.Altri hanno suggerito JAD, ci sono altre opzioni, JAD è la migliore.
Farò eco ai commenti che potresti perdere un po' rispetto al codice sorgente originale.Sembrerebbe particolarmente divertente se il codice utilizzasse codici generici, a causa della cancellazione.
Sicuramente il plugin JAD e/o JADclipse Eclipse.
Se il file di classe che desideri esaminare è open source, non dovresti decompilarlo, ma allegare invece i file sorgente direttamente al tuo IDE.in questo modo, puoi semplicemente visualizzare il codice di qualche classe della libreria come se fosse la tua
jd-gui "http://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zip&can=2&q=" è l'opzione migliore e facile da usare per decompilare il file .class....
Come suggerito puoi usare JAD per decompilarlo e visualizzare i file.Per facilitarne la lettura puoi usare il plugin JADclipse per eclipse per integrare JAD direttamente in eclipse o usare DJ Java Decompiler che è molto più facile da usare rispetto a JAD a riga di comando
JAD è un'opzione eccellente se desideri come risultato un codice Java leggibile.Se vuoi davvero scavare all'interno del .class
formato di file, però, lo vorrai javap
.È fornito in bundle con JDK e consente di "decompilare" il bytecode esadecimale in ASCII leggibile.Il linguaggio che produce è ancora bytecode (non qualcosa come Java), ma è abbastanza leggibile ed estremamente istruttivo.
Inoltre, se tu Veramente vuoi, puoi aprirne qualsiasi .class
file in un editor esadecimale e leggi direttamente il bytecode.Il risultato è identico all'utilizzo javap
.
Non è necessario decompilare Applet.class.Il codice sorgente delle classi API Java pubbliche viene fornito con JDK (se si sceglie di installarlo) ed è meglio leggibile rispetto al bytecode decompilato.Puoi trovarlo compresso in src.zip (situato nella cartella di installazione di JDK).
CFR - un altro decompilatore Java è un ottimo decompilatore per Java moderno scritto in Java 6.
puoi anche utilizzare i decompilatori Java online disponibili.Per es. http://www.javadecompilers.com