Baru-baru ini NSA (National Security Agency) Amerika merilis tools RE baru bernama Ghidra yang gratis. Rencananya ini akan open source, tapi saat ini repositorynya masih kosong. Ghidra ini merupakan saingan IDA Pro yang saat ini harganya sangat mahal. Sebagai informasi: harga license IDA Pro paling murah ratusan USD (versi starter edition), sampai totalnya puluhan ribu USD jika kita ingin paket lengkap (IDA Pro dengan semua plugin decompilernya).
Tulisan kali ini merupakan kesan pertama memakai Ghidra. Perlu dicatat bahwa pekerjaan utama saya bukan reversing. Ini sekedar hobi buat saya. namun demikian saya sudah melakukan reversing beraneka hal baik yang populer seperti Windows/Linux/Mac/Android/iOS maupun berbagai target yang unik, misalnya (yang sudah saya terbitkan tulisannya): hardware Pokemon Go Plus (berbasis ARM), berbagai challenge Flare-On (campuran), Challenge BEVX (Arm), dan RHME (AVR).
Sebelum memakai Ghidra ini saya sudah mencoba berbagai tool disassembler/decompiler, termasuk juga: IDA Pro, retdec, radare (dan interface GUI-nya: Cutter), Hopper, Binary Ninja. Bahkan untuk menyelesaikan challenge RHME, saya memakai objdump + editor teks karena tidak ada tool yang bagus untuk reversing AVR. Secara singkat: fitur Ghidra ini sangat bagus dibandingkan berbagai tool yang sudah pernah saya coba.
Ghidra ditulis dalam bahasa Java dengan GUI Swing dan tentunya memakai beberapa library native juga. Perlu diperhatikan: Ghidra ini butuh JDK11, jadi ketika mendownload Ghidra, jangan lupa sambil download JDK-nya dari Oracle.
Hal pertama yang akan saya bahas adalah decompilernya. Ada banyak tool decompiler di dunia ini, tapi selain IDA Pro, hasilnya banyak yang kacau dan sangat menyesatkan. Hasil dekompilasi Ghidra ini sangat bagus, dan dibandingkan IDA Pro: dia mendukung dekompilasi semua arsitektur yang disupport (IDA hanya mendukung: X86 32/64 bit, ARM 32/64 bit, PowerPC 32/64 bit). Contohnya jika kita ingin melakukan reverse engineering router (banyak yang memakai MIPS) maka dekompilasi bisa dilakukan.
Untuk arsitektur 8 bit yang saya coba, dekompilasi bisa dilakukan, tapi sering kali tetap sulit dibaca manusia. Jadi dengan adanya decompiler ini tidak berarti seorang pemula tiba-tiba akan bisa melakukan RE apa saja.
Challenge Flare On kadang memberikan soal DOS (X86) 16 bit. IDA Pro tidak mendukung dekompilasi kode 16 bit, tapi Ghidra bisa melakukannya. Sayangnya tool ini tidak memahami parameter untuk interrupt. Untungnya decompilernya memiliki kelebihan lain: jika kita mengklik pada sebuah instruksi, maka instruksi yang bersangkutan akan dihighlight di bagian disassembly, jadi kita bisa melihat secara manual parameter untuk sebuah interrupt.
Ghidra ini mendukung sistem plugin, jadi menambahkan support processor baru dapat dilakukan dengan relatif mudah, setidaknya itu kesan pertama ketika membaca dokumentasinya. IDA Pro juga memiliki SDK, tapi SDK-nya sangat ribet. Di masa depan sepertinya akan ada semakin banyak prosessor baru yang didukung.
Salah satu kelemahan besar IDA Pro adalah tidak adanya kemampuan Undo/Redo. Artinya jika kita salah menekan “U” (undefine) di satu blok kode yang sudah kita beri komentar atau kita ubah tipe datanya, tiba-tiba kita bisa kehilangan semuanya. Menekan “C” lagi bisa mengembalikan data menjadi kode, tapi semua perubahan lain sudah hilang. Dalam kasus tertentu bahkan ini membuat semua jadi error. Jadi biasanya flow kerja memakai ida pro adalah: jika kita sudah puas dengan sesuatu kita harus save, dan jika membuat kesalahan: load ulang. Ghidra mendukung Undo/Redo, jadi tidak ada masalah ini.
Membahas mengenai shortcut “U” dan “C” di atas mengingatkan saya pada masalah shortcut: berbagai shortcut Ghidra berbeda dengan IDA Pro. IDA Pro karena muncul pertama kali, maka shortcutnya ditiru berbagai tool lain. Tapi Ghidra ini memakai shortcut yang berbeda yang membuat saya harus berpikir keras. Contoh yang mengganggu: di IDA Pro “C” adalah untuk mengubah menjadi kode dan “D” untuk mengubah menjadi data. Di Ghidra “D” dipakai untuk melakukan disassembly (mengubah menjadi kode) dan “C” dipakai untuk Clear Code bytes (mengubah menjadi undefined).
Contoh kecil lain: X untuk cross reference di berbagai tool menjadi Control-Shift-F. Sebenarnya ini semua bisa diubah (ada opsinya) tapi defaultnya terasa membingungkan.
Ada fitur yang akan berguna untuk team: shared project. Ini sesuatu yang tidak bisa dilakukan oleh IDA Pro ataupun tools disassembler/decompiler lain. Karena saya tidak pernah mengerjakan reverse engineering bersama orang lain, maka saya tidak mencoba fitur ini.
Dalam mode debug, ada sedikit kecerobohan dalam skrip startup yang mensetup JDWP (Java Debug Wire Protocol) sehingga listen ke * (semua interface) dan bukan ke 127.0.0.1. Dengan ini orang yang berada di jaringan yang sama bisa mengeksekusi kode di mesin kita melalui port itu. Ini mudah diperbaiki, hanya perlu edit skrip launchernya saja. Sebagian orang menyebut ini backdoor, tapi menurut saya ini sekedar kecerobohan karena lupa untuk setup debugging (gunanya JDWP adalah untuk mendebug program Java). Perhatikan sekali lagi: ini hanya akan terbuka dalam mode debug, defaultnya mode ini tidak aktif, kita harus secara manual menjalankan dari command line dengan parameter tertentu untuk masuk mode debug ini.
Meskipun Dalvik tercantum dalam daftar prosessor, tapi saya tidak berhasil meload classes.dex dari file APK (walaupun saya malah bisa membuka berbagai library native yang ada di dalam APK). File JAR bisa dibuka, tpai tool ini tidak lebih baik dari decompiler khusus untuk Java. Jadi secara umum: untuk tujuan khusus, Ghidra ini masih kurang bagus dibandingkan tool lain.
Demikian review singkat tool Ghidra ini. Saya berencana akan lebih banyak lagi memakai tool ini untuk menggantikan berbagai tool yang saya pakai saat ini. Saya berharap source code lengkap Ghidra segera dirilis sehingga akan ada banyak kontribusi dari banyak pihak agar Ghidra lebih nyaman dipakai dan mendukung lebih banyak arsitektur.