logo

Декомпілятор Java

Декомпілятор Java — це спеціальний тип декомпілятора, який приймає файл класу як вхідні дані та створює вихідний код Java як вихідні дані. Декомпіляція - це процес, зворотний процесу компіляції. Таким чином, декомпілятор не створює копію вихідного коду. Це тому, що частина інформації втрачається з вихідного коду під час компіляції програми.

Але є багато складнощів, наприклад, код Java структурований, а байт-код не структурований. Крім того, перетворення не відбувається один до одного: дві різні програми Java можуть видавати ідентичний байт-код.

Доступні такі декомпілятори Java:

  • DJ Java декомпілятор
  • JReversePro
  • ЄВРЕЇ
  • JD-CORE/ JD-GUI/ JD Eclipse

Декомпілятор JAD

JAD — це програма командного рядка. Він написаний мовою C++. Основною функцією є розбирання файлів .class. JAD можна розгорнути з консолі, і він декомпілює класи Java у вихідний код. Таким чином розробники можуть глибоко зазирнути в код бібліотек часу виконання Java і навіть прикрасити рядки, підготувавши їх до повторної компіляції. Існує ризик перезапису файлів вихідного коду, особливо якщо використовується параметр «-o» (перезаписати вихідні файли без підтвердження).

приклад

Давайте створимо просту програму на Java, яка додає два числа.

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

Виконайте кроки, щоб перетворити .class у читабельний вихідний код Java. Тут ми використовуємо декомпілятор JAD.

ipconfig на Ubuntu

Крок 1: Завантажте інструмент JAD з https://bit.ly/2XuRzT5

перетворити рядок на char

крок 2: Розпакуйте файл zip і отримайте jad.exe.

Декомпілятор Java

крок 3: Створіть файл .java (DecompilerDemo.java) у тій же папці, у яку ви розпакували файл zip.

крок 4: Скомпілюйте та запустіть файл .java. Він створить файл .class у відповідній папці.

Декомпілятор Java 2

крок 5: Тепер перемістіть файл .class і програму jad до іншої папки.

Декомпілятор Java 3

Крок 6: Введіть команду: Декомпілятор jad

Декомпілятор Java 4

Наведена вище команда створює файл .jad у відповідній папці.

Декомпілятор Java 5

Крок 7: Введіть команду: jad ?s java DecompilerDemo

Декомпілятор Java 6

Він створює файл .java у тій же папці.

Декомпілятор Java 7

Відкрийте DecompilerDemo.java, ми отримаємо наступний код:

з'єднання та типи з'єднань
 // 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()); } } 

Ми можемо помітити, що написаний файл .java відрізняється від згенерованого файлу .java, але дає той самий результат.

Дизассемблер файлів класів Java

Команда javap

The javap це інструмент командного рядка Java, який постачається з JDK. Він використовується для розбирання файлу класу та друку зрозумілої людині версії цього класу. Його вихід залежить від використовуваної опції. Не використовуючи жодних параметрів, javap друкує пакет, захищені та публічні поля та методи переданих йому класів. А javap також використовується, щоб дізнатися, які методи доступні для класу, якщо у вас немає вихідного коду, який використовувався для створення класу. Загальний формат команди javap:

 javap [options] filename 

Опції

За допомогою команди javap доступно багато варіантів. Деякі з них:

    -c:Він друкує розібраний код.-p:Він показує всі класи та учасників.-s:Він друкує внутрішні підписи типу.-константи:Він показує статичні кінцеві константи.

Розберіть файл класу за допомогою команди javap

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

Згенеруйте файл класу вищезгаданої програми та скористайтеся наступною командою, щоб розібрати файл класу.

 javap -c -p DisassembleDemo 

Вихід

Наступний результат показує, що містить файл класу.

fcfs
Декомпілятор Java 8

Але ми не отримуємо вихідний код Java за допомогою команди javap. Отже, доступно багато декомпіляторів, які перетворюють файл .class у файл .java.