Apa itu Decompile?
Decompile berarti mengonversi kode eksekusi atau program yang siap dijalankan—terkadang disebut object code—menjadi bentuk bahasa pemrograman tingkat tinggi yang lebih mudah dipahami manusia. Dekompilasi adalah salah satu bentuk rekayasa balik (reverse-engineering) yang melakukan operasi kebalikan dari kompiler. Dekompilasi pertama kali digunakan pada tahun 1960-an untuk memfasilitasi migrasi program dari satu platform ke platform lain.
Untuk mengonversi kode pemrograman menjadi program yang dapat dijalankan, kode tersebut harus terlebih dahulu dikompilasi, yaitu diubah menjadi serangkaian bit biner (1 dan 0) yang dapat dipahami oleh komputer. Proses ini dapat dibalik dengan mendekompilasi program akhir, itulah sebabnya dekompilasi disebut sebagai bentuk rekayasa balik.
Alat yang digunakan untuk mendekompilasi kode perangkat lunak dan menerjemahkannya ke dalam bentuk yang lebih mudah dipahami manusia disebut decompiler.
Decompiler adalah program komputer yang menerima masukan dalam bentuk file eksekusi. Jika kode sumber file tersebut hilang atau rusak karena suatu alasan, proses dekompilasi berusaha memulihkan kode tersebut, atau setidaknya sebagian besar dari kode tersebut. Berbeda dengan kompiler, yang penerima akhirnya adalah komputer, penerima dekompiler adalah manusia.
Sebuah disassembler adalah alat serupa yang menerjemahkan object code menjadi bahasa assembly. Disassembler menyediakan “dump” dari kode mesin yang membuat sebuah program berjalan. Beberapa kompiler balik sebenarnya adalah disassembler.
Mengapa Perlu Melakukan Dekompilasi?
Ada banyak alasan yang sah untuk mendekompilasi kode sumber, seperti:
- Memahami cara kerja suatu program dan fungsionalitas kodenya;
- Memulihkan kode sumber untuk pengarsipan atau pembaruan;
- Mendeteksi virus dalam program guna meningkatkan keamanannya;
- Debugging program dan memperbaiki kesalahan;
- Menerjemahkan kode usang agar dapat digunakan kembali;
- Menghapus batasan kode secara legal, seperti kata sandi, proteksi salinan, atau batas waktu penggunaan; dan
- Menjadikan perangkat lunak kompatibel dengan komponen pihak ketiga serta memungkinkan interoperabilitas.
Decompiler juga dapat digunakan untuk tujuan yang tidak etis atau ilegal, terutama untuk membobol perlindungan hak cipta perangkat lunak dan menggunakannya tanpa izin.
Tantangan dalam Dekompilasi
Dekompilasi jarang dapat merekonstruksi kode sumber asli secara sempurna atau sepenuhnya. Salah satu alasannya adalah keberhasilan dekompilasi tergantung pada informasi kode yang tersedia. Selain itu, hasil dekompilasi juga bergantung pada keterampilan, keahlian, serta alat dan teknik yang digunakan oleh engineer yang melakukan rekayasa balik.
Nama yang diberikan oleh programmer pada variabel dan fungsi untuk mempermudah identifikasi biasanya tidak disimpan dalam file eksekusi, sehingga tidak selalu dapat dipulihkan melalui dekompilasi. Singkatnya, karena kode sumber jarang menyertakan “identifier” seperti itu, dekompilasi yang sempurna hampir tidak pernah terjadi.
Semakin kompleks kode, semakin sulit pula proses dekompilasi. Tidak semua program juga dapat didekompilasi. Selain itu, sulit untuk memisahkan data dan kode karena keduanya direpresentasikan dengan cara yang mirip di sebagian besar sistem komputer saat ini.
Apakah Dekompilasi Legal?
Dekompilasi terkadang digunakan secara tidak etis tanpa izin pemegang hak cipta untuk mereproduksi kode sumber guna digunakan kembali atau dimodifikasi. Dekompilasi perangkat lunak berhak cipta ilegal di banyak negara, meskipun aturan spesifiknya berbeda-beda.
Di Amerika Serikat, misalnya, hukum hak cipta tidak sepenuhnya melarang dekompilasi. Digital Millennium Copyright Act (DMCA) memungkinkan rekayasa balik jika seseorang secara sah memiliki hak untuk menggunakan salinan program komputer, dengan tujuan mengidentifikasi dan menganalisis elemen-elemen yang diperlukan untuk mencapai interoperabilitas dengan program lain. Namun, mendekompilasi program untuk melewati sistem yang mengontrol akses terhadap karya berhak cipta dianggap ilegal. Demikian pula, Uni Eropa juga mengizinkan dekompilasi untuk beberapa penggunaan, termasuk interoperabilitas.
Program dapat dirancang agar tahan terhadap dekompilasi dengan menggunakan metode perlindungan seperti obfuscation.
Alat Dekompiler Perangkat Lunak yang Populer
Beberapa alat dekompiler, disassembler, dan rekayasa balik tersedia untuk digunakan secara legal. Banyak dari alat ini bersifat open source atau gratis, sementara yang lain bersifat komersial dan berbayar.
Beberapa alat paling populer adalah:
- IDA Pro. Disassembler interaktif dengan bahasa perintah bawaan
- Hex-Rays Decompiler. Plugin yang mengonversi kode prosesor native menjadi versi yang lebih mudah dibaca seperti bahasa C
- ClassInformer. Digunakan pada file biner yang dibuat dengan Visual Studio
- CFF Explorer. Menyediakan alat untuk mengedit file eksekusi portable (PE), termasuk disassembler
- Hiew. Editor file biner dengan disassembler bawaan
- PEiD. Menganalisis entropi untuk mendeteksi apakah suatu aplikasi telah dikemas ulang