Bagaimana cara "mendekompilasi" file kelas Java? [Tutup]

556

Program apa yang dapat saya gunakan untuk mendekompilasi file kelas? Apakah saya benar-benar mendapatkan kode Java, atau hanya kode perakitan JVM?

Pada pertanyaan kinerja Java di situs ini saya sering melihat tanggapan dari orang-orang yang telah "mendekompilasi" file kelas Java untuk melihat bagaimana kompiler mengoptimalkan hal-hal tertentu.

Tidur
sumber
4
Seni "dekompilasi" juga dapat dianggap sebagai rekayasa terbalik. Meskipun terkadang ketika melakukan rekayasa balik sesuatu, Anda tidak selalu memiliki akses ke binari.
Makach
Tidak ada yang disebutkan bytecodeviewer.com , yang dapat mendekompilasi ke sumber java dan ke bytecode (untuk sumber java didasarkan pada JAD).
Fernando Gonzalez Sanchez

Jawaban:

588

Pembaruan Februari 2016:

www.javadecompilers.com mencantumkan JAD sebagai:

decompiler Java paling populer, tetapi terutama untuk usia ini saja. Ditulis dalam C ++, jadi sangat cepat.
Sudah ketinggalan jaman, tidak didukung, dan tidak mendekompilasi dengan benar Java 5 dan yang lebih baru

Jadi jarak tempuh Anda mungkin berbeda dengan jdk terbaru (7, 8).

Situs yang sama mencantumkan alat lain.

Dan javadecompiler, seperti dicatat oleh Salvador Valencia dalam komentar (September 2017), menawarkan SaaS tempat Anda mengunggah .classfile ke cloud dan mengembalikan kode yang terurai.


Jawaban asli: Oktober 2008

  • Rilis terakhir JSR 176, yang mendefinisikan fitur utama J2SE 5.0 (Java SE 5), telah diterbitkan pada 30 September 2004.
  • Versi Java terbaru yang didukung oleh JAD, decompiler Java terkenal yang ditulis oleh Mr. Pavel Kouznetsov, adalah JDK 1.3 .
  • Sebagian besar pengurai Java yang dapat diunduh hari ini dari Internet, seperti "DJ Java Decompiler" atau "Cavaj Java Decompiler", diberdayakan oleh JAD: mereka tidak dapat menampilkan sumber Java 5.

Java Decompiler ( Decompiler Fast Java yang lain) memiliki:

  • Dukungan eksplisit untuk mendekompilasi dan menganalisis file Java 5+ “.class”.
  • GUI yang bagus:

tangkapan layar

Ia bekerja dengan kompiler dari JDK 1.1.8 hingga JDK 1.7.0, dan lainnya ( Jikes , JRockit , dll.).

Ini fitur versi demo online langsung yang sebenarnya berfungsi penuh! Anda bisa menjatuhkan file jar pada halaman dan melihat kode sumber yang di-decompile tanpa menginstal apa pun.

VONC
sumber
5
+1 Perlu disebutkan bahwa itu juga termodulasi, sehingga inti (diimplementasikan dalam C ++) dapat dimanfaatkan di tempat lain.
Quinn Taylor
1
jd-gui-0.3.3 juga tersedia di sini
takjub
1
Dalam kasus satu menginstal plugin java decompiler Eclipse pada Eclipse Juno, dan Eclipse mulai tergantung pada Marketplace DND Inisialisasi memaksa untuk membunuh seluruh proses: menghapus jd. *. Jar dari direktori plugin Eclipse hanya memperbaikinya untuk saya.
LSerni
4
@Rishi dengan cara yang sama Anda melindungi IP Anda dalam bahasa atau platform apa pun - pengacara yang baik. DRM hanyalah seorang bandaid.
Antimony
1
Sekarang menawarkan SaaS tempat Anda mengunggah file .class ke cloud dan mengembalikan Anda kode yang telah dikompilasi. Bekerja untuk POJO sederhana.
Salvador Valencia
101

Ada beberapa dekompiler di luar sana ... Hasil pencarian cepat:

  1. Procyon : open-source (Apache 2) dan dikembangkan secara aktif
  2. Krakatau : open-source (GPLv3) dan dikembangkan secara aktif
  3. CFR : open-source (MIT) dan dikembangkan secara aktif
  4. JAD
  5. DJ Java Decompiler
  6. Moka

Dan masih banyak lagi.

Ini menghasilkan kode Java. Java hadir dengan sesuatu yang memungkinkan Anda melihat kode byte JVM ( javap ).

billjamesdev
sumber
2
Bolehkah saya juga menambahkan, bahwa Procyon, CFR, JAD, dan DJ tersedia sebagai layanan web: javadecompilers.com
Andrew Rukin
javadecompilers.com - penyelamat bro!
MarcoZen
kpdus.com/jad.html adalah beberapa tautan AD
marcinj
Terima kasih @marcinj, saya menemukan tautan lain yang memiliki tautan untuk mengunduhnya.
billjamesdev
51

Untuk melihat kode sumber Java, periksa beberapa dekompiler. Pergi mencari jad .

Jika Anda ingin melihat bytecodes, cukup gunakan javap yang datang dengan JDK.

Marko
sumber
5
Saya akan merekomendasikan salah satu dekompiler open-source sebagai gantinya, karena mereka dikembangkan secara aktif. Gunakan Procyon , dekompiler CFR atau Krakatau (Python) sebagai gantinya.
Janus Troelsen
29

Saya mencoba beberapa, dan Procyon tampaknya bekerja yang terbaik untuk saya. Itu sedang dalam pengembangan aktif dan mendukung banyak fitur dari versi terbaru Java.

Inilah yang saya coba:

  • CFR
    • Metode dekompilasi yang menjanjikan, tetapi sering gagal. Saya akan mengawasi yang satu ini. Juga aktif dikembangkan dengan dukungan untuk fitur Java terbaru.
  • Krakatau
    • Mengambil pendekatan berbeda karena mencoba mengeluarkan kode Java yang setara daripada mencoba merekonstruksi sumber asli, yang berpotensi membuatnya lebih baik untuk kode yang dikaburkan. Dari pengujian saya kira-kira setara dengan Procyon, tetapi masih bagus untuk memiliki sesuatu yang berbeda. Saya memang harus menggunakan -skipflag baris perintah agar tidak berhenti pada kesalahan. Secara aktif dikembangkan, dan cukup menarik ditulis dalam Python.
  • JD-GUI
  • JAD
    • Bekerja, tetapi hanya mendukung Java 1.4 dan di bawah. Juga tersedia sebagai plugin Eclipse . Tidak lagi dalam pengembangan.
bupupin
sumber
1
Perhatikan bahwa IGNORE_EXCEPTIONSmasalahnya sekarang telah diubah menjadi bendera baris perintah -skip.
Antimony
14

Procyon termasuk dekompiler. Itu FOSS.

Janus Troelsen
sumber
13

Jelaga adalah pilihan untuk kode Java yang lebih baru. Setidaknya itu memiliki keuntungan masih dipertahankan baru-baru ini ...

Juga, Java Decompiler adalah dekompiler dengan GUI yang berdiri sendiri dan integrasi Eclipse.

Terakhir, Jdec belum disebutkan, meskipun itu tidak dipoles seperti opsi lainnya.

Quinn Taylor
sumber
Apakah Anda tahu cara mendekompilasi file kelas yang konkret dengan Soot? Saya tidak yakin itu mungkin ...
Janus Troelsen
12

JD-GUI sangat bagus. Anda bisa membuka file JAR dan menelusuri kode seolah-olah Anda sedang mengerjakan IDE. Barang bagus.

G Kumar
sumber
11

Berikut daftar dekompiler per Feb 2015:

Procyon , open-source, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

CFR , gratis, tidak ada kode sumber yang tersedia, http://www.benf.org/other/cfr/

JD , gratis untuk penggunaan non-komersial saja, http://jd.benow.ca/

Fernflower , open-source, https://github.com/fesh0r/fernflower ,

JAD - diberikan di sini hanya karena alasan historis. Gratis, tidak ada kode sumber yang tersedia, http://varaneckas.com/jad/ Sudah kedaluwarsa, tidak didukung, dan tidak dapat didekompilasi dengan benar pada Java 5 dan yang lebih baru.

Anda dapat menguji dekompiler yang disebutkan di atas secara online, tidak diperlukan instalasi dan membuat pilihan berpendidikan Anda sendiri.

Java decompiler di cloud: http://www.javadecompilers.com/

Andrew Rukin
sumber
1
Procyon bekerja paling baik !!!!
MarcoZen
10

Ada beberapa program yang bisa Anda gunakan. Anda akan mendapatkan kode Java yang sebenarnya, tetapi kadang-kadang kode tersebut telah dikaburkan sehingga metode diberi nama dengan satu huruf atau angka atau campuran acak huruf dan angka.

DJ Decompiler Mocha

Mike Pone
sumber
9

Sebagian besar pengurai untuk Java didasarkan pada JAD . Ini adalah alat yang hebat, tetapi sayangnya belum diperbarui untuk sementara waktu dan tidak menangani kelas Java 1.5+ dengan sangat baik. Saya belum melihat alat yang akan menangani dengan benar 1,5+ kelas.

John Meagher
sumber
3
ini dia: Saya baru saja memposting jawaban untuk jawaban Anda;) JDK1.5 dan lebih banyak dukungan!
VonC
"Saya belum melihat alat apa pun yang akan menangani dengan benar 1,5+ kelas" - Procion, Fernflower, JDCore dan CFR (yang ini menangani Java 8!)
Andrew Rukin
6

Lihatlah cavaj .

Paulo Guedes
sumber
3
Itu juga menggunakan di jadbawahnya.
Quinn Taylor
6

Semua tautan JAD yang terdaftar sejauh ini tampaknya rusak, jadi saya menemukan situs ini. Berfungsi bagus (untuk Linux, setidaknya)! Di Ubuntu 11.10 saya harus mengunduh yang statis untuk alasan apa pun.

http://www.varaneckas.com/jad

kdazzle
sumber
5
  • JAD adalah yang berfungsi dan sederhana.

  • Juga, jika Anda hanya ingin melihat metodenya, gunakan javap.

Berlin Brown
sumber
5

Jika Anda ingin melihat bagaimana kompiler Java melakukan hal-hal tertentu, Anda tidak ingin dekompilasi, Anda ingin pembongkaran. Dekompilasi melibatkan transformasi bytecode menjadi sumber Java, yang berarti bahwa banyak informasi tingkat rendah hilang, dan jika Anda bertanya-tanya tentang optimasi kompiler, ini mungkin informasi yang sangat Anda minati.

Lagi pula, kebetulan saya telah menulis disassembler Java open source . Tidak seperti Javap, ini bekerja bahkan pada kelas yang sangat patologis, sehingga Anda dapat melihat apa yang dilakukan alat kebingungan untuk kelas Anda juga. Itu juga dapat melakukan dekompilasi, meskipun saya tidak akan merekomendasikannya.

Antimon
sumber
4

JAD tidak bekerja untuk saya (masalah Ubuntu 11.10) jadi saya telah bergerak maju dan menghirup JODO . Setidaknya memiliki kode sumber Java Terbuka dan mampu mendekompilasi .class saya dengan benar.

Saya sarankan untuk memeriksa cabang 'cabang / generik' terlebih dahulu. Batangnya tidak stabil.

alexander.box
sumber
1
JODO dikelola secara sporadis sementara CFR dan Procyon dikembangkan secara aktif dan memiliki dukungan JDK 8.
Janus Troelsen
4

Pada platform IntelliJ IDEA Anda dapat menggunakan Plugin Java Decompiler IntelliJ . Ini memungkinkan Anda untuk menampilkan semua sumber Java selama proses debugging Anda, bahkan jika Anda tidak memiliki semuanya. Ini didasarkan pada alat JD-GUI yang terkenal .

masukkan deskripsi gambar di sini

naXa
sumber
@ NoOP's Apakah Anda robot? Atau hanya tidak memperhatikan subjek ulasan?
naXa
Maaf untuk itu, sekilas sepertinya tautan saja yang menjawab. Mungkin Anda harus menambahkan lebih banyak detail dan jawaban Anda hanya mematuhi judul pertanyaan bukan dengan isi pertanyaan.
ashiquzzaman33
Ini tidak memberikan jawaban untuk pertanyaan itu. Untuk mengkritik atau meminta klarifikasi dari penulis, tinggalkan komentar di bawah posting mereka.
Kristijan Iliev
@ Chris, apakah Anda sudah mencoba solusi yang disarankan? Pernahkah Anda membaca pertanyaannya ?
naXa
1
@ NoOP minta maaf karena tidak sopan = (Saya kewalahan dengan jumlah pengulas yang tidak memperhatikan.
naXa
1

Dengan AndroChef Java Decompiler Anda dapat mendekompilasi file apk, dex, jar, dan java class. Sederhana dan mudah. AndroChef JD didasarkan pada FernFlower . Anda dapat mengevaluasinya dalam 10 penggunaan gratis.

AndroChef mendukung fitur bahasa Java seperti generik, enum, dan anotasi. Menurut beberapa penelitian, AndroChef Java Decompiler mampu mendekompilasi 98,04% aplikasi Java yang dihasilkan dengan kompiler Java tradisional - tingkat pemulihan yang sangat tinggi. Ini adalah alat sederhana namun kuat yang memungkinkan Anda mendekompilasi bytecode Java dan Dalvik (DEX, APK) menjadi sumber Java yang dapat dibaca.

naXa
sumber
1
@ Dimitrius, harap baca jawaban dengan seksama selama ulasan. Bagaimana Anda membayangkan termasuk FernFlower atau AndroChef di sini?
naXa