Was ist ein guter Java-Dekompiler und Deobfuscator?

Ich verwende JD-GUI , um Java-JAR-Dateien zu dekompilieren, aber das Problem ist dass es viele Fehler hinterlässt, wie zum Beispiel doppelte Variablen, die ich selbst reparieren und überprüfen muss, ob das Programm noch funktioniert (wenn ich die Fehler richtig behoben habe).

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

Ich möchte wissen, welcher Dekompiler:

  • gibt die geringste Anzahl von Fehlern
  • deobfusciert die Die meisten.

Kommentare

  • 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.

Antwort

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 „in Arbeit“ ist und ich bin sicher, dass Sie viel Code finden werden, den es nicht dekompilieren kann.

Kommentare

  • Erstens ist sein Dekompiler Procyon, den Sie in anderen Antworten sehen. Zweitens: “ Sehen Sie sich meine Bibliothek an, die dies tut! “ antwortet, das wäre hier ein Fehler. Strobel ‚ s Readme , auf die er oben verweist, ist eine genaue Lektüre wert. Es wäre eine großartige Antwort gewesen, aber zugegebenermaßen ist es für SE wahrscheinlich etwas zu lang.
  • +10000 Dies ist wirklich eine großartige Arbeit und hat nur eine Klasse dekompiliert, die ich ausgegeben habe Stunden, in denen versucht wurde zu rekonstruieren, nachdem JD-GUI nur die Hälfte davon erhalten hatte.
  • Obwohl ich persönlich die +1 Kommentare hasse, muss ich das ‚ sagen Sie ‚ haben dort ein gutes Projekt in Angriff genommen, das mir in einer schwierigen Situation geholfen hat. Weiter so!
  • @Signus Danke, ich ‚ bin froh, dass sich meine Arbeit für Sie als nützlich erwiesen hat :).
  • @DavidGomes Ah, BitBucket hat endlich sein Versprechen eingelöst, Mercurial-Repos zu löschen. Behoben.

Antwort

Alte und fehlende Einträge

JAD Vor einiger Zeit hat jeder den Dekompiler von Wahl war jad. 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, aber das Tool ist Open Source .

JODE JODE ist ein Java-Paket, das einen Dekompiler und einen Optimierer für Java enthält. 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, genauso wie DJ Decompiler .

Candle Ein Open-Source-Dekompiler 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. Es ist einfach zu bedienen und bietet eine grafische Benutzeroberfläche, 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 ein integraler Bestandteil von IntelliJ 14).

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

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 . Ziel ist es, 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 selbst in Java 6 geschrieben.

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

Procyon

Open Source und zielt auch auf Java 8-Funktionen (Lambdas, :: Operator) ab. Java 7 muss ausgeführt werden.

Krakatau Krakatau ist interessant, weil es in Python geschrieben wurde. Es enthält derzeit 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 ein Reverse Engineering-Tool, die intuitiv zu bedienen sind. 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 leichter Java-Bytecode-Viewer, GUI Java Decompiler, GUI-Bytecode-Editor, GUI Smali, GUI Baksmali, GUI APK-Editor, GUI Dex-Editor, GUI APK-Dekompiler, GUI DEX-Dekompiler, GUI Procyon Java-Dekompiler, GUI Krakatau, GUI CFR Java-Dekompiler, GUI FernFlower Java-Dekompiler, GUI DEX2Jar, GUI Jar2DEX, GUI Jar-Jar Hex Viewer, Code Searcher, Debugger und mehr.

Vollständig in Java geschrieben und Open Source .

Es verwendet FernFlower, Procyon und CFR für die Dekompilierung Tolles visuelles Tool mit hochmodernen Dekompilierern:

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ß Beachten Sie, dass die Modding-Szene um Minecraft, eines der beliebtesten in Java implementierten Spiele, viel Aufwand für Dekompilierer und De-Obfuscatoren für Java bedeutet.

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

Kommentare

  • Diese Antwort muss möglicherweise aktualisiert werden. Es scheint, dass JD-Gui ab März 2019 aktiv entwickelt wird. java-decompiler.github.io
  • Ich habe Java 7 Code, für den ich ‚ versuche, einige Aspekte zu schreiben. 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. ‚ ist einen Blick wert, wenn Sie ‚ eine ernsthafte Umkehrung durchführen.

Antwort

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

Ich habe Krakatau , aber es scheint, als könnte es bei dem helfen, wonach Sie suchen.

  • Aus der Readme-Datei:“ Der Krakatau-Dekompiler verfolgt einen anderen Ansatz die meisten Java-Dekompilierer. Man kann sich eher einen Compiler vorstellen, dessen Eingabesprache Java-Bytecode und dessen Zielsprache Java-Quellcode ist. Krakatau nimmt beliebigen Bytecode auf und versucht, ihn in äquivalenten Java-Code umzuwandeln. Dies macht es robust gegenüber geringfügiger Verschleierung, obwohl es den Nachteil hat, dass die „ursprüngliche“ Quelle nicht rekonstruiert wird, was zu einer weniger lesbaren Ausgabe führt, als ein Mustervergleichs-Dekompiler für nicht verschleierte Java-Klassen erzeugen würde. „
  • Dies ist offen Quelle und scheint aktiv (zum Zeitpunkt dieses Schreibens) gepflegt zu sein.

Kommentare

  • Das ist eigentlich die Ausgabe des Disassemblers. Der Dekompiler dekompiliert in Java-Ausgabe (PSIch ‚ bin der Entwickler)
  • JD-GUI ist momentan einer der besten Java-Dekompiler, muss aber in Verbindung mit Deobfuscatoren auf dem Computer verwendet werden Bytecode vor dem Dekompilieren des Codes. Die besten mir bekannten Deobfuscatoren für Java stammen entweder von rune-server.org oder moparscape.org/ smf oder moparisthebest.org/smf das sind Hacking-Communities für Runescape Game, das vollständig in Java geschrieben und stark verschleiert ist.

Antwort

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

Kommentare

  • Dies war ein wirklich guter Vorschlag – danke, viel besser als nur die fernflower cli zu verwenden!

Antwort

Zunächst einmal gibt es eine Lösung für 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 als Engine mit Erlaubnis des Autors. Ich bin mir immer noch nicht sicher, ob er gepatcht / geändert verwendet version oder Es ist nur eine GUI.

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

Kommentare

  • Ist Ihre Anwendung “ native “ Java, oder wurde es 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 ‚ s “ native “ Java-Anwendung. ‚ ist nur für den internen Gebrauch bestimmt, daher kann ich ‚ es sowieso nicht teilen.
  • jede Chance, die Sie fallen lassen könnten mir eine E-Mail, 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-Site des Projekts ‚.
  • @MikeStrobel, vielen Dank für das Interesse. Ich ‚ werde versuchen, Ihnen erweiterte Informationen und Beispielklassen zur Verfügung zu stellen, aber keine Versprechen.

Antwort

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

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

Antwort

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

Kommentare

  • ACHTUNG MIT ANDROCHEF! AndroChef ist nur ein Wrapper für den verlassenen Farnblumen-Dekompiler. ‚ Verschwenden Sie Ihr Geld nicht damit!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.