intellij - ubuntu java decompiler




Wie dekompiliere ich Java-Klassendateien? (13)

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

Bei Java-Leistungsfragen auf dieser Site sehe ich oft Antworten von Personen, die die Java-Klassendatei "dekompiliert" haben, um zu sehen, wie der Compiler bestimmte Dinge optimiert.


Aktualisierung Februar 2016:

www.javadecompilers.com listet JAD als:

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

So kann Ihre Laufleistung mit der letzten jdk (7, 8) variieren.

Die gleiche Website listet andere Tools auf.

Und javadecompiler, wie von Salvador Valencia in den Kommentaren (Sept. 2017) erwähnt, bietet einen SaaS, wo Sie die .class Datei in die Cloud hochladen und Ihnen den dekompilierten Code zurückgeben.

Ursprüngliche Antwort: Okt. 2008

  • Die endgültige Version von JSR 176, die die Hauptmerkmale 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 Herrn Pavel Kouznetsov, unterstützt wird, ist JDK 1.3 .
  • Die meisten Java-Dekompiler, die heute aus dem Internet heruntergeladen werden können, wie "DJ Java Decompiler" oder "Cavaj Java Decompiler", werden von JAD betrieben: Sie können keine Java 5-Quellen anzeigen.

Java Decompiler (Noch ein weiterer Fast Java Decompiler):

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

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

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


Alle bisher aufgelisteten JAD-Links scheinen kaputt zu sein, also habe ich diese Seite gefunden. Funktioniert super (zumindest für Linux)! Unter Ubuntu 11.10 musste ich den statischen aus welchem ​​Grund auch immer herunterladen.

http://www.varaneckas.com/jad


Die meisten Decompiler für Java basieren auf kpdus.com/jad.html . Es ist ein großartiges Tool, wurde aber leider eine Weile nicht aktualisiert und behandelt Java 1.5+ Klassen nicht sehr gut. Ich habe keine Werkzeuge gesehen, die 1.5+ Klassen richtig behandeln.


Es gibt ein paar Decompiler 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. Mocha

Und viele mehr.

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



Hier ist eine Liste von Decompilern ab Februar 2015:

Procyon , Open-Source, Procyon

CFR , frei, kein Quellcode verfügbar, CFR

JD , nur für nicht-kommerzielle Nutzung, http://jd.benow.ca/

Fernblume , Open-Source, https://github.com/fesh0r/fernflower ,

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

Sie können die oben genannten Decompiler online testen, keine Installation benötigen und Ihre eigene fundierte Wahl treffen.

Java-Decompiler in der Cloud: www.javadecompilers.com


Ich probierte mehrere, und Procyon schien am besten für mich zu arbeiten. Es ist aktiv in der Entwicklung und unterstützt viele Funktionen der neuesten Java-Versionen.

Dies sind die anderen, die ich ausprobiert habe:

  • CFR
    • Vielversprechende, aber oft fehlgeschlagene Dekompilierung von Methoden. Ich werde das hier im Auge behalten. Auch aktiv mit Unterstützung für die neuesten Java-Funktionen entwickelt.
  • Krakatau
    • Es verfolgt einen anderen Ansatz, indem es versucht, äquivalenten Java-Code auszugeben, anstatt zu versuchen, die ursprüngliche Quelle zu rekonstruieren, was das Potenzial hat, es für verschleierten Code besser zu machen. Von meinen Tests war es ungefähr gleichwertig mit Procyon, aber immer noch schön, etwas anderes zu haben. Ich musste das Kommandozeilenflag -skip verwenden, damit es bei Fehlern nicht aufhörte. Aktiv entwickelt und interessanterweise ist es in Python geschrieben.
  • JD-GUI
  • JAD
    • Arbeitete, unterstützt aber nur Java 1.4 und niedriger. Auch als Eclipse-Plugin verfügbar. Nicht mehr in Entwicklung.

JAD funktioniert nicht für mich (Ubuntu 11.10 Problem), also bin ich vorwärts gegangen und habe auf JODO . Zumindest hat es Open Java Quellcode und konnte meine .class korrekt dekompilieren.

Ich empfehle, den Zweig 'Zweige / Generika' zuerst auszuprobieren. Die Stämme sind nicht stabil.


Um Java-Quellcode zu sehen, überprüfen Sie einige Decompiler. Suche nach jad .

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


Wenn Sie sehen möchten, wie der Java-Compiler bestimmte Dinge tut, wollen Sie keine Dekompilierung, Sie wollen Disassemblierung. Bei der Dekompilierung wird der Bytecode in eine Java-Quelle umgewandelt. Das bedeutet, dass viele Informationen auf niedriger Ebene verloren gehen. Wenn Sie sich über die Optimierung von Compilern wundern, handelt es sich wahrscheinlich um genau die Informationen, an denen Sie interessiert sind.

Jedenfalls habe ich zufällig einen Krakatau . Anders als bei JavaP funktioniert dies sogar bei stark pathologischen Klassen, sodass Sie sehen können, welche Verschleierungstools auch Ihren Klassen zu schaffen machen. Es kann auch Dekompilierung durchführen, obwohl ich es nicht empfehlen würde.



Soot ist eine Option für neueren Java-Code. Zumindest hat es den Vorteil, dass es noch in letzter Zeit gepflegt wird ...

Java Decompiler ist ein Decompiler mit einer eigenständigen GUI und Eclipse-Integration.

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


  • JAD funktioniert und ist einfach.

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







decompiler