Skip to HeaderSkip to PostSkip to Footer

Cara Membongkar Atau Reverse Engineering Apk Android

Table of Content

    Reverse engineering (RE) ialah proses membongkar sesuatu supaya kita sanggup mengetahui cara kerjanya. Dalam konteks ini, saya akan membahas membongkar software, tepatnya lagi aplikasi untuk Android.
    Reverse engineering sanggup dilakukan di komputer ataupun pribadi di ponsel. Saya menyarankan untuk melaksanakan di komputer langsung, alasannya ialah tool yang tersedia lebih baik, dan prosesnya sanggup lebih cepat. Saya punya beberapa aplikasi reversing di ponsel, tapi tujuannya hanya untuk melaksanakan investigasi singkat.
    Untuk memahami kumpulan goresan pena ini, saya sangat menyarankan Anda untuk mencoba menciptakan satu aplikasi Android, minimal hello world dan menjalankannya di device Anda. Tujuan menciptakan dan menjalankan hello world dalam kasus ini adalah:
    • Agar Anda mendownload tools-tools dasar yang diharapkan (adbaaptdx yang ada di Android SDK)
    • Agar Anda mengenal dasar aplikasi Android
    • Agar Anda menginstall driver yang diharapkan untuk ponsel Anda
    • Agar Anda mengaktifkan developer mode di ponsel Anda
    Catatan: Saya tidak akan menjelaskan langkah demi langkah cara instalasi setiap kegiatan yang ada di sini (misalnya: ZAP, dex2jar, apktool, dsb), silakan Anda cek tiap link yang saya berikan untuk mengetahui cara installasinya. Saya juga tidak akan menjelaskan semua opsi, hanya penggunaan dasarnya saja.

    Tujuan Reverse Engineering

    Ada banyak tujuan reverse engineering:
    • Untuk mengetahui protokol sebuah kegiatan (contoh: ingin menciptakan client instagram command line)
    • Untuk mengetahui API yang digunakan sebuah kegiatan (contoh: ingin tahu bagaimana menyalakan kamera flash sebagai senter)
    • Untuk mencari bug security sebuah program
    • Untuk mencari tahu apakah sebuah kegiatan melanggar hak cipta (contoh: kita curiga sebuah kegiatan menggunakan library komersial yang kita buat, tanpa membayar lisensi)
    • Untuk tujuan forensik (contoh: kita ingin tahu format data yang digunakan oleh sebuah program)
    Fokus goresan pena di situs ini ialah reverse engineering untuk mencari bug security.
    Kadang para pentester hanya melaksanakan 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
    Testing ini hanya mengcover sebagian kecil bug aplikasi. Contoh di mana testing menyerupai ini sanggup gagal:
    • Aplikasi melaksanakan certificate pinning, sehingga kita tidak sanggup menggunakan root certificate kita sendiri
    • Aplikasi menggunakan protokol binary yang tidak standar (misalnya menggunakan socket SSL dengan data dalam format binary)
    • Aplikasi melaksanakan signing terhadap URL atau data (dalam kasus ini hanya sanggup melihat data, tapi tidak sanggup testing mengubah-ubah data/fuzzing)
    Jika ingin pribadi melaksanakan investigasi dinamis tanpa membongkar APK, langkahnya cukup mudah. Untuk membaca log, pertama aktifkan developer mode di ponsel Anda, kemudian lihat output yang mungkin dihasilkan app dengan adb logcat di PC Anda (Anda mungkin perlu menginstall driver jikalau menggunakan Windows, atau perlu mengedit file tertentu di Linux). Kadang ada isu penting, kadang tidak ada. Beberapa ponsel mengijinkan adb backup, yang memungkinkan kita mengekstrak data privat aplikasi ke PC. Di sini Anda sanggup melihat apakah ada data penting yang disimpan oleh aplikasi. Alternatif lain ialah menggunakan ponsel yang sudah di root untuk mengakses data yang ada di aplikasi.
    Anda juga sanggup 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 sanggup 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, alasannya ialah rumit dan bahwasanya itu tidak spesifik Android.
    File source code .java akan dicompile menjadi .class, dan kemudian dikonversi menjadi file .dex. File dex ini menggunakan bytecode khusus (bukan bytecode standar java). Kita sanggup menggunakan tool baksmali untuk mendisassemble file dex.
    File resource dikompilasi menjadi resources.rsrc. File resource Android dibagi dalam banyak sekali 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 isu mengenai pake APK: apa nama packagenya, permission apa yang dibutuhkan, dsb.
    File APK bahwasanya ialah sebuah file ZIP (bisa dibuka dengan unzip atau 7-zip). Semua file .dexandroid.arsrcAndroidManifest.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 mendapat APK, kita sanggup menginstall dan menjalankan APK tersebut. Tentunya ini jikalau kita tahu bahwa APK tersebut kondusif (contohnya jikalau ingin reversing Instagram, kita yakin itu aman). Jika ingin reverse engineering malware, gunakan emulator atau HP gres yang higienis dari data penting (dan jangan isi SIM card utama Anda).
    Berikutnya kita bisa mengubah APK menjadi jar, atau kita sanggup mengekstrak APK menjadi file smali. File jar yang kita sanggup bisa didecompile menggunakan banyak sekali decompiler Java. Hasil decompiler ialah source code yang cukup menyerupai aslinya. Nama variabel lokal akan hilang, dan semua komentar yang ada di source code orisinil juga tidak ada. Ada juga tool sepertiJADX yang sanggup pribadi melaksanakan dekompilasi dari file APK/DEX.
    Perlu dicatat bahwa bab tersulit adalah: membaca source code. Kadang source code sudah di obfuscate sehingga nama-namanya menjadi tidak jelas. Andaikan namanya terang pun, tidak selalu gampang 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 sanggup menggunakan debugger, atau menambahkan kode logging (misalnya denganLog.d). Mendebug APK tanpa source code agak rumit, berdasarkan saya lebih gampang mengedit dan mengcompile ulang file smali. File smali sanggup diedit dan diassemble lagi untuk menciptakan APK baru. Modifikasi yang biasa dilakukan:
    • aktivasi logging (beberapa aplikasi sanggup diaktifkan loggingnya dengan mengubah variabel tertentu dari false menjadi true atau sebaliknya)
    • menambahkan logging
    • melakukan bypass pemeriksaan rooting (beberapa aplikasi tidak jalan jikalau HP kita di-root)
    • melakukan bypass SSL pinning
    Alternatif lain, kita juga sanggup menggunakan XPosed Framework untuk melaksanakan intersepsi API tanpa mengubah APK. Kita juga sanggup menggunakan frida untuk melaksanakan tracing native code. Awalnya saya suka melaksanakan dua pendekatan ini, tapi alasannya ialah sering pindah HP, dan perlu menginstall kedua aplikasi tersebut (yang kadang bermasalah di HP tertentu), jadinya saya lebih suka mengubah APK langsung.

    APK Non standar

    Seperti yang telah dibahas sekilas di atas, ada beberapa APK yang tidak dibentuk dengan menggunakan Java. Beberapa teladan 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.
    APK yang tidak standar butuh penanganan khusus. Untuk dikala ini, APK menyerupai itu di luar scope goresan pena ini.

    Comments

    Post a Comment

    This is a comment message for you.