Reverse engineering (RE) adalah proses membongkar sesuatu agar kita 
bisa mengetahui cara kerjanya. Dalam konteks ini, saya akan membahas 
membongkar software, tepatnya lagi aplikasi untuk Android.
Reverse engineering bisa dilakukan di komputer ataupun langsung di ponsel. Saya menyarankan untuk melakukan di komputer langsung, karena tool yang tersedia lebih baik, dan prosesnya bisa lebih cepat. Saya punya beberapa aplikasi reversing di ponsel, tapi tujuannya hanya untuk melakukan pemeriksaan singkat.
Untuk memahami kumpulan tulisan ini, saya sangat menyarankan Anda untuk mencoba membuat satu aplikasi Android, minimal hello world dan menjalankannya di device Anda. Tujuan membuat dan menjalankan hello world dalam kasus ini adalah:
Kadang para pentester hanya melakukan testing dasar untuk mencari bug security tanpa membongkar APKnya, biasanya testing yang dilakukan hanya:
Anda juga bisa menginstall tool security proxy di PC Anda seperti ZAP (opensource, gratis) atau yang lain, misalnya Burp Suite (komersial, ada versi gratisnya), Fiddler (closed source, gratis). Setelah itu Anda bisa mengkonfigurasi Android untuk menggunakan proxy tersebut. Dengan ini Anda bisa melihat traffic aplikasi (tapi terbatas)
File source code
File resource dikompilasi menjadi
File manifest berisi informasi mengenai pake APK: apa nama packagenya, permission apa yang dibutuhkan, dsb.
File APK sebenarnya adalah sebuah file ZIP (bisa dibuka dengan
Berikutnya kita bisa mengubah APK menjadi jar, atau kita bisa mengekstrak APK menjadi file
Perlu dicatat bahwa bagian tersulit adalah: membaca source code. Kadang source code sudah di obfuscate sehingga nama-namanya menjadi tidak jelas. Andaikan namanya jelas pun, tidak selalu mudah membaca source code. Coba saja Anda cari beberapa source code aplikasi Android di github, dan coba pahami isinya. Membaca source code yang lengkap dengan dokumentasi dan komentar saja cukup sulit, membaca source code hasil dekompilasi lebih sulit lagi.
Kadang pembacaan file secara statik cukup sulit. Jika kita punya source code sebuah aplikasi, kita bisa menggunakan debugger, atau menambahkan instruksi logging (misalnya dengan
Reverse engineering bisa dilakukan di komputer ataupun langsung di ponsel. Saya menyarankan untuk melakukan di komputer langsung, karena tool yang tersedia lebih baik, dan prosesnya bisa lebih cepat. Saya punya beberapa aplikasi reversing di ponsel, tapi tujuannya hanya untuk melakukan pemeriksaan singkat.
Untuk memahami kumpulan tulisan ini, saya sangat menyarankan Anda untuk mencoba membuat satu aplikasi Android, minimal hello world dan menjalankannya di device Anda. Tujuan membuat dan menjalankan hello world dalam kasus ini adalah:
- Agar Anda mendownload tools-tools dasar yang dibutuhkan (
adb,aapt,dxyang ada di Android SDK) - Agar Anda mengenal dasar aplikasi Android
 - Agar Anda menginstall driver yang dibutuhkan untuk ponsel Anda
 - Agar Anda mengaktifkan developer mode di ponsel Anda
 
Tujuan Reverse Engineering
Ada banyak tujuan reverse engineering:- Untuk mengetahui protokol sebuah program (contoh: ingin membuat client instagram command line)
 - Untuk mengetahui API yang dipakai sebuah program (contoh: ingin tahu bagaimana menyalakan kamera flash sebagai senter)
 - Untuk mencari bug security sebuah program
 - Untuk mencari tahu apakah sebuah program melanggar hak cipta (contoh: kita curiga sebuah program memakai library komersial yang kita buat, tanpa membayar lisensi)
 - Untuk tujuan forensik (contoh: kita ingin tahu format data yang dipakai oleh sebuah program)
 
Kadang para pentester hanya melakukan testing dasar untuk mencari bug security tanpa membongkar APKnya, biasanya testing yang dilakukan hanya:
- Intercept HTTP/HTTPS dengan Fiddler, Burp Suite atau ZAP
 - Melihat log adb
 
- Aplikasi melakukan certificate pinning, sehingga kita tidak bisa menggunakan root certificate kita sendiri
 - Aplikasi memakai protokol binary yang tidak standar (misalnya memakai socket SSL dengan data dalam format binary)
 - Aplikasi melakukan signing terhadap URL atau data (dalam kasus ini hanya bisa melihat data, tapi tidak bisa testing mengubah-ubah data/fuzzing)
 
adb logcat
 di PC Anda (Anda mungkin perlu menginstall driver jika menggunakan 
Windows, atau perlu mengedit file tertentu di Linux). Kadang ada 
informasi penting, kadang tidak ada. Beberapa ponsel mengijinkan adb backup,
 yang memungkinkan kita mengekstrak data privat aplikasi ke PC. Di sini 
Anda bisa melihat apakah ada data penting yang disimpan oleh aplikasi. 
Alternatif lain adalah menggunakan ponsel yang sudah di root untuk mengakses data yang ada di aplikasi.Anda juga bisa menginstall tool security proxy di PC Anda seperti ZAP (opensource, gratis) atau yang lain, misalnya Burp Suite (komersial, ada versi gratisnya), Fiddler (closed source, gratis). Setelah itu Anda bisa mengkonfigurasi Android untuk menggunakan proxy tersebut. Dengan ini Anda bisa melihat traffic aplikasi (tapi terbatas)
Mengenal file APK
Sebelumnya melakukan reverse engineering, sebaiknya Anda perlu tahu dulu proses pembuatan aplikasi Android dari file java plus resource menjadi APK. Penyusun aplikasi Android standar adalah: file source code dalam bahasa java, file resource (bisa gambar, suara, string, dsb), file asset, dan file manifest yang mendeskripsikan aplikasi apk. Sebagian besar aplikasi Android juga menggunakan native library dalam bahasa mesin, dan sebagian aplikasi (terutama game) hanya terdiri dari native code saja, tanpa file.java. Saya tidak akan membahas mengenai reverse engineering native code, karena rumit dan sebenarnya itu tidak spesifik Android.File source code
.java akan dicompile menjadi .class, dan kemudian dikonversi menjadi file .dex. File dex ini memakai bytecode khusus (bukan bytecode standar java). Kita bisa menggunakan tool baksmali untuk mendisassemble file dex.File resource dikompilasi menjadi
resources.rsrc. File 
resource Android dibagi dalam berbagai folder (sesuai bahasa, ukuran 
layar) dan secara otomatis Android menggunakan file yang sesuai dengan 
bahasa, ukuran layar, dsb. File asset akan disimpan apa adanya.File manifest berisi informasi mengenai pake APK: apa nama packagenya, permission apa yang dibutuhkan, dsb.
File APK sebenarnya adalah sebuah file ZIP (bisa dibuka dengan
unzip atau 7-zip). Semua file .dex, android.arsrc, AndroidManifest.xml,
 dan asset akan disimpan dalam file APK, dan terakhir file APK 
ditandatangai secara digital (dalam file zip ini berada dalam folder META-INF).Membongkar APK
Langkah pertama reversing adalah mendapatkan file APK. Untuk tujuan pentesting, biasanya APK sudah diberikan, jadi tidak perlu repot mencari dan mengekstrak file dari play store. Setelah mendapatkan APK, kita bisa menginstall dan menjalankan APK tersebut. Tentunya ini jika kita tahu bahwa APK tersebut aman (contohnya jika ingin reversing Instagram, kita yakin itu aman). Jika ingin reverse engineering malware, gunakan emulator atau HP baru yang bersih dari data penting (dan jangan isi SIM card utama Anda).Berikutnya kita bisa mengubah APK menjadi jar, atau kita bisa mengekstrak APK menjadi file
smali. File jar yang kita dapat bisa didecompile
 menggunakan berbagai decompiler Java. Hasil decompiler adalah source 
code yang cukup mirip aslinya. Nama variabel lokal akan hilang, dan 
semua komentar yang ada di source code asli juga tidak ada. Ada juga 
tool seperti JADX yang bisa langsung melakukan dekompilasi dari file APK/DEX.Perlu dicatat bahwa bagian tersulit adalah: membaca source code. Kadang source code sudah di obfuscate sehingga nama-namanya menjadi tidak jelas. Andaikan namanya jelas pun, tidak selalu mudah membaca source code. Coba saja Anda cari beberapa source code aplikasi Android di github, dan coba pahami isinya. Membaca source code yang lengkap dengan dokumentasi dan komentar saja cukup sulit, membaca source code hasil dekompilasi lebih sulit lagi.
Kadang pembacaan file secara statik cukup sulit. Jika kita punya source code sebuah aplikasi, kita bisa menggunakan debugger, atau menambahkan instruksi logging (misalnya dengan
Log.d). Mendebug APK tanpa source code agak rumit, menurut saya lebih mudah mengedit dan mengcompile ulang file smali. File smali bisa diedit dan diassemble lagi untuk membuat APK baru. Modifikasi yang biasa dilakukan:- aktivasi logging (beberapa aplikasi bisa diaktifkan loggingnya dengan mengubah variabel tertentu dari 
falsemenjaditrueatau sebaliknya) - menambahkan logging
 - melakukan bypass pemeriksaan 
rooting(beberapa aplikasi tidak jalan jika HP kita di-root) - melakukan bypass SSL pinning
 
APK Non standar
Seperti yang telah dibahas sekilas di atas, ada beberapa APK yang tidak dibuat dengan menggunakan Java. Beberapa contoh APK tidak standar:- APK yang dihasilkan oleh Apache Cordova. Walaupun kode dasarnya menggunakan Java, tapi kode utama ada di file JS/HTML.
 - APK yang dihasilkan oleh Adobe Air.
 - APK yang dihasilkan oleh mono android.
 - APK yang dihasilkan oleh Rhomobile, kode utamanya menggunakan Ruby yang telah dicompile menjadi bytecode.