logo

Java Decompiler

Java Decompiler je posebna vrsta decompilerja, ki sprejme datoteko razreda kot vhod in ustvari izvorno kodo Java kot izhod. Dekompilacija je ravno obraten postopek kot kompilacija. Tako dekompilator ne izdela replike izvorne kode. To je zato, ker se med prevajanjem programa iz izvorne kode izgubi nekaj informacij.

Obstaja pa veliko zapletenosti, na primer koda Java je strukturirana, bajtna koda pa ni strukturirana. Poleg tega transformacija ni ena proti ena: dva različna programa Java lahko ustvarita enako bajtno kodo.

Na voljo so naslednji dekompilatorji Java:

  • DJ Java Decompiler
  • JReversePro
  • ŽIDJE
  • JD-CORE/ JD-GUI/ JD Eclipse

JAD Decompiler

JAD je aplikacija ukazne vrstice. Napisan je v C++. Glavna funkcija je razstaviti datoteke .class. JAD je mogoče namestiti s konzole in bo razrede Java dekompiliral v izvorno kodo. Na ta način lahko razvijalci pogledajo globoko v kodo izvajalnih knjižnic Java in celo polepšajo vrstice ter jih pripravijo na ponovno prevajanje. Obstaja nevarnost prepisovanja datotek izvorne kode, zlasti če je uporabljen parameter '-o' (prepisovanje izhodnih datotek brez potrditve).

Primer

Ustvarimo preprost program Java, ki sešteje dve številki.

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

Sledite korakom za pretvorbo .class v berljivo izvorno kodo Java. Tukaj uporabljamo JAD decompiler.

Korak 1: Prenesite orodje JAD iz https://bit.ly/2XuRzT5

2. korak: Ekstrahirajte datoteko zip in dobite jad.exe.

Java Decompiler

3. korak: Ustvarite datoteko .java (DecompilerDemo.java) v isti mapi, v kateri ste ekstrahirali datoteko zip.

4. korak: Prevedite in zaženite datoteko .java. Ustvaril bo datoteko .class v ustrezni mapi.

Java Decompiler 2

5. korak: Zdaj premaknite datoteko .class in aplikacijo jad v drugo mapo.

Java Decompiler 3

6. korak: Vnesite ukaz: jad DecompilerDemo

Java Decompiler 4

Zgornji ukaz ustvari datoteko .jad v ustrezni mapi.

java znak v niz
Java Decompiler 5

7. korak: Vnesite ukaz: jad?s java DecompilerDemo

brezplačen ipconfig
Java Decompiler 6

Ustvari datoteko .java v isti mapi.

Java Decompiler 7

Odprite DecompilerDemo.java in dobimo naslednjo kodo:

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

Opazimo lahko, da se zapisana datoteka .java razlikuje od ustvarjene datoteke .java, vendar daje enak rezultat.

Java Class File Disassembler

ukaz javap

The javap je orodje ukazne vrstice Java, ki je priloženo JDK. Uporablja se za razstavljanje datoteke razreda in tiskanje človeku berljive različice tega razreda. Njegov rezultat je odvisen od uporabljene možnosti. Ne da bi uporabil katero koli možnost, javap natisne paket, zaščitena in javna polja ter metode razredov, ki so mu bili posredovani. A javap se uporablja tudi za ugotavljanje, katere metode so na voljo za razred, če nimate izvorne kode, ki je bila uporabljena za ustvarjanje razreda. Splošna oblika ukaza javap je:

 javap [options] filename 

Opcije

Z ukazom javap je na voljo veliko možnosti. Nekateri izmed njih so:

    -c:Natisne razstavljeno kodo.-p:Prikazuje vse razrede in člane.-s:Natisne notranje tipske podpise.-konstante:Prikazuje statične končne konstante.

Razstavite datoteko razreda z ukazom javap

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

Ustvarite datoteko razreda zgornjega programa in uporabite naslednji ukaz za razstavljanje datoteke razreda.

 javap -c -p DisassembleDemo 

Izhod

Naslednji izhod prikazuje, kaj vsebuje datoteka razreda.

Java Decompiler 8

Vendar izvorne kode Jave ne dobimo z uporabo ukaza javap. Tako je na voljo veliko dekompilatorjev, ki pretvorijo datoteko .class v datoteko .java.