Wie "dekompiliere" ich Java-Klassendateien? [geschlossen]

556

Mit welchem ​​Programm kann ich eine Klassendatei dekompilieren? Bekomme ich tatsächlich Java-Code oder ist es nur JVM-Assembly-Code?

Bei Fragen zur Java-Leistung auf dieser Site werden häufig Antworten von Personen angezeigt, die die Java-Klassendatei "dekompiliert" haben, um zu sehen, wie der Compiler bestimmte Dinge optimiert.

Pennen
quelle
4
Die Kunst des "Dekompilierens" kann auch als Reverse Engineering betrachtet werden. Obwohl Sie beim Reverse Engineering manchmal nicht immer Zugriff auf Binärdateien haben.
Makach
Niemand erwähnte bytecodeviewer.com , das in Java-Quelle und in Bytecode dekompiliert werden kann (für Java-Quelle basiert auf JAD).
Fernando Gonzalez Sanchez

Antworten:

588

Update Februar 2016:

www.javadecompilers.com listet JAD wie folgt auf:

der beliebteste Java-Dekompiler, aber hauptsächlich in diesem Alter. In C ++ geschrieben, also sehr schnell.
Veraltet, nicht unterstützt und nicht korrekt dekompiliert Java 5 und höher

Daher kann Ihr Kilometerstand je nach aktuellem JDK (7, 8) variieren.

Dieselbe Site listet andere Tools auf.

Und javadecompiler bietet, wie Salvador Valencia in den Kommentaren (September 2017) feststellte , ein SaaS an, bei dem Sie die .classDatei in die Cloud hochladen und den dekompilierten Code zurückgeben.


Ursprüngliche Antwort: Okt. 2008

  • Die endgültige Version von JSR 176, in der die Hauptfunktionen von J2SE 5.0 (Java SE 5) definiert sind, wurde am 30. September 2004 veröffentlicht.
  • Die letzte von JAD unterstützte Java-Version, der berühmte Java-Dekompiler von Pavel Kouznetsov, ist JDK 1.3 .
  • Die meisten Java-Dekompiler, die heute aus dem Internet heruntergeladen werden können, wie z. B. „DJ Java Decompiler“ oder „Cavaj Java Decompiler“, werden von JAD unterstützt: Sie können keine Java 5-Quellen anzeigen.

Java Decompiler (ein weiterer schneller Java-Dekompiler) hat:

  • Explizite Unterstützung für das Dekompilieren und Analysieren von Java 5+ ".class" -Dateien.
  • Eine schöne GUI:

Bildschirmfoto

Es funktioniert mit Compilern von JDK 1.1.8 bis JDK 1.7.0 und anderen ( Jikes , JRockit usw.).

Es verfügt über eine Online- Live-Demoversion , die tatsächlich voll funktionsfähig ist! Sie können einfach eine JAR-Datei auf der Seite ablegen und den dekompilierten Quellcode anzeigen, ohne etwas zu installieren.

VonC
quelle
5
+1 Erwähnenswert ist, dass es auch modularisiert ist, sodass der Kern (in C ++ implementiert) an anderer Stelle genutzt werden kann.
Quinn Taylor
1
jd-gui-0.3.3 auch hier
amaidment
1
Für den Fall, dass man das Java-Dekompiler-Plugin von Eclipse auf Eclipse Juno installiert hat und Eclipse an der DND-Initialisierung von Marketplace hängen blieb, um den gesamten Prozess abzubrechen: Das Entfernen des JAR * jd. * Aus dem Verzeichnis der Eclipse-Plugins hat es gerade für mich behoben.
LSerni
4
@Rishi genauso wie Sie Ihre IP in jeder Sprache oder Plattform schützen - gute Anwälte. DRM ist nur ein Pflasterstein.
Antimon
1
Es bietet jetzt SaaS, bei dem Sie die .class-Datei in die Cloud hochladen und den dekompilierten Code zurückgeben. Arbeitete für ein einfaches POJO.
Salvador Valencia
101

Es gibt ein paar Dekompilierer da draußen ... Eine schnelle Suche ergibt:

  1. Procyon : Open Source (Apache 2) und aktiv entwickelt
  2. Krakatau : Open Source (GPLv3) und aktiv entwickelt
  3. CFR : Open Source (MIT) und aktiv entwickelt
  4. JAD
  5. DJ Java Decompiler
  6. Mokka

Und viele mehr.

Diese erzeugen Java-Code. Java enthält etwas, mit dem Sie JVM-Bytecode ( Javap ) anzeigen können .

billjamesdev
quelle
2
Darf ich auch hinzufügen, dass Procyon, CFR, JAD und DJ als Web-Service verfügbar sind: javadecompilers.com
Andrew Rukin
javadecompilers.com - Lebensretter Bruder!
MarcoZen
kpdus.com/jad.html ist ein AD-Link
marcinj
Danke @marcinj, ich habe einen anderen Link gefunden, der Links zum Herunterladen enthält.
Billjamesdev
51

Um den Java-Quellcode anzuzeigen, überprüfen Sie einen Dekompiler. Suche nach jad .

Wenn Sie Bytecodes anzeigen möchten, verwenden Sie einfach Javap, das mit dem JDK geliefert wird .

Marko
quelle
5
Ich würde stattdessen einen der Open-Source-Dekompiler empfehlen, da diese aktiv entwickelt werden. Verwenden Sie stattdessen Procyon , den CFR-Dekompiler oder Krakatau (Python).
Janus Troelsen
29

Ich habe mehrere ausprobiert und Procyon schien für mich am besten zu funktionieren. Es befindet sich in der aktiven Entwicklung und unterstützt viele Funktionen der neuesten Java-Versionen.

Dies sind die anderen, die ich versucht habe:

  • CFR
    • Vielversprechende, aber oft fehlgeschlagene Methodendekompilierung. Ich werde diesen im Auge behalten. Auch aktiv entwickelt mit Unterstützung für die neuesten Java-Funktionen.
  • Krakatau
    • Verfolgt einen anderen Ansatz, indem versucht wird, äquivalenten Java-Code auszugeben, anstatt zu versuchen, die ursprüngliche Quelle zu rekonstruieren, was das Potenzial hat, sie für verschleierten Code zu verbessern. Nach meinen Tests war es ungefähr auf dem Niveau von Procyon, aber immer noch schön, etwas anderes zu haben. Ich musste das -skipBefehlszeilenflag verwenden, damit es bei Fehlern nicht aufhört. Aktiv entwickelt und interessanterweise in Python geschrieben.
  • JD-GUI
  • JAD
    • Funktioniert, unterstützt aber nur Java 1.4 und niedriger. Auch als Eclipse-Plugin erhältlich . Nicht mehr in der Entwicklung.
Bmaupin
quelle
1
Beachten Sie, dass das IGNORE_EXCEPTIONSObjekt jetzt in das Befehlszeilenflag geändert wurde -skip.
Antimon
14

Procyon enthält einen Dekompiler. Es ist FOSS.

Janus Troelsen
quelle
13

Ruß ist eine Option für neueren Java-Code. Zumindest hat es den Vorteil, dass es noch vor kurzem gewartet wird ...

Auch Java Decompiler ist ein Decompiler sowohl mit einem Stand-alone - GUI und Eclipse - Integration.

Schließlich wurde Jdec nicht erwähnt, obwohl es nicht so ausgefeilt ist wie andere Optionen.

Quinn Taylor
quelle
Wissen Sie, wie man eine konkrete Klassendatei mit Soot dekompiliert? Ich bin nicht sicher, ob es möglich ist ...
Janus Troelsen
12

JD-GUI ist wirklich gut. Sie können einfach eine JAR- Datei öffnen und den Code durchsuchen, als würden Sie an einer IDE arbeiten. Gutes Zeug.

G Kumar
quelle
11

Hier ist eine Liste der Dekompilierer ab Februar 2015:

Procyon , Open Source, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

CFR , kostenlos, kein Quellcode verfügbar, http://www.benf.org/other/cfr/

JD , kostenlos nur für nichtkommerzielle Zwecke, http://jd.benow.ca/

Fernflower , Open Source, https://github.com/fesh0r/fernflower ,

JAD - hier nur aus historischen Gründen angegeben. Kostenlos, kein Quellcode verfügbar, http://varaneckas.com/jad/ Veraltet, nicht unterstützt und nicht korrekt dekompiliert Java 5 und höher.

Sie können die oben genannten Dekompilierer online testen, ohne dass eine Installation erforderlich ist, und Ihre eigene fundierte Wahl treffen.

Java-Dekompilierer in der Cloud: http://www.javadecompilers.com/

Andrew Rukin
quelle
1
Procyon funktioniert am besten !!!!
MarcoZen
10

Es gibt einige Programme, die Sie verwenden können. Sie erhalten den eigentlichen Java-Code, aber manchmal wurde der Code verschleiert, sodass Methoden durch einen Buchstaben oder eine Zahl oder eine zufällige Mischung aus Buchstaben und Zahlen benannt werden.

DJ Decompiler Mocha

Mike Pone
quelle
9

Die meisten Dekompilierer für Java basieren auf JAD . Es ist ein großartiges Tool, wurde aber leider eine Weile nicht aktualisiert und verarbeitet Java 1.5+ -Klassen nicht sehr gut. Ich habe keine Tools gesehen, die mehr als 1,5 Klassen richtig handhaben.

John Meagher
quelle
3
Los geht's: Ich habe gerade eine Antwort auf deine Antwort gepostet;) JDK1.5 und mehr unterstützt!
VonC
"Ich habe keine Tools gesehen, die mehr als 1,5 Klassen richtig handhaben" - Procion, Fernflower, JDCore und CFR (dieses behandelt Java 8!)
Andrew Rukin
6

Schauen Sie sich Cavaj an .

Paulo Guedes
quelle
3
Das nutzt auch jaddarunter.
Quinn Taylor
6

Alle bisher aufgelisteten JAD-Links scheinen defekt zu sein, daher habe ich diese Seite gefunden. Funktioniert super (zumindest für Linux)! Unter Ubuntu 11.10 musste ich aus irgendeinem Grund die statische herunterladen.

http://www.varaneckas.com/jad

kdazzle
quelle
5
  • JAD funktioniert und ist einfach.

  • Wenn Sie nur die Methoden anzeigen möchten, verwenden Sie Javap.

Berlin Brown
quelle
5

Wenn Sie sehen möchten, wie der Java-Compiler bestimmte Dinge ausführt, möchten Sie keine Dekompilierung, sondern eine Demontage. Bei der Dekompilierung wird der Bytecode in eine Java-Quelle umgewandelt, was bedeutet, dass viele Informationen auf niedriger Ebene verloren gehen. Wenn Sie sich über die Compileroptimierung wundern, sind dies wahrscheinlich genau die Informationen, die Sie interessieren.

Wie auch immer, ich habe zufällig einen Open Source Java Disassembler geschrieben . Im Gegensatz zu Javap funktioniert dies auch bei stark pathologischen Klassen, sodass Sie sehen können, was Verschleierungswerkzeuge auch für Ihre Klassen tun. Es kann auch dekompiliert werden, obwohl ich es nicht empfehlen würde.

Antimon
quelle
4

JAD funktioniert bei mir nicht (Ubuntu 11.10-Problem), also bin ich weitergegangen und habe weitergemacht JODO gesetzt . Zumindest hat es Open Java Quellcode und konnte meine .class richtig dekompilieren .

Ich empfehle, zuerst ' branch / generic' branch zu überprüfen . Die Stämme sind nicht stabil.

alexander.box
quelle
1
JODO wird sporadisch gewartet, während CFR und Procyon aktiv entwickelt werden und JDK 8-Unterstützung haben.
Janus Troelsen
4

Auf der IntelliJ IDEA-Plattform können Sie das Java Decompiler IntelliJ Plugin verwenden . Sie können alle Java-Quellen während des Debugging-Vorgangs anzeigen, auch wenn Sie nicht über alle verfügen. Es basiert auf den berühmten Tools JD-GUI .

Geben Sie hier die Bildbeschreibung ein

naXa
quelle
@ NoOP's Bist du ein Roboter? Oder einfach nicht auf ein Thema achten?
NaXa
Entschuldigung, auf den ersten Blick scheint es, als würde nur ein Link antworten. Vielleicht sollten Sie weitere Details hinzufügen und auch Ihre Antwort entspricht nur dem Fragentitel, nicht dem Inhalt der Frage.
ashiquzzaman33
Dies gibt keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlassen Sie einen Kommentar unter seinem Beitrag.
Kristijan Iliev
@ Chris haben Sie die vorgeschlagene Lösung ausprobiert? Hast du die Frage überhaupt gelesen ?
NaXa
1
@ NoOP tut mir leid, dass ich unhöflich bin = (Ich bin überwältigt von der Anzahl der Rezensenten, die nicht
aufpassen
1

Mit AndroChef Java Decompiler können Sie apk-, dex-, jar- und java-Klassendateien dekompilieren. Es ist einfach und leicht. AndroChef JD basiert auf FernFlower . Sie können es in 10 kostenlosen Anwendungen bewerten.

AndroChef unterstützt Java-Sprachfunktionen wie Generika, Aufzählungen und Anmerkungen. Laut einigen Studien kann AndroChef Java Decompiler 98,04% der mit herkömmlichen Java-Compilern generierten Java-Anwendungen dekompilieren - eine sehr hohe Wiederherstellungsrate. Es ist ein einfaches, aber leistungsstarkes Tool, mit dem Sie Java- und Dalvik-Bytecode (DEX, APK) in eine lesbare Java-Quelle dekompilieren können.

naXa
quelle
1
@ Dimitrius, bitte lesen Sie die Antworten während einer Überprüfung sorgfältig durch. Wie stellen Sie sich vor, hier einen FernFlower oder AndroChef aufzunehmen?
NaXa