Hoe “decompileer” ik Java-klassebestanden?

Welk programma kan ik gebruiken om een klassenbestand te decompileren? Krijg ik echt Java-code, of is het alleen JVM-assemblagecode?

Op Java-prestatievragen op deze site zie ik vaak reacties van mensen die het Java-klassebestand hebben “gedecompileerd” om te zien hoe de compiler bepaalde dingen optimaliseert.


Antwoord 1, autoriteit 100%

Update februari 2016:

www.javadecompilers.comvermeldt JAD als zijnde:

de meest populaire Java-decompiler, maar vooral van deze leeftijd. Geschreven in C++, dus erg snel.
Verouderd, niet ondersteund en niet correct gedecompileerd Java 5 en hoger

Uw kilometerstand kan dus variëren met recente jdk (7, 8).

Dezelfde site vermeldt andere tools.

En javadecompiler, zoals opgemerkt door Salvador Valenciain de opmerkingen(september 2017), biedt een SaaS waar u de .classbestand naar de cloud en u krijgt de gedecompileerde code terug.


Oorspronkelijke antwoord: oktober 2008

  • De definitieve release van JSR 176, waarin de belangrijkste functies van J2SE 5.0 (Java SE 5) worden beschreven, is op 30 september 2004 gepubliceerd.
  • De nieuwste Java-versie die wordt ondersteund door JAD, de beroemde Java-decompiler die is geschreven door de heer Pavel Kouznetsov, is JDK 1.3 .
  • De meeste Java-decompilers die tegenwoordig van internet kunnen worden gedownload, zoals “DJ Java Decompiler” of “Cavaj Java Decompiler”, worden mogelijk gemaakt door JAD: ze kunnen geen Java 5-bronnen weergeven.

Java decompiler (nog een andere sneljava decompiler) heeft:

  • Expliciete ondersteuning voor decompiling en analyse Java 5 + “.class” -bestanden.
  • een leuke GUI:

Het werkt met compilers van JDK 1.1.8 tot JDK 1.7.0, en anderen (jikes , jrockit , etc.).

Het bevat een online live demo-versie die eigenlijk volledig functioneel is! U kunt gewoon een JAR-bestand op de pagina laten vallen en de decompiled broncode bekijken zonder iets te installeren.


Antwoord 2, Autoriteit 17%

Er zijn een paar decompilers die er zijn … een snelle zoekopbrengsten:

  1. procyon : open-source (Apache 2) en actief ontwikkeld
  2. Krakatau : open-source (GPLV3) en actief ontwikkeld
  3. CFR : open-source (MIT) en actief ontwikkeld
  4. jad
  5. DJ Java Decompiler
  6. mokka

en nog veel meer.

Deze produceren Java-code. Java wordt geleverd met iets waarmee u JVM BYTE-code kunt zien (javap ).


Antwoord 3, Autoriteit 9%

Controleer een decompiler om de Java-broncode te zien. Ga op zoek naar jad.

Als je bytecodes wilt zien, gebruik dan gewoon javapdat bij de JDK wordt geleverd.


Antwoord 4, autoriteit 5%

Ik heb er verschillende geprobeerd, en Procyonleek het beste voor mij te werken. Het wordt actief ontwikkeld en ondersteunt veel functies van de nieuwste versies van Java.

Dit zijn de andere die ik heb geprobeerd:

  • CFR
    • Veelbelovende, maar vaak mislukte decompilatie van methoden. Ik zal deze in de gaten houden. Ook actief ontwikkeld met ondersteuning voor de nieuwste Java-functies.
  • Krakatau
    • Neemt een andere benadering in die zin dat het probeert equivalente Java-code uit te voeren in plaats van te proberen de originele bron te reconstrueren, wat het potentieel heeft om het beter te maken voor versluierde code. Van mijn testen was het ongeveer gelijk aan Procyon, maar toch leuk om iets anders te hebben. Ik moest wel de opdrachtregelvlag -skipgebruiken, zodat het niet zou stoppen bij fouten. Actief ontwikkeld, en interessant genoeg is het geschreven in Python.
  • JD-GUI
  • JAD
    • Werkt, maar ondersteunt alleen Java 1.4 en lager. Ook beschikbaar als een Eclipse-plug-in. Niet langer in ontwikkeling.

Antwoord 5, autoriteit 3%

Ik gebruik JAD Decompiler.

Er is een Eclipseplug-in voor, jadeclipse. Het is best aardig.


Antwoord 6, autoriteit 2%

Procyonbevat een decompiler. Het is FOSS.


Antwoord 7, autoriteit 2%

Sootis een optie voor nieuwere Java-code. Het heeft in ieder geval het voordeel dat het nog recentelijk onderhouden wordt…

Ook Java Decompileris een decompiler met zowel een stand- alleen GUI en Eclipse-integratie.

Ten slotte is Jdecniet genoemd, hoewel het niet zo gepolijst is als andere opties.


Antwoord 8, autoriteit 2%

JD-GUIis echt goed. U kunt gewoon een JAR-bestand openen en door de code bladeren alsof
je werkt aan een IDE. Goed spul.


Antwoord 9, autoriteit 2%

Hier is een lijst met decompilers vanaf februari 2015:

Procyon, open source, https:// bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

CFR, gratis, geen broncode beschikbaar, http:/ /www.benf.org/other/cfr/

JD, alleen gratis voor niet-commercieel gebruik, http://jd.benow .ca/

Fernflower, open source, https://github.com/fesh0r/ varenbloem,

JAD– wordt hier alleen om historische redenen gegeven. Gratis, geen broncode beschikbaar, http://varaneckas.com/jad/
Verouderd, niet ondersteund en decompileert Java 5 en hoger niet correct.

U kunt bovengenoemde decompilers online testen, geen installatie vereist en uw eigen weloverwogen keuze maken.

Java-decompilers in de cloud:http://www.javadecompilers.com/


Antwoord 10, autoriteit 2%

Er zijn een paar programma’s die u kunt gebruiken. U krijgt de daadwerkelijke Java-code, maar soms is de code versluierd, zodat methoden worden genoemd met één letter of cijfer of een willekeurige combinatie van letters en cijfers.

DJ-decompiler
Mokka


Antwoord 11, autoriteit 2%

De meeste decompilers voor Java zijn gebaseerd op JAD. Het is een geweldige tool, maar is helaas al een tijdje niet meer geüpdatet en kan Java 1.5+ klassen niet goed aan. Ik heb geen tools gezien die 1.5+ klassen goed aankunnen.


Antwoord 12

Bekijk cavaj.


Antwoord 13

Alle tot nu toe vermelde JAD-links lijken niet te werken, dus ik heb deze site gevonden. Werkt prima (in ieder geval voor Linux)! Op Ubuntu 11.10 moest ik om wat voor reden dan ook de statische downloaden.

http://www.varanekas.com/jad


Antwoord 14

  • JAD is er een die werkt en eenvoudig is.

  • Als je alleen de methoden wilt zien, gebruik dan javap.


Antwoord 15

Als je wilt zien hoe de Java-compiler bepaalde dingen doet, wil je geen decompilatie, maar demontage. Decompilatie houdt in dat de bytecode wordt omgezet in een Java-bron, wat inhoudt dat veel informatie op laag niveau verloren gaat, en als u zich afvraagt over compileroptimalisatie, is dit waarschijnlijk de informatie waarin u geïnteresseerd bent.

Hoe dan ook, ik heb toevallig een open source Java-disassemblergeschreven. In tegenstelling tot Javap werkt dit zelfs bij zeer pathologische klassen, zodat u ook kunt zien wat verduisteringshulpmiddelen met uw klassen doen. Het kan ook decompileren, hoewel ik het niet zou aanraden.


Antwoord 16

JAD werkt niet voor mij (Ubuntu 11.10-probleem) dus ik ben verder gegaan en heb me verdiept in JODO. Het heeft in ieder geval Open Java-broncode en heeft mijn .classcorrect kunnen decompileren.

Ik raad aan om eerst ‘Takken / Generic’ te bekijken . De trunks zijn niet stabiel.


Antwoord 17

Op Intellij Idee-platform kunt u java decompiler intellij plugin gebruiken. Hiermee kunt u alle Java-bronnen weergeven tijdens uw debuggingsproces, zelfs als u ze niet allemaal hebt. Het is gebaseerd op de beroemde gereedschappen jd-gui .


Antwoord 18

Met Androchef Java Decompiler U kunt decompileer APK, Dex, JAR en JAVA-klas-bestanden. Het is eenvoudig en gemakkelijk. Androchef JD is gebaseerd op fernflower . U kunt het in 10 gratis gebruik evalueren.

Androchef ondersteunt Java-taalfuncties zoals generieke, ENUM’s en annotaties. Volgens sommige studies kan Androchef Java Decompiler 98.04% van de Java-toepassingen gegenereerd met traditionele Java-compilers – een zeer hoge herstelpercentage hebben gegenereerd. Het is een eenvoudige maar krachtige tool waarmee je Java en Dalvik Bytecode (Dex, APK) in leesbare Java-bron kunt decompileren.


Antwoord 19

Voor OSX, raad ik aan: Jarzilla of JD-GUI

Ze staan ​​allebei toe dat je Jar, War, enz. kunt bekijken. Bestandsinhoud en decompiles alle klassenbestanden binnenin hen.

Jarzilla: https://code.google.com/p/jarzilla/
JD-GUI: http://jd.benow.ca/

Other episodes