Декомпілятор 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.
крок 3: Створіть файл .java (DecompilerDemo.java) у тій же папці, у яку ви розпакували файл zip.
крок 4: Скомпілюйте та запустіть файл .java. Він створить файл .class у відповідній папці.
крок 5: Тепер перемістіть файл .class і програму jad до іншої папки.
Крок 6: Введіть команду: Декомпілятор jad
Наведена вище команда створює файл .jad у відповідній папці.
Крок 7: Введіть команду: jad ?s java DecompilerDemo
Він створює файл .java у тій же папці.
Відкрийте 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 доступно багато варіантів. Деякі з них:
Розберіть файл класу за допомогою команди javap
class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } }
Згенеруйте файл класу вищезгаданої програми та скористайтеся наступною командою, щоб розібрати файл класу.
javap -c -p DisassembleDemo
Вихід
Наступний результат показує, що містить файл класу.
fcfs
Але ми не отримуємо вихідний код Java за допомогою команди javap. Отже, доступно багато декомпіляторів, які перетворюють файл .class у файл .java.