Hoe kan ik Java-klassebestanden ‘decompileren’?

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:

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 gedefinieerd, 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 aangedreven door JAD: ze kunnen geen Java 5-bronnen weergeven.

Java-decompiler(nog een andere snelle Java-decompiler) heeft:

  • Expliciete ondersteuning voor het decompileren en analyseren van Java 5+.class -bestanden.
  • Een mooie GUI:

screenshot

Het werkt met compilers van JDK 1.1.8 tot JDK 1.7.0 en andere (Jikes, JRockit, enz.).

Het bevat een online live demoversiedie eigenlijk volledig functioneel is! Je kunt gewoon een jar-bestand op de pagina neerzetten en de gedecompileerde broncode bekijken zonder iets te installeren.


Antwoord 2, autoriteit 17%

Er zijn een paar decompilers die er zijn… Een snelle zoekopdracht levert:

  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 je JVM-bytecode 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 de ‘branches/generic’branch te bekijken. De stam is niet stabiel.


Antwoord 17

Op het IntelliJ IDEA-platform kunt u de Java Decompiler IntelliJ-plug-ingebruiken. Hiermee kunt u alle Java-bronnen weergeven tijdens uw foutopsporingsproces, zelfs als u ze niet allemaal hebt. Het is gebaseerd op de beroemde tools JD-GUI.

voer hier de afbeeldingsbeschrijving in


Antwoord 18

Met AndroChef Java Decompilerkun je apk-, dex-, jar- en java-klassebestanden decompileren. Het is eenvoudig en gemakkelijk. AndroChef JD is gebaseerd op FernFlower. U kunt het evalueren in 10 gratis toepassingen.

AndroChef ondersteunt Java-taalfuncties zoals generieke termen, opsommingen en annotaties. Volgens sommige onderzoeken kan AndroChef Java Decompiler 98,04% van de Java-applicaties decompileren die zijn gegenereerd met traditionele Java-compilers – een zeer hoog herstelpercentage. Het is een eenvoudige maar krachtige tool waarmee je Java en Dalvik bytecode (DEX, APK) kunt decompileren naar een leesbare Java-bron.


Antwoord 19

Voor OSX raad ik aan: jarzilla of JD-GUI

Met beide kun je jar, war, etc. bekijken. bestandsinhoud en decompileert alle klassenbestanden erin.

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

LEAVE A REPLY

Please enter your comment!
Please enter your name here

three + 19 =

Other episodes