Domanda

Quale programma posso usare per decompilare un file di classe? Riceverò effettivamente il codice Java o è solo il codice assembly JVM?

Sulle domande sulle prestazioni Java su questo sito vedo spesso le risposte di persone che hanno "decompilato" il file di classe Java per vedere come il compilatore ottimizza determinate cose.

È stato utile?

Soluzione

Aggiornamento febbraio 2016:

www.javadecompilers.com elenca JAD come:

  

il più popolare decompilatore Java, ma principalmente di questa età. Scritto in C ++, molto veloce.
  Non aggiornato, non supportato e non decompila correttamente Java 5 e versioni successive

Quindi il tuo chilometraggio può variare con jdk recente (7, 8).

Lo stesso sito elenca altri strumenti.

E javadecompiler, come osservato da Salvador Valencia in i commenti (settembre 2017), offre un SaaS in cui si carica il .class file nel cloud e ti restituisce il codice decompilato.


Risposta originale: ottobre 2008

  • La versione finale di JSR 176, che definisce le principali funzionalità di J2SE 5.0 (Java SE 5), è stata pubblicata il 30 settembre 2004.
  • L'ultima versione di Java supportata da JAD, il famoso decompilatore Java scritto da Pavel Kouznetsov, è JDK 1.3 .
  • La maggior parte dei decompilatori Java scaricabili oggi da Internet, come & # 8220; DJ Java Decompiler & # 8221; o & # 8220; Cavaj Java Decompiler & # 8221 ;, sono alimentati da JAD: non possono visualizzare sorgenti Java 5.

Decompiler Java (l'ennesimo decompilatore Fast Java) ha:

  • Supporto esplicito per la decompilazione e l'analisi di Java 5+ & # 8220; .class & # 8221; file.
  • Una bella interfaccia grafica:

screenshot

Funziona con compilatori da JDK 1.1.8 fino a JDK 1.7.0 e altri ( Jikes , JRockit , ecc.).

È dotato di una versione demo live online che è effettivamente perfettamente funzionante! Puoi semplicemente rilasciare un file jar sulla pagina e vedere il codice sorgente decompilato senza installare nulla.

Altri suggerimenti

Ci sono alcuni decompilatori là fuori ... Una ricerca veloce produce:

  1. Procyon : open-source (Apache 2) e sviluppato attivamente
  2. Krakatau : open-source (GPLv3) e sviluppato attivamente
  3. CFR : open-source (MIT) e sviluppato attivamente
  4. JAD
  5. DJ Java Decompiler
  6. Mocha

E molti altri.

Questi producono codice Java. Java viene fornito con qualcosa che ti consente di vedere il codice byte JVM ( javap ).

Per vedere il codice sorgente Java controlla alcuni decompilatori. Vai a cercare jad .

Se vuoi vedere i bytecode, usa javap fornito con il JDK.

Ne ho provati diversi e Procyon sembrava funzionare al meglio per me. È in fase di sviluppo attivo e supporta molte funzionalità delle ultime versioni di Java.

Questi sono gli altri che ho provato:

  • CFR
    • Decompilazione del metodo promettente, ma spesso fallita. Terrò d'occhio questo. Sviluppato anche attivamente con il supporto per le ultime funzionalità Java.
  • Krakatau
    • Adotta un approccio diverso in quanto tenta di generare codice Java equivalente invece di provare a ricostruire l'origine originale, che ha il potenziale per renderlo migliore per il codice offuscato. Dai miei test è stato grosso modo alla pari con Procyon, ma comunque bello avere qualcosa di diverso. Ho dovuto usare il flag della riga di comando -skip in modo che non si fermasse agli errori. Sviluppato attivamente e abbastanza interessante è scritto in Python.
  • JD-GUI
  • JAD
    • Funzionato, ma supporta solo Java 1.4 e versioni precedenti. Disponibile anche come plugin Eclipse . Non più in fase di sviluppo.

Uso Decompiler JAD .

Esiste un Eclipse plug-in per esso, jadeclipse . È molto carino.

Procyon include un decompilatore. È FOSS.

Soot è un'opzione per il codice Java più recente. Almeno ha il vantaggio di essere ancora mantenuto di recente ...

Inoltre, Decompiler Java è un decompilatore con entrambi uno stand- sola interfaccia grafica ed integrazione Eclipse.

Infine, Jdec non è stato menzionato, sebbene non sia così raffinato come altre opzioni.

JD-GUI è davvero buono. Potresti semplicemente aprire un file JAR e sfogliare il codice come se stai lavorando su un IDE. Roba buona.

Ecco un elenco di decompilatori a partire da febbraio 2015:

Procyon , open-source, https: // bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

CFR , gratuito, nessun codice sorgente disponibile, http: / /www.benf.org/other/cfr/

JD , gratuito solo per uso non commerciale, http: //jd.benow .it /

Fernflower , open-source, https://github.com/fesh0r/ felce ,

JAD - dato qui solo per motivi storici. Gratuito, nessun codice sorgente disponibile, http://varaneckas.com/jad/ Non aggiornato, non supportato e non decompila correttamente Java 5 e versioni successive.

Puoi testare online i decompilatori sopra menzionati, nessuna installazione richiesta e fare la tua scelta colta.

Decompilatori Java nel cloud: http://www.javadecompilers.com/

Ci sono alcuni programmi che puoi usare. Otterrai il codice Java effettivo, ma a volte il codice sarà stato offuscato, quindi i metodi sono nominati da una lettera o un numero o un mix casuale di lettere e numeri.

DJ Decompiler Mocha

La maggior parte dei decompilatori per Java si basano su JAD . È un ottimo strumento, ma purtroppo non è stato aggiornato per un po 'e non gestisce molto bene le classi Java 1.5+. Non ho visto nessuno strumento in grado di gestire correttamente le classi 1.5+.

Dai un'occhiata a cavaj .

Tutti i link JAD elencati finora sembrano non funzionare, quindi ho trovato questo sito. Funziona alla grande (almeno per Linux)! Su Ubuntu 11.10 ho dovuto scaricare quello statico per qualsiasi motivo.

http://www.varaneckas.com/jad

  • JAD è uno che funziona ed è semplice.

  • Inoltre, se vuoi solo vedere i metodi, usa javap.

Se vuoi vedere come il compilatore Java fa certe cose, non vuoi decompilare, vuoi disassemblare. La decompilazione implica la trasformazione del bytecode in sorgente Java, il che significa che molte informazioni di basso livello vengono perse e se ti stai chiedendo l'ottimizzazione del compilatore, questa è probabilmente la stessa informazione che ti interessa.

Comunque, mi è capitato di aver scritto un disassemblatore Java open source . A differenza di Javap, questo funziona anche su classi altamente patologiche, quindi puoi vedere quali strumenti di offuscamento stanno facendo anche alle tue classi. Può anche fare la decompilazione, anche se non lo consiglierei.

JAD non funziona per me (problema Ubuntu 11.10), quindi sono andato avanti e mi sono imbattuto in JODO . Almeno ha il codice sorgente Open Java ed è stato in grado di decompilare correttamente il mio .class .

Raccomando di controllare prima 'rami / generico' . I tronchi non sono stabili.

Sulla piattaforma IntelliJ IDEA è possibile utilizzare Plugin IntelliJ Java Decompiler . Ti consente di visualizzare tutte le fonti Java durante il processo di debug, anche se non le possiedi tutte. Si basa sui famosi strumenti JD-GUI .

 inserisci qui la descrizione dell'immagine

Con AndroChef Java Decompiler puoi decompilare i file di classe apk, dex, jar e java. È semplice e facile AndroChef JD si basa su FernFlower . Puoi valutarlo in 10 usi gratuiti.

  

AndroChef supporta funzionalità del linguaggio Java come generici, enumerazioni e annotazioni. Secondo alcuni studi, AndroChef Java Decompiler è in grado di decompilare il 98,04% delle applicazioni Java generate con i compilatori Java tradizionali, con un tasso di recupero molto elevato. È uno strumento semplice ma potente che consente di decompilare il bytecode Java e Dalvik (DEX, APK) in una sorgente Java leggibile.

Per OSX raccomando: jarzilla o JD-GUI

Entrambi ti consentono di visualizzare jar, war, ecc. contenuto del file e decompila tutti i file di classe al loro interno.

Jarzilla: https://code.google.com/p/jarzilla/
JD-GUI: http://jd.benow.ca/

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