logo

Java Decompiler

En Java Decompiler är en speciell typ av decompiler som tar en klassfil som indata och producerar Java-källkod som output. Dekompileringen är exakt den omvända processen för kompilering. Dekompilatorn producerar alltså inte en kopia av källkoden. Det beror på att lite information förloras från källkoden under kompileringen av programmet.

Men det finns många komplexiteter, till exempel är Java-kod strukturerad och bytekod är inte strukturerad. Dessutom är transformationen inte en till en: två olika Java-program kan ge identisk bytekod.

Det finns följande Java-dekompilatorer tillgängliga:

  • DJ Java Decompiler
  • JReversePro
  • JUDAR
  • JD-CORE/ JD-GUI/ JD Eclipse

JAD Decompiler

JAD är ett kommandoradsprogram. Det är skrivet i C++. Huvudfunktionen är att ta isär .class-filerna. JAD kan distribueras från konsolen, och det kommer att dekompilera Java-klasser till källkoden. På så sätt kan utvecklare titta djupt in i koden för Java runtime-bibliotek och till och med försköna raderna och förbereda dem för en omkompilering. Det finns en risk för överskrivning av källkodsfiler, speciellt när parametern '-o' (skriv över utdatafiler utan bekräftelse) används.

Exempel

Låt oss skapa ett enkelt Java-program som lägger till två nummer.

 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); } } 

Följ stegen för att konvertera .class till läsbar Java-källkod. Här använder vi JAD decompiler.

Steg 1: Ladda ner JAD-verktyget från https://bit.ly/2XuRzT5

Steg 2: Extrahera zip-filen och hämta jad.exe.

Java Decompiler

Steg 3: Skapa en .java-fil (DecompilerDemo.java) i samma mapp som du har extraherat zip-filen i.

Steg 4: Kompilera och kör .java-filen. Det kommer att generera en .class-fil i respektive mapp.

Java Decompiler 2

Steg 5: Flytta nu .class-filen och jad-programmet till en annan mapp.

Java Decompiler 3

Steg 6: Skriv kommandot: jad DecompilerDemo

Java Decompiler 4

Kommandot ovan genererar en .jad-fil i respektive mapp.

css wrap text
Java Decompiler5

Steg 7: Skriv kommandot: jad ?s java DecompilerDemo

Java Decompiler 6

Den genererar .java-filen i samma mapp.

Java Decompiler 7

Öppna DecompilerDemo.java så får vi följande kod:

 // 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()); } } 

Vi kan observera att den skrivna .java-filen skiljer sig från den genererade .java-filen men ger samma utdata.

Java Class File Disassembler

javap kommando

De javap är ett Java kommandoradsverktyg som kommer med JDK. Den används för att plocka isär klassfilen och skriver ut en läsbar version av den klassen. Dess utdata beror på vilket alternativ som används. Utan att använda något alternativ skriver javap ut paketet, skyddade och offentliga fält och metoder för klasserna som skickas till det. A javap används också för att ta reda på vilka metoder som är tillgängliga för en klass om du inte har källkoden som användes för att skapa klassen. Det allmänna formatet för javap-kommandot är:

 javap [options] filename 

alternativ

Med javap-kommandot finns många alternativ tillgängliga. Några av dem är:

    -c:Den skriver ut demonterad kod.-p:Den visar alla klasser och medlemmar.-s:Den skriver ut interna typsignaturer.-konstanter:Den visar statiska slutkonstanter.

Ta isär en klassfil med javap-kommandot

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

Generera klassfilen för ovanstående program och använd följande kommando för att ta isär klassfilen.

 javap -c -p DisassembleDemo 

Produktion

Följande utdata visar vad klassfilen har inuti.

Java Decompiler8

Men vi får inte Java-källkoden genom att använda javap-kommandot. Så det finns många dekompilatorer tillgängliga som konverterar en .class-fil till en .java-fil.