logo

Java dekompiliatorius

„Java“ dekompiliatorius yra specialus dekompiliatoriaus tipas, kuris kaip įvestį priima klasės failą ir sukuria „Java“ šaltinio kodą kaip išvestį. Dekompiliavimas yra tiksliai atvirkštinis kompiliavimo procesas. Taigi, dekompiliatorius nesukuria šaltinio kodo kopijos. Taip yra todėl, kad kompiliuojant programą iš šaltinio kodo buvo prarasta dalis informacijos.

Tačiau yra daug sudėtingumo, pavyzdžiui, „Java“ kodas yra struktūrizuotas, o baitinis kodas nėra struktūrizuotas. Be to, transformacija nėra vienas prieš vieną: dvi skirtingos Java programos gali duoti identišką baitų kodą.

Galimi šie „Java“ dekompiliatoriai:

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

JAD dekompiliatorius

JAD yra komandų eilutės programa. Tai parašyta C++. Pagrindinė funkcija yra išardyti .class failus. JAD gali būti įdiegtas iš konsolės, ir jis dekompiliuos Java klases į šaltinio kodą. Tokiu būdu kūrėjai gali giliai įsigilinti į „Java“ vykdymo laiko bibliotekų kodą ir netgi pagražinti eilutes, paruošdami jas pakartotiniam kompiliavimui. Kyla šaltinio kodo failų perrašymo pavojus, ypač kai naudojamas parametras „-o“ (perrašyti išvesties failus be patvirtinimo).

Pavyzdys

Sukurkime paprastą Java programą, kuri prideda du skaičius.

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

Atlikite veiksmus, kad konvertuotumėte .class į skaitomą Java šaltinio kodą. Čia mes naudojame JAD dekompiliatorių.

1 žingsnis: Atsisiųskite JAD įrankį iš https://bit.ly/2XuRzT5

2 žingsnis: Ištraukite ZIP failą ir gaukite jad.exe.

Java dekompiliatorius

3 veiksmas: Sukurkite .java failą (DecompilerDemo.java) tame pačiame aplanke, kuriame ištraukėte ZIP failą.

4 veiksmas: Sukompiliuokite ir paleiskite .java failą. Atitinkamame aplanke bus sukurtas .class failas.

Java dekompiliatorius2

5 veiksmas: Dabar perkelkite .class failą ir programą jad į kitą aplanką.

Java dekompiliatorius3

6 veiksmas: Įveskite komandą: jad DecompilerDemo

Java dekompiliatorius4

Aukščiau pateikta komanda sugeneruoja .jad failą atitinkamame aplanke.

Java dekompiliatorius5

7 veiksmas: Įveskite komandą: jad ?s java DecompilerDemo

Java dekompiliatorius 6

Tame pačiame aplanke sugeneruojamas .java failas.

Java dekompiliatorius7

Atidarę DecompilerDemo.java, gauname šį 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()); } } 

Galime pastebėti, kad parašytas .java failas skiriasi nuo sugeneruoto .java failo, bet pateikia tą pačią išvestį.

Java klasės failų išardiklis

javap komanda

runas in powershell

The javap yra „Java“ komandų eilutės įrankis, pateikiamas kartu su JDK. Jis naudojamas išardyti klasės failą ir spausdinti žmonėms suprantamą tos klasės versiją. Jo išvestis priklauso nuo naudojamos parinkties. Nenaudodamas jokios parinkties, javap atspausdina jam perduotų klasių paketą, saugomus ir viešuosius laukus bei metodus. A javap Taip pat naudojamas norint sužinoti, kurie metodai galimi klasei, jei neturite šaltinio kodo, kuris buvo naudojamas kuriant klasę. Bendras javap komandos formatas yra:

 javap [options] filename 

Galimybės

Su javap komanda yra daug parinkčių. Kai kurie iš jų yra:

    -c:Jis spausdina išardytą kodą.-p:Tai rodo visas klases ir narius.-s:Jis spausdina vidinius parašus.- konstantos:Tai rodo statines galutines konstantas.

Išardykite klasės failą naudodami javap komandą

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

Sugeneruokite aukščiau pateiktos programos klasės failą ir naudokite šią komandą, kad išardytumėte klasės failą.

 javap -c -p DisassembleDemo 

Išvestis

Ši išvestis rodo, kas yra klasės failo viduje.

Java dekompiliatorius8

Bet mes negauname Java šaltinio kodo naudodami javap komandą. Taigi yra daug dekompiliatorių, kurie konvertuoja .class failą į .java failą.