Come posso aprire Java.file di classe in modo leggibile dall'uomo?


Sto cercando di capire cosa sta facendo il file di classe di un'applet Java sotto il cofano. Aprendolo con blocco note o Textpad mostra solo un mucchio di gobbledy-gook.

C'è un modo per ridurlo in un formato un po ' leggibile in modo da poter provare a capire cosa sta facendo?

  • Ambiente = = Windows w/ VS 2008 installato.
Author: Pops, 2008-09-17

17 answers

Jd-gui è il miglior decompilatore al momento. può gestire funzionalità più recenti in Java, rispetto al JAD sempre polveroso.

 187
Author: DarenW, 2013-10-19 02:20:22

Se non ti dispiace leggere 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
 67
Author: Michael Myers, 2008-09-16 20:08:16

Se si desidera un decompilatore java, è possibile utilizzare lo strumento della riga di comando javap per farlo. Inoltre, Java Decompiler HOW-TO descrive come è possibile decompilare un file di classe.

 7
Author: Drew Frezell, 2008-09-16 20:05:14

Usare Jad per decompilarlo è probabilmente la scelta migliore. A meno che il codice non sia stato offuscato, produrrà un risultato corretto.

 2
Author: Rasmus Faber, 2008-09-16 20:03:26

Quello che stai cercando è un de-compilatore java. Raccomando JAD http://www.kpdus.com/jad.html È gratuito per uso non commerciale e ottiene il lavoro fatto.

Nota: questo non renderà il codice esattamente uguale a quello che è stato scritto. cioè perderai commenti e possibilmente nomi di variabili, quindi sarà un po ' più difficile della semplice lettura del normale codice sorgente. Se lo sviluppatore è davvero segreto, avrà offuscato anche il suo codice, rendendolo ancora più difficile da leggere.

 2
Author: David Beleznay, 2008-09-16 20:05:58

Cpuguru, se la tua applet è stata compilata con javac 1.3 (o meno), la tua opzione migliore è usare Jad.

Sfortunatamente, l'ultimo JDK supportato da JAD 1.5.8 (Apr 14, 2001) è JDK 1.3.

Se la tua applet è stata compilata con un compilatore più recente, puoi provare JD-GUI: questo decompiler è in fase di sviluppo, tuttavia, genera sorgenti Java corrette, la maggior parte del tempo, per le classi compilate con JDKs 1.4, 1.5 o 1.6.

DarenW, grazie per il tuo post. JD-GUI non è ancora il miglior decompilatore ... ma sto lavorando su:)

 2
Author: Emmanuel Dupuy, 2008-12-23 17:56:50

Questo è il codice compilato, è necessario utilizzare un decompilatore come JAD: http://www.kpdus.com/jad.html

 1
Author: cynicalman, 2008-09-16 20:03:44

È necessario utilizzare un decompilatore. Altri hanno suggerito JAD, ci sono altre opzioni, JAD è il migliore.

Farò eco ai commenti che potresti perdere un po ' rispetto al codice sorgente originale. Sembrerà particolarmente divertente se il codice usasse generici, a causa della cancellazione.

 1
Author: Zac Gochenour, 2008-09-16 20:12:50

JAD e/o JADclipse Eclipse plugin, di sicuro.

 1
Author: John Gardner, 2008-09-16 20:35:47

Se il file di classe che si desidera esaminare è open source, non si dovrebbe decompilarlo, ma invece allegare i file di origine direttamente nel proprio IDE. in questo modo, puoi semplicemente visualizzare il codice di qualche classe di libreria come se fosse il tuo

 1
Author: arturh, 2009-05-13 10:54:10

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 la decompilazione .file di classe....

 1
Author: Karthikeyan Subramanian, 2013-09-27 10:05:57

Come suggerito puoi usare JAD per decompilarlo e visualizzare i file. Per rendere più facile la lettura è possibile utilizzare il plugin JADclipse per eclipse per integrare JAD direttamente a eclipse o utilizzare DJ Java Decompiler che è molto più facile da usare rispetto alla riga di comando JAD

 0
Author: , 2008-09-16 20:07:55

JAD è un'opzione eccellente se si desidera che il codice Java sia leggibile come risultato. Se vuoi davvero scavare negli interni del formato di file .class, vorrai javap. È in bundle con il 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 vuoi davvero , puoi aprire qualsiasi file .class in un editor esadecimale e leggere direttamente il bytecode. Il risultato è identico all'utilizzo di javap.

 0
Author: Daniel Spiewak, 2008-09-16 20:09:25

Non è necessario decompilare l'applet.classe. Il codice sorgente delle classi API Java pubbliche viene fornito con JDK (se si sceglie di installarlo) ed è meglio leggibile del bytecode decompilato. Puoi trovare compresso in src.zip (che si trova nella cartella di installazione JDK).

 0
Author: Arno, 2008-09-16 20:45:34

CFR-another java decompiler è un grande decompiler per Java moderno scritto i Java 6.

 0
Author: tidbeck, 2017-01-18 13:54:18

Come sottolineato da @ MichaelMyers, usa

javap -c <name of java class file> 

Per ottenere il codice assembly JVM. È inoltre possibile reindirizzare l'output a un file di testo per una migliore visibilità.

javap -c <name of java class file> > decompiled.txt
 0
Author: Nilashish C, 2018-02-16 15:51:07

È inoltre possibile utilizzare i decompilatori java online disponibili. Per esempio http://www.javadecompilers.com

 0
Author: Prachi Sharma, 2018-02-23 11:50:23