Quale programma posso utilizzare per decompilare un file di class? Riceverò effettivamente il codice Java o è solo il codice assembly JVM?
Sulle domande relative alle prestazioni Java su questo sito, vedo spesso le risposte di persone che hanno “decompilato” il file di class Java per vedere come il compilatore ottimizza alcune cose.
Aggiornamento febbraio 2016:
http://www.javadecompilers.com elenca JAD come:
il decompilatore Java più popolare, ma principalmente di questa età. Scritto in C ++, quindi molto veloce.
Non aggiornato, non supportato e non decompilare correttamente Java 5 e versioni successive
Quindi il tuo chilometraggio può variare con il recente jdk (7, 8).
Lo stesso sito elenca altri strumenti.
E javadecompiler, come notato da Salvador Valencia nei commenti (settembre 2017), offre un SaaS in cui si carica il file .class
nel cloud e si restituisce il codice decompilato.
Risposta originale: ottobre 2008
Java Decompiler (ancora un altro decompilatore Fast Java) ha:
Funziona con i compilatori da JDK 1.1.8 a JDK 1.7.0 e altri ( Jikes , JRockit , ecc.).
È dotato di una versione demo live online che è completamente funzionante! Puoi semplicemente rilasciare un file jar sulla pagina e vedere il codice sorgente decompilato senza installare nulla.
Ci sono alcuni decompilatori là fuori … Una rapida ricerca produce:
E molti altri.
Questi producono codice Java. Java viene fornito con qualcosa che consente di vedere il codice byte JVM ( javap ).
Per vedere il codice sorgente Java controlla qualche decompilatore. Vai a cercare jad .
Se vuoi vedere i bytecode, usa semplicemente javap che viene fornito con JDK.
Ho provato 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:
-skip
della -skip
comando -skip
modo che non si fermasse sugli errori. Sviluppato triggersmente, e abbastanza interessante è scritto in Python. Io uso JAD Decompiler .
C’è un plugin Eclipse per esso, jadeclipse . È carino
Procyon include un decompilatore. È FOSS.
Fuliggine è un’opzione per il nuovo codice Java. Almeno ha il vantaggio di essere stato recentemente mantenuto …
Inoltre, Java Decompiler è un decompilatore con una GUI stand-alone e l’integrazione di Eclipse.
Infine, Jdec non è stato menzionato, sebbene non sia shiny come altre opzioni.
La JD-GUI è davvero buona. Si potrebbe semplicemente aprire un file JAR e sfogliare il codice come se si stesse lavorando su un IDE. Roba buona.
Ecco una lista di decompilatori a partire da febbraio 2015:
Procyon , open-source, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler
CFR , gratis, nessun codice sorgente disponibile, http://www.benf.org/other/cfr/
JD , gratuito solo per uso non commerciale, http://jd.benow.ca/
Fernflower , open-source, https://github.com/fesh0r/fernflower ,
JAD – dato qui solo per ragioni storiche. Gratuito, nessun codice sorgente disponibile, http://varaneckas.com/jad/ Non aggiornato, non supportato e non decompilare correttamente Java 5 e versioni successive.
È ansible testare online i decompilatori sopra menzionati, nessuna installazione richiesta e fare la propria scelta istruita.
Decompilatori Java nel cloud: http://www.javadecompilers.com/
Ci sono alcuni programmi che puoi usare. Otterrete il codice Java effettivo, ma a volte il codice sarà stato offuscato, quindi i metodi sono denominati con una lettera o un numero o un mix casuale di lettere e numeri.
DJ Decompiler Mocha
La maggior parte dei decompilatori per Java sono basati su JAD . È un ottimo strumento, ma sfortunatamente non è stato aggiornato per un po ‘e non gestisce molto bene le classi Java 1.5+. Non ho visto nessuno strumento che gestisca correttamente 1.5+ classi.
Dai un’occhiata a Cavaj .
Tutti i collegamenti JAD elencati finora sembrano essere interrotti, quindi ho trovato questo sito. Funziona alla grande (almeno per Linux)! Su Ubuntu 11.10 ho dovuto scaricare quello statico per qualsiasi motivo.
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 la decompilazione, vuoi lo sassembly. La decompilazione comporta 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 l’informazione che ti interessa.
Ad ogni modo, mi è capitato di aver scritto un disassemblatore Java open source . A differenza di Javap, 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 di Ubuntu 11.10) quindi ho spostato in avanti e interrotto su JODO . Almeno ha il codice sorgente Open Java ed è stato in grado di decompilare correttamente la mia class .
Consiglio di controllare prima il ramo “filiali / generico” . I tronchi non sono stabili.
Sulla piattaforma IntelliJ IDEA è ansible utilizzare Java Decompiler IntelliJ Plugin . Ti permette di visualizzare tutti i sorgenti Java durante il tuo processo di debug, anche se non li hai tutti. È basato sui famosi strumenti JD-GUI .
Con AndroChef Java Decompiler è ansible decompilare i file di class apk, dex, jar e java. È semplice e facile. AndroChef JD è basato su FernFlower . Puoi valutarlo in 10 utilizzi gratuiti.
AndroChef supporta funzionalità di 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 tradizionali compilatori Java: una percentuale di recupero molto elevata. È uno strumento semplice ma potente che consente di decompilare il bytecode Java e Dalvik (DEX, APK) in una sorgente Java leggibile.
Per OSX consiglio: jarzilla o JD-GUI
Entrambi ti permettono di vedere barattolo, guerra, ecc. file contenuto e decompila qualsiasi file di class all’interno di essi.
Jarzilla: https://code.google.com/p/jarzilla/
JD-GUI: http://jd.benow.ca/