556 Stimmen

Wie kann ich Java-Klassendateien "dekompilieren"?

Welches Programm kann ich verwenden, um eine Klassendatei zu dekompilieren? Erhalte ich tatsächlich Java-Code oder ist es nur JVM-Assembler-Code?

Auf Fragen zur Java-Leistung auf dieser Website sehe ich oft Antworten von Leuten, die die Java-Klassendatei "dekompiliert" haben, um zu sehen, wie der Compiler bestimmte Dinge optimiert.

588voto

VonC Punkte 1117238

Update Februar 2016:

www.javadecompilers.com listet JAD als:

der populärste Java-Decompiler, aber in erster Linie nur für dieses Alter. Geschrieben in C++, also sehr schnell.
Veraltet, nicht unterstützt und nicht korrekt dekompiliert Java 5 und höher

Das kann also bei neueren JDKs (7, 8) anders sein.

Auf derselben Website sind weitere Tools aufgeführt.

Und javadecompiler, wie von Salvador Valencia en die Kommentare (Sept 2017), bietet eine SaaS-Lösung an, bei der Sie die .class Datei in die Cloud und Sie erhalten den dekompilierten Code zurück.


Ursprüngliche Antwort: Okt. 2008

  • Die endgültige Version von JSR 176, die die wichtigsten Funktionen von J2SE 5.0 (Java SE 5) definiert, wurde am 30. September 2004 veröffentlicht.
  • Die neueste Java-Version, die von JAD, dem berühmten Java-Decompiler von Pavel Kouznetsov, unterstützt wird, ist JDK 1.3 .
  • Die meisten Java-Decompiler, die heute aus dem Internet heruntergeladen werden können, wie z.B. "DJ Java Decompiler" oder "Cavaj Java Decompiler", basieren auf JAD: sie können keine Java 5-Quellen anzeigen.

Java-Decompiler (Ein weiterer Fast Java Decompiler) hat:

  • Explizite Unterstützung für Dekompilierung und Analyse Java 5+ ".class"-Dateien.
  • Eine schöne GUI:

screenshot

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

Sie bietet 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 sehen, ohne etwas zu installieren.

101voto

billjamesdev Punkte 14314

Es gibt einige Dekompilierer... 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 wird mit einer Funktion geliefert, mit der Sie den JVM-Bytecode sehen können ( javap ).

51voto

Marko Punkte 29192

Um den Java-Quellcode zu sehen, sollten Sie einen Decompiler verwenden. Suchen Sie nach jad .

Wenn Sie Bytecodes sehen wollen, verwenden Sie einfach javap das mit dem JDK geliefert wird.

29voto

bmaupin Punkte 12357

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

Dies sind die anderen, die ich ausprobiert habe:

  • CFR
    • Vielversprechend, aber oft gescheitert Methode Dekompilierung. Ich werde sie im Auge behalten. Auch aktiv entwickelt mit Unterstützung für die neuesten Java-Funktionen.
  • Krakatau
    • Verfolgt einen anderen Ansatz, indem es versucht, äquivalenten Java-Code auszugeben, anstatt zu versuchen, den ursprünglichen Quellcode zu rekonstruieren, was es möglicherweise besser für verschleierten Code macht. Nach meinen Tests war es ungefähr gleichwertig mit Procyon, aber trotzdem schön, etwas anderes zu haben. Ich musste die -skip Befehlszeilenflag, damit es bei Fehlern nicht abbricht. Es wird aktiv entwickelt und ist interessanterweise in Python geschrieben.
  • JD-GUI
  • JAD
    • Funktioniert, unterstützt aber nur Java 1.4 und darunter. Auch verfügbar als Eclipse-Plugin . Nicht mehr in der Entwicklung.

18voto

sakana Punkte 4071

Ich benutze JAD-Decompiler .

Es gibt eine Eclipse Plugin für sie, jadeclipse . Es ist ziemlich schön.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X