logo

Java Decompiler

Java Decompiler je špeciálny typ dekompilátora, ktorý berie súbor triedy ako vstup a vytvára zdrojový kód Java ako výstup. Dekompilácia je presne opačný proces kompilácie. Dekompilátor teda nevytvára repliku zdrojového kódu. Je to preto, že počas kompilácie programu sa zo zdrojového kódu stratila časť informácií.

Existuje však veľa zložitostí, napríklad kód Java je štruktúrovaný a bajtový kód nie je štruktúrovaný. Navyše, transformácia nie je jedna k jednej: dva rôzne programy Java môžu poskytnúť rovnaký bajtový kód.

K dispozícii sú nasledujúce dekompilátory Java:

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

Dekompilátor JAD

JAD je aplikácia príkazového riadku. Je napísaný v C++. Hlavnou funkciou je rozobrať súbory .class. JAD je možné nasadiť z konzoly a dekompiluje triedy Java do zdrojového kódu. Týmto spôsobom môžu vývojári nahliadnuť hlboko do kódu Java runtime knižníc a dokonca skrášliť riadky a pripraviť ich na rekompiláciu. Existuje riziko prepísania súborov zdrojového kódu, najmä pri použití parametra '-o' (prepísanie výstupných súborov bez potvrdenia).

pvr plná forma

Príklad

Vytvorme jednoduchý Java program, ktorý pridá dve čísla.

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

Postupujte podľa krokov na konverziu .class na čitateľný zdrojový kód Java. Tu používame dekompilátor JAD.

Krok 1: Stiahnite si nástroj JAD z https://bit.ly/2XuRzT5

Krok 2: Rozbaľte súbor zip a získajte súbor jad.exe.

Java Decompiler

Krok 3: Vytvorte súbor .java (DecompilerDemo.java) v rovnakom priečinku, do ktorého ste rozbalili súbor zip.

Krok 4: Kompilujte a spustite súbor .java. V príslušnom priečinku vygeneruje súbor .class.

Java Decompiler2

Krok 5: Teraz presuňte súbor .class a aplikáciu jad do iného priečinka.

Java Decompiler3

Krok 6: Zadajte príkaz: jad Decompiler Demo

Java Decompiler4

Vyššie uvedený príkaz vygeneruje súbor .jad v príslušnom priečinku.

Java Decompiler5

Krok 7: Zadajte príkaz: jad ?s java DecompilerDemo

Java Decompiler6

Vygeneruje súbor .java v rovnakom priečinku.

Java Decompiler7

Otvorte súbor DecompilerDemo.java a získame nasledujúci kód:

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

Môžeme pozorovať, že napísaný .java súbor sa líši od vygenerovaného .java súboru, ale dáva rovnaký výstup.

tenký algoritmus

Java Class File Disassembler

príkaz javap

The javap je nástroj príkazového riadka Java, ktorý sa dodáva s JDK. Používa sa na rozobratie súboru triedy a vytlačí ľudsky čitateľnú verziu tejto triedy. Jeho výstup závisí od použitej možnosti. Bez použitia akejkoľvek voľby, javap vytlačí balík, chránené a verejné polia a metódy tried, ktoré mu boli odovzdané. A javap sa tiež používa na zistenie, ktoré metódy sú dostupné pre triedu, ak nemáte zdrojový kód, ktorý bol použitý na vytvorenie triedy. Všeobecný formát príkazu javap je:

inicializovať zoznam python
 javap [options] filename 

možnosti

Pomocou príkazu javap je dostupných veľa možností. Niektoré z nich sú:

    -c:Vytlačí rozložený kód.-p:Zobrazuje všetky triedy a členov.-s:Vytlačí interné podpisy typu.- konštanty:Zobrazuje statické konečné konštanty.

Rozložte súbor triedy pomocou príkazu javap

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

Vygenerujte súbor triedy vyššie uvedeného programu a pomocou nasledujúceho príkazu rozoberte súbor triedy.

 javap -c -p DisassembleDemo 

Výkon

Nasledujúci výstup ukazuje, čo obsahuje súbor triedy.

Java Decompiler8

Ale nezískame zdrojový kód Java pomocou príkazu javap. Existuje teda veľa dostupných dekompilátorov, ktoré konvertujú súbor .class na súbor .java.