Java Decompiler

Sebuah Java Decompiler, seringkali diperlukan untuk mengetahui source code suatu binary Java yang diakhiri dengan ekstensi *.class itu. Mungkin untuk mengetahui alur sebuah library yang tidak menyertakan source code-nya, atau juga mungkin untuk mem-bypass fungsi keamanannya hihihi… ;)) Berbeda dengan program-program yang dikompilasi dengan menggunakan native compiler seperti GCC atau C/C++, kode binary Java dikompilasi hingga tingkat medium (disebut byte code) yang akan di-interpretasikan oleh Java Virtual Machine. Walhasil, proses dekompilasinya akan menghasilkan sebuah source code Java yang benar-benar cantik dan mudah dibaca. Bandingkan dengan hasil dekompilasi program binary yang dikompilasi dengan native compiler, hasil maksimal decompiler adalah bahasa assembler-nya (hiii… takuut).

Saat ini, saya mengandalkan JAD sebagai decompiler yang cepat dan handal. Sebuah tool command-line-based yang cerdas, yang bisa melakukan dekompilasi sebuah source Java dengan nyaris sempurna. Lisensinya juga free. Program ini melakukan dekompilasi sebuah file *.class dan dikembalikan dalam bentuk file *.jad. File ini berisi source code Java dari *.class tersebut.

Antar Muka Grafis

Menggunakan command line, terkadang menyesakkan. Oleh karena itu, ada banyak program-program yang membuat antar muka yang nyaman untuk menjalankan program ini. Tinggal membuka file *.class dengan antar muka tersebut, maka program tersebut memerintahkan JAD untuk mendekompilasi, dan hasilnya langsung dibuka di text editor milik antar muka ini sehingga rasanya, membuka file *.class serasa membuka file teks berisi source code Java saja. Sangat nyaman.

Program antar mukanya, seperti yang di-list oleh homepage JAD, ada cukup banyak. Ada beberapa yang saya coba, di antaranya adalah DJ Java Decompiler, FrontEnd Plus, dan Cavaj Java Decompiler. Dari ketiga tools ini, menurut saya DJ-lah yang paling nyaman. Sayangnya, DJ tidak free dan harus bayar (baca: ngecrack). Untuk Cavaj, saya tak berhasil dalam instalasi sehingga tak bisa berbicara banyak mengenai antar muka ini. Paling masuk akal adalah FrontEnd Plus, ia juga free untuk digunakan. Sayangnya, program ini termasuk program Jadul dan development-nya terhenti di tahun 2001. Jadi tampilannya, sangat jadul dan jelek.

Sebenarnya ada satu lagi yang sangat menarik perhatian. Ia adalah JadClipse. Antar muka ini adalah plugin Eclipse. Jadi, dengan plugin ini, Eclipse memiliki kemampuan tambahan untuk membuka file *.class dengan Java editornya yang sangat hebat (syntax coloring, formatting, folding, dll). Sangat menggiurkan jika Eclipse memiliki fitur seperti ini. Sayangnya, saya tak berhasil melakukan instalasi plugin ini. Meskipun secara teori sudah terinstall dengan baik, namun ia tetap gagal melakukan dekompilasi. File *.class tetap dibuka oleh viewer default Eclipse, yang hanya menyajikan hasil disassembling-nya, bukan decompiling-nya. So sad πŸ™ Ada yang bisa bantu saya dengan share pengalaman tentang plugin ini?

Mungkin, kalau nanti ada waktu luang, saya akan membuat plugin sendiri untuk saya sendiri. Saya sangat tertarik dengan fitur ini di Eclipse. πŸ™‚

Published
Categorized as Java, Review

By Galih Satriaji

Bookaholic, Workaholic. Chubby. That's me!

22 comments

  1. Kepengen nyoba lih … blum pernah. Hmmm … aku bisa baca dokumentasinya dimana aja? … dll deh yg perlu. Maklum … dulu pernah ada aplikasi yg dah jalan … trus … code terakhirnya ditimpuk orang, krn kerja tim, pake Win CVS kala itu,ada yg commit, dan … yg bekap code terakhir, org2na pd ‘menghilang’ :D. Wkt itu klo ndak salah sih … mengandalkan history yg ada di winCVS, jd bisa balik meski dg perjuangan. Sptnya kok lebih hemat waktu pake ini. So Decompiler sangat dibutuhkan. Btw … .NET ada ndak yah :D.

  2. #ratna:
    – download aja dulu πŸ™‚
    – tetap lebih enak ngambil source yang di history na, soalnya kan masih ada remark dan komentar yang berguna. kalau didecompile komentar ini nggak akan muncul
    – Decompiler untuk .NET pasti ada, karena secara konsep, framework ini sama dengan konsep Java.

  3. mas..
    ada gk program supaya file *.class qt gk bisa di decompile atau minimal brantakan bgt hasil decompilenya, seperti dotFuscator yang ada di .NET

  4. tools decopiler diatas tidak membuka source cod sebenarnya. tetapi hasil compilernya. coba perhatikan deh hasil kompilernya pasti beda ama sorce code aslinya… malah bikin Qta pusing. ada yang tau tools buat baca source code yang sebenarnya ga? tolongin duonks..

  5. Ada… biaya mulai dari $70 per ex4 tapi tergantung tingkat kesulitan, karena benahin coding agar bisa dibaca itu susah.. dan ada beberapa enkripsi yg perlu dibuka.. kirim email via veematics@yahoo.com

  6. agar file *.class dibuka dengan jadclipse secara otomatis, anda harus mengubah default viewer utk type tsb. di eclipse bisa diset di preference, file association or something, saya lupa. tapi ada kok, saya udah lama pake.

  7. Memang kode byte java dibuat oleh para perancangx sesederhana mungkin sehingga memudahkan interpreter mengeksekusi instruksi JVM yg sudah dikompilasi(itu gunax biar bisa lebih cpt diekseksekusi dibandingkan dgn bhs interpretasi lainnya),berbeda dengan bahasa mesin intel yg kompleks dgn panjang instruksi yg tidak tetap.makax sama mudah juga mendengkompilasi kode byte java kedalam bentuk source kode.rancangan bahasax yg teratur jg memudahkan proses dekompilasi tsb,tentu saja diperlukan pemahaman tentang pemrograman java spy bisa membaca setiap baris source kode hasil dekompilasi (perancang JAD menganggap pengguna programx adalah programmer yg sudah cukup berpengalaman,makax tdk ditambahkan comment di source).walaupun ada perbedaan dikit dgn source kode asli,secara umum sama aja koq.itu hanyalah perbedaan interpretasi sedikit dari JAD dgn programmer aslinya.klo mengenai dekompilasi dari bahasa mesin asli intel emang susah klo dirubah kembali ke source code,karena selain panjang instruksi yg tidak tetap,juga format yg tidak teratur,dan bnyk instruksi yg harusx tidak perlu.tetapi tetap ada koq dekompiler u/ bhs mesin intel.

  8. Sebelumnya saya minta maaf…karna comentnya ga’ sejalan dg topik nya…
    mas galih aq mo nanya tentang aplikasi database dengan menggunakan java dan database servernya dg Mysql,

    kemaren aq ada ngikutin tutorial yang ada di buku pemerograman GUI Swing Java dengan Netbeans 5,

    ada beberapa permasalahan yg mengganjal hati saya:
    1
    pada contoh program yg membahas tentang pengolahan data base nya,, buku ini menyarankan agar tidak menggunakan properti model default pada komponen jTable, karna memiliki kekurangan jika di pakai untuk koneksi ke data base, yaitu ada kesulitan dalam mengisikan data record ke dalam tabel,
    Apa hal itu benar….?

    2.
    Setelah saya ikuti petunjuk buku itu ternyata program saya juga gak jalan…
    gambaran program yang saya buat itu
    mau nampilin data dari tabel d3_semester1, proses koneksi ke data base nya telah berhasil
    coding nya seperti berikut ini:

    ini class Insert_d3Semester1.java

    /*
    *

    edited by moderator 

    */
    mohon tanggapannya dan bantuannya mas….soalnya saya sdg nyelesaikan proyek akhir saya di PENS-ITS dan terus terang saya blum prnh nangani masalah database dengan java…..

    no hp saya 0852****** (edited by moderator)

  9. #akmal:
    Maaf Akmal, komentarmu saya edit tanpa mengurangi dari isi. Menurut saya,

    01. Ini tidak benar. Model default tetap bisa digunakan untuk mengisi record, meskipun dengan cara manual. Agar otomatis, subclass-kan default model dengan yang cocok untuk koneksi ke database.

  10. saya mau tanya
    hasil .jar yg di decompile oleh ‘java decompiler’ kan bisa dibaca..

    tapi kadang2 ada yang error ketika saya coba jalankan di netbean, file2 yang terbaca bukan nama sebenarnya, keliatannya sudah di ‘rusak’.. itu menurut saya apakah benar ya??

    apa ada juga cara untuk memperbaikinya.. atau memang sengaja dibuat begitu oleh pembuatnya.

    hehe.. terimakasih…

  11. java… java.. yaa… java…
    i like java… especially awewe west java…
    programnya pake basa sunda.. aliran sundanesse..
    weleh weleh…. gkggkgkkg….

Leave a comment

Your email address will not be published. Required fields are marked *