Frage:
Was ist ein guter Java-Dekompiler und Deobfuscator?
user56
2013-03-29 20:44:07 UTC
view on stackexchange narkive permalink

Ich verwende JD-GUI, um Java-JAR-Dateien zu dekompilieren, aber das Problem ist, dass viele Fehler zurückbleiben, z. B. doppelte Variablen, die ich selbst reparieren und prüfen muss, ob das Programm noch funktioniert funktioniert (wenn ich die Fehler richtig behoben habe).

Ich habe auch Fernflower ausprobiert, aber das lässt leere Klassen, wenn eine Abhängigkeit fehlt.

Ich würde gerne wissen, welcher Dekompiler:

  • gibt die geringste Anzahl von Fehlern an.
  • deobfusciert am meisten.
Nur neugierig, welche Funktionen erwarten Sie von einem Deobfuscator? Abgesehen davon, dass die Variablen manuell umbenannt werden, sehe ich keine Möglichkeit, Code tatsächlich zu deobfuscieren.
Sieben antworten:
#1
+33
Mike Strobel
2013-05-30 19:26:11 UTC
view on stackexchange narkive permalink

Ich entschuldige mich für die verspätete Antwort.
Ich habe an einem neuen Open Source Java-Dekompiler gearbeitet. Probieren Sie es einfach aus.
Ich habe es nicht mit verschleiertem Code getestet, aber ich habe gesehen, dass es viele Methoden dekompiliert, die JD-GUI nicht verarbeiten konnte. Beachten Sie, dass es sich um eine laufende Arbeit handelt, und ich bin sicher, dass Sie viel Code finden werden, der nicht dekompiliert werden kann.

Erstens ist sein Dekompiler Procyon, den Sie in anderen Antworten sehen. Zweitens, obwohl ich mich normalerweise zurückhalte: "Schau dir meine Bibliothek an, die das macht!" Antworten, das wäre hier ein Fehler. Strobels [Readme] (https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler), auf die er oben verweist, ist eine genaue Lektüre wert. Es wäre selbst eine * großartige * Antwort gewesen, ist aber zugegebenermaßen wahrscheinlich etwas zu lang für SE.
+10000 Das ist wirklich großartige Arbeit und hat gerade eine Klasse dekompiliert, die ich stundenlang versucht habe zu rekonstruieren, nachdem JD-GUI nur die Hälfte davon bekommen hatte.
Obwohl ich persönlich die +1 Kommentare hasse, muss ich sagen, dass Sie dort ein gutes Projekt haben, das mir in einer schwierigen Situation geholfen hat. Mach weiter!
@Signus Danke, ich bin froh, dass sich meine Arbeit für Sie als nützlich erwiesen hat :).
#2
+14
Alexandre Dumont
2016-08-26 02:49:18 UTC
view on stackexchange narkive permalink

Alte und fehlende Einträge

JAD Vor einiger Zeit war Jad der Dekompiler aller Wahl. Derzeit ist das Projekt tot (außerdem war es kein Open Source-Projekt), aber Sie sehen immer noch viele Leute, die darauf verweisen.

Java DeObfuscator Auch ein älteres Tool von fileoffset.com, funktioniert aber immer noch mehr oder weniger. Die Benutzeroberfläche ist für größere Projekte ziemlich umständlich zu verwenden, aber das Tool ist Open Source.

JODE JODE ist ein Java-Paket mit einem Dekompiler und einem Optimierer für Java. Dieses Paket ist unter der GNU GPL frei verfügbar. Es wurde seit einiger Zeit nicht mehr aktualisiert.

AndroChef Proprietäres Tool zum Dekompilieren von Android-Programmen und Java-Dateien, verfügbar hier. Angesichts der Alternativen nicht das Geld wert, genau wie DJ Decompiler.

Candle Ein Open-Source-Decompiler von Brad Davis. Ich erwähne es der Vollständigkeit halber, bin aber weit davon entfernt, vollständig zu sein.


Moderne Tools

JD-Gui Wahrscheinlich eines der am häufigsten verwendeten Tools für die Java-Dekompilierung, da es einfach zu verwenden ist und eine grafische Benutzeroberfläche bietet, mit der eine Klassendatei oder JAR schnell geöffnet und überprüft werden kann. Sie finden es hier.

FernFlower Sehr neuer und vielversprechender analytischer Java-Dekompiler (wird integraler Bestandteil von IntelliJ 14).

Es ist ein Befehlszeilenprogramm. Dieser kann die Unicode-Parameter mit ihrem vollständigen Namen anzeigen.

Von hier herunterladen. Es handelt sich um ein Befehlszeilenprogramm. Dieser kann die Unicode-Parameter mit ihrem vollständigen Namen anzeigen.
Beachten Sie, dass sie standardmäßig auch bereits in IntelliJ integriert sind.

CFR

Kostenlos und Open Source. Dieser zielt darauf ab, moderne Java-Funktionen zu dekompilieren, einschließlich Java 12-Switch-Ausdrücken, Java 8-Lambdas (Änderungen vor und nach Java Beta 103), Java 7-String-Switches usw., obwohl er selbst in Java 6 geschrieben ist.

Auch ein Befehlszeilenprogramm. Dieser macht einen noch besseren Job und ist etwas schneller.

Procyon

Open Source und zielt auch darauf ab, damit umzugehen Java 8-Funktionen (Lambdas, :: Operator). Zum Ausführen muss Java 7 ausgeführt werden.

Krakatau Krakatau ist interessant, da es in Python geschrieben wurde. Derzeit enthält es drei Tools: einen Dekompiler und Disassembler für Java-Klassendateien und einen Assembler zum Erstellen von Klassendateien.

Unterstützt noch keine Java 8-Funktionen.

Soot

Soot ist ein Framework zur Analyse und Transformation von Java- und Android-Anwendungen, das ursprünglich von der Sable Research Group der McGill University entwickelt wurde. Es wird nicht sehr häufig "nur" als Dekompiler verwendet, da es auch eine Zwischenbyte-Codesprache definiert.

Recaf

Ein Java-Bytecode-Editor und umgekehrt Engineering-Tool mit dem Ziel, intuitiv zu bedienen. Es kann Bytecode über mehrere Dekompilierer (CFR, FernFlower, Procyon) oder in einem Tabellenlayout darstellen, um die Anzeige von Klassenelementen zu ermöglichen, die in Standarddekompilierern nicht entschlüsselbar sind. Recaf verwendet kontextsensitive Menüs, um mit Klassen, Methoden und Feldern zu interagieren. So können Benutzer nach Anwendungsfällen suchen, Elemente umbenennen und Definitionen in einem zerlegten Format bearbeiten.

Es unterstützt Jars, Kriege, Klassen, und Extrahieren von Klassen aus laufenden Java-Prozessen.

Es ist vollständig in Java geschrieben und vollständig Open Source.

Konlochs Bytecode Viewer

Ein erweiterter Lightweight Java Bytecode Viewer, 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-Dekompiler, GUI FernFlower Java-Dekompiler, GUI DEX2Jar, GUI Jar2DEX, GUI Jar-Jar, Hex-Viewer, Codesucher, Debugger und mehr.

Vollständig in Java geschrieben und Open Source.

Es verwendet FernFlower, Procyon und CFR für die Dekompilierung. Dies macht es zu einem großartigen visuellen Werkzeug, das hochmoderne Dekompilierer verwendet:

Enigma

Ein speziell auf die Deobfuscation ausgerichtetes Tool:

Ursprünglich zum Deobfuscieren von Minecraft-Versionen verwendet. Verwendet Procyon intern.

Eine aktuellere Gabel finden Sie hier

Es macht Spaß zu bemerken, dass viel Aufwand in Dekompilierer und De-Obfuscators für Java ist das Ergebnis der Modding-Szene um Minecraft, eines der beliebtesten in Java implementierten Spiele.

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

Diese Antwort muss möglicherweise aktualisiert werden. Es scheint, dass JD-Gui ab März 2019 aktiv entwickelt wird. Https://java-decompiler.github.io/
Ich habe Java 7-Code, für den ich einige Aspekte schreiben möchte. Der eingebaute Intellij-Dekompiler hat in einigen Fällen falsche Variablennamen und kann Codeblöcke weglassen. JD-Gui zeigt diese Blöcke an und zeigt auch genauere Variablennamen an. Es zeigt auch nebeneinander die Unterschiede zwischen einer alten und einer neuen Version von JD-Gui. Es lohnt sich zu prüfen, ob Sie ernsthafte Umkehrungen vornehmen.
#3
+10
amccormack
2013-03-29 23:20:27 UTC
view on stackexchange narkive permalink

Ich kann nicht mit dem besten sprechen, aber es gibt ein paar Java-Dekompilierer, wie in dieser SO-Frage angegeben. Keiner dieser Dekompiler scheint jedoch zu versuchen, aktiv mit der Verschleierung umzugehen, und viele dieser Projekte werden abgebrochen.

Ich habe Krakatau nicht ausprobiert, aber es scheint, als könnte es Ihnen helfen suchen.

  • Aus der Readme-Datei: "Der Krakatau-Dekompilierer verfolgt einen anderen Ansatz als die meisten Java-Dekompilierer. Er kann eher als Compiler betrachtet werden, dessen Eingabesprache Java-Bytecode ist und dessen Zielsprache vorkommt um Java-Quellcode zu sein. Krakatau nimmt beliebigen Bytecode auf und versucht, ihn in äquivalenten Java-Code umzuwandeln. Dies macht ihn robust gegenüber geringfügiger Verschleierung, obwohl er den Nachteil hat, dass die "ursprüngliche" Quelle nicht rekonstruiert wird, was zu einer weniger lesbaren Ausgabe als ein Muster führt Ein passender Dekompiler würde für nicht verschleierte Java-Klassen erzeugen. "
  • Dies ist Open Source und scheint (zum Zeitpunkt dieses Schreibens) aktiv gepflegt zu werden.
Das ist eigentlich die Ausgabe des Disassemblers. Der Dekompiler dekompiliert in Java-Ausgabe. (S. Ich bin der Entwickler)
JD-GUI ist derzeit einer der besten Java-Dekompilierer. Es muss jedoch in Verbindung mit Deobfuscatoren auf dem Bytecode verwendet werden, bevor der Code dekompiliert wird. Die besten Deobfuscatoren für Java, die ich kenne, stammen entweder von http://www.rune-server.org oder http://www.moparscape.org/smf oder http://www.moparisthebest.org/smf, die hacken Communities für Runescape Game, das vollständig in Java geschrieben und stark verschleiert ist.
#4
+4
Konloch
2014-11-19 17:45:58 UTC
view on stackexchange narkive permalink

Schauen Sie sich den Bytecode Viewer an https://github.com/Konloch/bytecode-viewer Es besteht die Möglichkeit, mit 5 verschiedenen Dekompilierern zu dekompilieren:

  • FernFlower
  • Procyon
  • CFR
  • Krakatau
  • JD-GUI
#5
+3
Vladimir Protasov
2014-03-04 02:10:49 UTC
view on stackexchange narkive permalink

Zunächst gibt es eine Lösung für das Fernflower-Problem mit fehlenden Klassen hier. Sie können sich bei agaricusb dafür bedanken.

Fernflower bleibt vorerst der beste Java-Dekompiler, auch wenn er in den letzten Jahren nicht gewartet wurde. Ich habe kürzlich versucht, den Autor zu erreichen, aber immer noch kein Glück.

Der AndroChef Java Decompiler verwendet Fernflower mit Erlaubnis des Autors als Engine. Immer noch nicht sicher, ob es eine gepatchte / modifizierte Version verwendet oder nur eine grafische Benutzeroberfläche.

Der von @ mike-strobel entwickelte Procyon-Dekompiler scheint gut zu sein, aber Fernflower hatte immer noch einen RIESIGEN Vorteil und konnte ungefähr 95 dekompilieren % meiner Bewerbung (~ 3000 Klassen), während Procyon nur 60% bearbeiten konnte (überprüft im Januar 2014).

Ist Ihre Anwendung "natives" Java oder wurde sie aus dem Android-Format konvertiert? In diesem Fall wäre ich sehr daran interessiert, Ihre Binärdateien in die Hände zu bekommen, um zu sehen, wo Procyon im Vergleich zu Fernflower zusammenbricht.
@MikeStrobel Es ist eine "native" Java-Anwendung. Sie wird nur intern verwendet, daher kann ich sie sowieso nicht freigeben.
Könnten Sie mir vielleicht eine E-Mail schreiben, in der beschrieben wird, auf welche Probleme Sie gestoßen sind? Ich bin immer gespannt, wie Procyon verbessert werden kann. Meine Kontaktinformationen befinden sich auf der BitBucket-Website des Projekts.
@MikeStrobel bedankt sich für das Interesse. Ich werde versuchen, Ihnen erweiterte Informationen und Beispielklassen zur Verfügung zu stellen, aber keine Versprechen.
#6
+3
David Kennedy
2018-06-29 20:24:15 UTC
view on stackexchange narkive permalink

Ich verwende https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine Es ist der Dekompiler von IntelliJ, er dekompiliert Codes, in denen JD -GUI schlägt fehl.

Es ist ein inoffizieller Spiegel zum Herunterladen: http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/

#7
+1
Atanas
2013-10-27 16:15:14 UTC
view on stackexchange narkive permalink

Ich möchte Ihnen empfehlen AndroChef Java Decompiler AndroChef Java Decompiler dekompiliert erfolgreich verschleierte Java 6- und Java 7-Klassen- und JAR-Dateien.

ACHTUNG MIT ANDROCHEF! AndroChef ist nur eine Hülle für den verlassenen Farnblumenzersetzer. Verschwenden Sie nicht Ihr Geld damit!


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...