Cosè un buon decompilatore e deoffuscatore Java?

Sto utilizzando JD-GUI per decompilare i file JAR Java, ma il problema è che lascia molti errori, come le variabili duplicate che devo correggere da solo e controllare se il programma funziona ancora (se ho corretto gli errori correttamente).

Ho provato anche Fernflower, ma rimane vuoto classi se manca una dipendenza.

Mi piacerebbe sapere quale decompilatore:

  • fornisce il minor numero di errori
  • deoffuscata il la maggior parte.

Commenti

  • Sono solo curioso, quali caratteristiche ti aspetti che un deoffuscatore possa offrire? Oltre a rinominare le variabili manualmente, non ‘ non vedo alcun modo per deoffuscare del codice.

Risposta

Mi scuso per la risposta tardiva.
Sto lavorando a un nuovo decompilatore Java open source. Sentiti libero di verificarlo.
Non lho testato con alcun codice offuscato, ma ho visto che decompila molti metodi che JD-GUI non è riuscito a gestire. Nota che “è un lavoro in corso e sono sicuro che troverai un sacco di codice che non riuscirà a decompilare.

Commenti

  • Innanzitutto, il suo decompilatore è Procyon che vedi in altre risposte. In secondo luogo, anche se di solito esito a ” Guarda la mia libreria che fa questo! ” risponde, qui sarebbe un errore. Vale la pena leggere attentamente il ‘ readme di Strobel a cui si collega, sopra. Sarebbe stata una risposta fantastica in sé, ma è certamente un po troppo lunga per SE.
  • +10000 Questo è davvero un ottimo lavoro e ha appena decompilato un corso che ho trascorso ore cercando di ricostruire dopo che JD-GUI ne aveva ottenuto solo la metà.
  • Anche se personalmente odio i commenti +1, io ‘ devo dirlo ‘ hai un buon progetto che mi ha aiutato in un punto difficile. Continua così!
  • @Signus Grazie, ‘ sono contento che il mio lavoro ti sia stato utile :).
  • @DavidGomes Ah, BitBucket ha finalmente mantenuto la promessa di eliminare i repository Mercurial. Risolto.

Risposta

Voci vecchie e mancanti

JAD Qualche tempo fa, tutti i decompilatori di la scelta è stata jad. Attualmente, il progetto è morto (inoltre, non era open source), ma vedi ancora molte persone che si riferiscono ad esso.

Java DeObfuscator Anche uno strumento più vecchio di fileoffset.com, ma funziona ancora più o meno. Linterfaccia è piuttosto goffa da usare per progetti più grandi, ma lo strumento è open source .

JODE JODE è un pacchetto java contenente un decompilatore e un ottimizzatore per Java. Questo pacchetto è disponibile gratuitamente sotto la GNU GPL. Non è stato aggiornato da un po di tempo.

AndroChef Strumento proprietario per decompilare i programmi Android e File Java, disponibili qui . Non vale i soldi date le alternative, proprio come DJ Decompiler .

Candle Un decompilatore open source di Brad Davis. Lo menziono per completezza, ma è ben lungi dallessere una funzionalità completa.


Strumenti moderni

JD-Gui Probabilmente uno degli strumenti più utilizzati per la decompilazione Java, in quanto è facile da usare e fornisce uninterfaccia utente grafica che consente di aprire e ispezionare rapidamente un file di classe o JAR. Puoi trovarlo qui .

FernFlower Decompilatore Java analitico molto nuovo e promettente (che diventa parte integrante di IntelliJ 14).

È uno strumento a riga di comando. Questo è in grado di mostrare i parametri Unicode con il loro nome completo.

Scarica da qui. È uno strumento a riga di comando. Questo è in grado di mostrare i parametri Unicode con il loro nome completo.
Notare che è già integrato di default anche in IntelliJ.

CFR

Gratuito e open source . Questo mira a decompilare le moderne funzionalità di Java , comprese le espressioni switch Java 12, lambda Java 8 (modifiche pre e post Java beta 103), switch Java 7 String ecc., sebbene sia esso stesso scritto in Java 6.

Anche uno strumento a riga di comando.Questo fa un lavoro ancora migliore ed è leggermente più veloce.

Procyon

Open source e mira anche a gestire le funzionalità di Java 8 (lambdas, :: operator). Richiede Java 7 per funzionare.

Krakatau Krakatau è interessante perché è stato scritto in Python. Attualmente contiene tre strumenti: un decompilatore e disassemblatore per file di classe Java e un assemblatore per creare file di classe.

Non supporta ancora le funzionalità di Java 8.

Soot

Soot è un framework per lanalisi e la trasformazione di applicazioni Java e Android, originariamente sviluppato dal Sable Research Group della McGill University. Non è molto comunemente usato “solo” come decompilatore, poiché definisce anche un linguaggio di codice byte intermedio.

Recaf

Un editor Java Bytecode e uno strumento di reverse engineering mirato ad essere intuitivo da usare. Può presentare il bytecode attraverso più decompilatori (CFR, FernFlower, Procyon) o in un layout di tabella per consentire la visualizzazione di elementi di classe che sono indecifrabili nei decompilatori standard. Recaf utilizza menu sensibili al contesto per interagire con classi, metodi e campi, consentendo agli utenti di cercare casi duso, rinominare elementi e modificare le definizioni in un formato disassemblato.

Supporta vasi, guerre, classi, ed estrarre classi dai processi Java in esecuzione.

È scritto completamente in Java ed è completamente open source .

Visualizzatore Bytecode di Konloch

Un visualizzatore di bytecode Java leggero avanzato, GUI Java Decompiler, GUI Bytecode Editor, GUI Smali, GUI Baksmali, GUI APK Editor, GUI Dex Editor, GUI APK Decompiler, GUI DEX Decompiler, GUI Procyon Java Decompiler, GUI Krakatau, GUI CFR Java Decompiler, GUI FernFlower Java Decompiler, GUI DEX2Jar, GUI Jar2DEX, GUI-Jar, Hex Viewer, Code Searcher, Debugger e altro ancora.

Scritto completamente in Java, ed è open source .

Utilizza FernFlower, Procyon e CFR per la decompilazione, rendendolo un file fantastico strumento visivo che utilizza decompilatori allavanguardia:

Enigma

Uno strumento specificamente progettato per loffuscamento :

originariamente utilizzato per deoffuscare le versioni di Minecraft. Utilizza Procyon internamente.

Un fork più aggiornato può essere trovato qui

È divertente nota che molti sforzi nei decompilatori e de-offuscatori per Java sono il risultato della scena di modding intorno a Minecraft, uno dei giochi più popolari implementati in Java.

Fonte: http://blog.macuyiko.com/post/2015/a-quick-look-at-java-decompilers.html

Commenti

  • Questa risposta potrebbe essere necessario aggiornare. Sembra che JD-Gui sia stato sviluppato attivamente a partire da marzo 2019. java-decompiler.github.io
  • Ho un po di java 7 codice per cui ‘ sto tentando di scrivere alcuni aspetti. Il decompilatore intellij incorporato in alcuni casi ha nomi di variabili errati e può escludere blocchi di codice. JD-Gui mostra quei blocchi e mostra anche quelli che sembrano essere nomi di variabili più accurati. Mostra anche fianco a fianco le differenze tra una vecchia versione e una nuova versione di JD-Gui. ‘ vale la pena dare unocchiata se ‘ stai facendo una seria inversione.

risposta

Non posso “non parlare con quale di questi è il migliore, ma ci sono alcuni decompilatori java là fuori come indicato da questo SO domanda . Nessuno di questi decompilatori sembra tentare di gestire attivamente loffuscamento e molti di questi progetti vengono abbandonati.

Non ho provato Krakatau , ma sembra che possa aiutarti con quello che stai cercando.

  • Dal readme:” Il decompilatore Krakatau ha un approccio diverso per la maggior parte dei decompilatori Java. Può essere pensato più come un compilatore il cui linguaggio di input è il bytecode Java e la cui lingua di destinazione è il codice sorgente Java. Krakatau accetta bytecode arbitrario e tenta di trasformarlo in un codice Java equivalente. Questo lo rende resistente ad offuscamenti minori, sebbene abbia linconveniente di non ricostruire la fonte “originale”, portando a un output meno leggibile di quanto un decompilatore di corrispondenza del pattern produrrebbe per classi Java non offuscate. “
  • Questo è aperto source e sembra essere attivamente (al momento della stesura di questo documento) mantenuto.

Commenti

  • Questo è effettivamente loutput del disassembler. Il decompilatore si decompila in output Java (PSSono ‘ lo sviluppatore)
  • JD-GUI è uno dei migliori decompilatori Java al momento, ma deve essere usato insieme ai deoffuscatori sul Bytecode prima di decompilare il codice. I migliori deoffuscatori per Java che conosco provengono da rune-server.org o da moparscape.org/ smf o moparisthebest.org/smf queste sono comunità di hacker per Runescape Game che è completamente scritto in Java e altamente offuscato.

Risposta

Prova a dare unocchiata a Bytecode Viewer https://github.com/Konloch/bytecode-viewer Ha la possibilità di decompilare utilizzando 5 diversi decompilatori:

  • FernFlower
  • Procyon
  • CFR
  • Krakatau
  • JD-GUI

Commenti

  • Questo è stato davvero un buon suggerimento – grazie, molto meglio che usare semplicemente il fernflower cli!

Answer

Prima di tutto, cè una soluzione per il problema di Fernflower con classi mancanti qui . Puoi dire grazie ad agaricusb per questo.

Per ora Fernflower rimane il miglior decompilatore Java anche se non è stato mantenuto negli ultimi anni. Ho provato a contattare lautore di recente, ma ancora senza fortuna.

Per quanto riguarda il decompilatore Java di AndroChef, utilizza Fernflower come motore con il permesso dellautore. Ancora non sono sicuro che utilizzi patchato / modificato o È solo una GUI.

Il decompilatore Procyon sviluppato da @ mike-strobel sembra essere buono, ma Fernflower ha comunque un enorme vantaggio ed è stato in grado di decompilare circa il 95% della mia applicazione (~ 3000 classi) mentre procyon è stato in grado di gestire solo il 60% (verificato a gennaio 2014).

Commenti

  • La tua applicazione è ” native ” Java o è stato convertito dal formato Android? Nel primo caso, sarei molto interessato a mettere le mani sui tuoi binari per vedere dove Procyon si rompe rispetto a Fernflower.
  • @MikeStrobel It ‘ s ” applicazione Java ” nativa. È ‘ solo per uso interno, quindi non posso ‘ condividerlo comunque.
  • ogni possibilità che potresti abbandonare una e-mail descrivendo che tipo di problemi hai riscontrato? Sono sempre ansioso di sapere come si potrebbe migliorare Procyon. Le mie informazioni di contatto sono sul sito BitBucket del progetto ‘.
  • @MikeStrobel grazie per linteresse. ‘ cercherò di fornirti informazioni estese e classi di esempio, ma nessuna promessa.

Risposta

Sto utilizzando https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine È il decompilatore di IntelliJ, decompila i codici dove JD-GUI fallisce.

È “un mirror non ufficiale da scaricare: http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/

Risposta

Vorrei raccomandarti AndroChef Java Decompiler AndroChef Java Decompiler decompila correttamente i file offuscati Java 6 e Java 7 .class e .jar.

Commenti

  • FATE ATTENZIONE CON ANDROCHEF! AndroChef è solo un wrapper per il decompilatore fernflower abbandonato, non ‘ sprecare i tuoi soldi con esso!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *