logo

Decompiler של Java

Java Decompiler הוא סוג מיוחד של Decompiler שלוקח קובץ מחלקה כקלט ומייצר קוד מקור של Java כפלט. הפירוק הוא בדיוק תהליך הפוך של קומפילציה. לפיכך, ה-decompiler אינו מייצר העתק של קוד המקור. זה בגלל שמעט מידע אבד מקוד המקור במהלך הידור של התוכנית.

אבל יש הרבה מורכבויות, למשל, קוד Java מובנה, וקוד בתים אינו מובנה. יתר על כן, השינוי אינו אחד לאחד: שתי תוכניות Java שונות עשויות להניב קוד בתים זהה.

ישנם מאחזי ג'אווה הבאים זמינים:

  • DJ Java Decompiler
  • JReversePro
  • יהודים
  • JD-CORE/ JD-GUI/ JD Eclipse

Decompiler של 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.

שלב 1: הורד את כלי JAD מ https://bit.ly/2XuRzT5

שלב 2: חלץ את קובץ ה-zip וקבל את jad.exe.

Decompiler של Java

שלב 3: צור קובץ .java (DecompilerDemo.java) באותה תיקיה שבה חילצת את קובץ ה-zip.

שלב 4: הידור והפעל את קובץ ה-.java. זה יפיק קובץ .class בתיקייה המתאימה.

Java Decompiler2

שלב 5: כעת העבר את קובץ ה-.class ויישום jad לתיקיה אחרת.

Java Decompiler3

שלב 6: הקלד את הפקודה: jad DecompilerDemo

Java Decompiler4

הפקודה למעלה יוצרת קובץ .jad בתיקייה המתאימה.

Java Decompiler5

שלב 7: הקלד את הפקודה: jad ?s java DecompilerDemo

Java Decompiler6

זה יוצר את קובץ ה-java באותה תיקיה.

Java Decompiler7

פתח את 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 שנוצר אך נותן את אותו פלט.

קבל אורך מערך ב-c

מפרק קבצי Java Class

פקודת javap

ה javap הוא כלי שורת פקודה של Java שמגיע עם JDK. הוא משמש לפירוק קובץ המחלקה ומדפיס גרסה הניתנת לקריאה על ידי אדם של אותה מחלקה. הפלט שלו תלוי באפשרות המשמשת. מבלי להשתמש בכל אפשרות, javap מדפיסה את החבילה, שדות מוגנים וציבוריים ושיטות של המחלקות המועברות אליה. א javap משמש גם כדי לגלות אילו שיטות זמינות עבור מחלקה אם אין לך את קוד המקור ששימש ליצירת המחלקה. הפורמט הכללי של פקודת javap הוא:

 javap [options] filename 

אפשרויות

עם פקודת javap, אפשרויות רבות זמינות. חלק מהם הם:

    -ג:הוא מדפיס קוד מפורק.-p:זה מציג את כל הכיתות והחברים.-s:הוא מדפיס חתימות סוג פנימי.-קבועים:הוא מציג קבועים סופיים סטטיים.

לפרק קובץ מחלקה באמצעות פקודת javap

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

צור את קובץ הכיתה של התוכנית לעיל והשתמש בפקודה הבאה כדי לפרק את קובץ הכיתה.

 javap -c -p DisassembleDemo 

תְפוּקָה

הפלט הבא מראה מה יש בקובץ הכיתה.

Java Decompiler8

אבל אנחנו לא מקבלים את קוד המקור של Java באמצעות פקודת javap. אז יש הרבה מפרקים זמינים שממירים קובץ .class לקובץ .java.