logo

Java-decompiler

Een Java-decompiler is een speciaal type decompiler die een klassenbestand als invoer gebruikt en Java-broncode als uitvoer produceert. Decompilatie is precies het omgekeerde proces van compilatie. Decompiler produceert dus geen replica van de broncode. Dit komt doordat er een stukje informatie uit de broncode verloren gaat tijdens het compileren van het programma.

Maar er zijn veel complexiteiten: Java-code is bijvoorbeeld gestructureerd en bytecode is niet gestructureerd. Bovendien is de transformatie niet één op één: twee verschillende Java-programma's kunnen identieke bytecode opleveren.

Er zijn de volgende Java-decompilers beschikbaar:

  • DJ Java-decompiler
  • JReversePro
  • JODEN
  • JD-CORE/JD-GUI/JD Eclipse

JAD-decompiler

De JAD is een opdrachtregeltoepassing. Het is geschreven in C++. De belangrijkste functie is het demonteren van de .class-bestanden. JAD kan vanaf de console worden geïmplementeerd en zal Java-klassen in de broncode decompileren. Op deze manier kunnen ontwikkelaars diep in de code van Java-runtimebibliotheken kijken en zelfs de regels verfraaien en ze voorbereiden op een hercompilatie. Er bestaat een risico dat de broncodebestanden worden overschreven, vooral wanneer de parameter '-o' (uitvoerbestanden overschrijven zonder bevestiging) wordt gebruikt.

Voorbeeld

Laten we een eenvoudig Java-programma maken dat twee getallen toevoegt.

 import java.util.*; class DecompilerDemo { public static void main(String args[]) { int a,b,c; Scanner sc=new Scanner(System.in); System.out.print('Enter the value of a: '); a=sc.nextInt(); System.out.print('Enter the value of b: '); b=sc.nextInt(); c=a+b; System.out.println('sum of a and b is: '+c); } } 

Volg de stappen om de .class om te zetten in leesbare Java-broncode. Hier gebruiken we de JAD-decompiler.

Stap 1: JAD-tool downloaden van https://bit.ly/2XuRzT5

Stap 2: Pak het zipbestand uit en download jad.exe.

Java-decompiler

Stap 3: Maak een .java-bestand (DecompilerDemo.java) in dezelfde map waarin u het zipbestand hebt uitgepakt.

Stap 4: Compileer en voer het .java-bestand uit. Er wordt een .class-bestand gegenereerd in de betreffende map.

Java-decompiler2

Stap 5: Verplaats nu het .class-bestand en de jad-applicatie naar een andere map.

Java-decompiler3

Stap 6: Typ de opdracht: jad DecompilerDemo

Java-decompiler4

Bovenstaande opdracht genereert een .jad-bestand in de betreffende map.

Java-decompiler5

Stap 7: Typ de opdracht: jad ?s java DecompilerDemo

Java-decompiler6

Het genereert het .java-bestand in dezelfde map.

Java-decompiler7

Open de DecompilerDemo.java en we krijgen de volgende code:

 // Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options: packimports(3) // Source File Name: DecompilerDemo.java import java.io.PrintStream; import java.util.Scanner; class DecompilerDemo { DecompilerDemo() { } public static void main(String args[]) { Scanner scanner = new Scanner(System.in); System.out.print('Enter the value of a: '); int i = scanner.nextInt(); System.out.print('Enter the value of b: '); int j = scanner.nextInt(); int k = i + j; System.out.println((new StringBuilder()).append('sum of a and b is: ').append(k).toString()); } } 

We kunnen zien dat het geschreven .java-bestand verschilt van het gegenereerde .java-bestand, maar dezelfde uitvoer geeft.

Java-klasse bestandsdisassembler

Javap-opdracht

De Java is een Java-opdrachtregelprogramma dat wordt geleverd met JDK. Het wordt gebruikt om het klassenbestand te demonteren en een voor mensen leesbare versie van die klasse af te drukken. De output is afhankelijk van de gebruikte optie. Zonder enige optie te gebruiken, drukt Javap het pakket, de beveiligde en openbare velden en methoden van de klassen af ​​die eraan zijn doorgegeven. A Java wordt ook gebruikt om erachter te komen welke methoden beschikbaar zijn voor een klasse als u niet over de broncode beschikt die is gebruikt om de klasse te maken. Het algemene formaat van de Javap-opdracht is:

 javap [options] filename 

Opties

'wat' is 10 van 100'

Met de Javap-opdracht zijn er veel opties beschikbaar. Sommige ervan zijn:

    -C:Het drukt gedemonteerde code af.-P:Het toont alle klassen en leden.-S:Het drukt interne typehandtekeningen af.-constanten:Het toont statische eindconstanten.

Demonteer een klassenbestand met behulp van de Javap-opdracht

 class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } } 

Genereer het klassenbestand van het bovenstaande programma en gebruik de volgende opdracht om het klassenbestand te demonteren.

 javap -c -p DisassembleDemo 

Uitvoer

De volgende uitvoer laat zien wat het klassenbestand bevat.

Java-decompiler8

Maar we krijgen de Java-broncode niet met behulp van de Javap-opdracht. Er zijn dus veel decompilers beschikbaar die een .class-bestand naar een .java-bestand converteren.