Cara Reverse Engineering APK

dw1
4 min readNov 4, 2018

--

(Flow Dalvik Virtual Machine. Sumber: www.javatpoint.com)

Semua aplikasi Android yang terinstall adalah APK (Android Package). Format file paket ini digunakan oleh sistem operasi Android untuk distribusi dan pemasangan aplikasi smartphones, dan ini berisi semua sumber daya aplikasi, aset, sertifikat, dan sebagainya, termasuk source code aplikasi.

Catatan: jika pratinjau gambar kurang jelas, klik gambar untuk melihat dengan resolusi utuh.

Dalam postingan ini, saya gunakan aplikasi BCA mobile sebagai percobaan reverse engineering yang sudah terinstall di smartphone saya. Saya menggunakan tool Android Debug Bridge (adb), dengan perintah adb shell pm list packages kita dapat melihat semua aplikasi yang terinstall pada smartphone kita, lalu saya memindahkan file APK BCA mobile dari Android ke laptop dengan perintah adb pull [file].

Setelah itu, mari kita ekstrak file APK tersebut dengan unzip [file].

File Dex?

Dex adalah Dalvik Executable, dan file tersebut adalah bentuk kompilasi dari Java Virtual Machine-compatible yang berisi seluruh kelas-kelas Java yang terdiri dari Dalvik bytecode. Dalvik bytecode dijalankan oleh Dalvik Virtual Machine, seperti Java Virtual Machine (JVM), tetapi dioptimalkan untuk perangkat keras dan kebutuhan smartphones. Dalvik Virtual Machine-lah yang bertanggung jawab untuk menjalankan program pada sistem operasi Android.

Kita dapat dengan mudah mengekstrak file Dex dari APK (bahkan dengan WinRAR, karena APK adalah format file paket yang terextend dari ZIP), tetapi instruksi bytecode tidak human readable. Dengan Baksmali (disassembler) kita dapat mengubah file Dex kita menjadi file Smali yang ditulis dalam sintaks seperti awal (masih tingkat rendah, tetapi dapat dibaca dengan pasti). Disini saya menggunakan dex2jar.

Karena secara default file Dex dari APK bernama classes.dex. Disassembler file Dex ke Smali dengan perintah d2j-dex2smali [file].

Saya mulai mencari “sesuatu yang penting” secara rekursif dengan grep. Mengawali dengan grep adalah kebiasaan saya, ini berguna untuk mencari host dan/ titik endpoint, baris konfigurasi dan/ environment, secret key yang ditulis secara statis, dan lain-lain.

Setelah memiliki file Smali, kita dapat mengkonversikannya kembali ke file Java, tetapi dengan hanya sebagian keberhasilan. Beberapa alasannya mungkin termasuk penggunaan obfuscator oleh developer (alat yang dimaksudkan untuk membuat proses reverse engineering menjadi lebih sulit). Namun, saya akan mencoba membongkar apa yang saya bisa karena itu sangat memudahkan proses memahami apa yang dilakukan aplikasi.

Disassembler file Dex ke Jar (Java) dengan perintah d2j-dex2jar [file].

Untuk melihat kelas-kelas dari file Jar tersebut saya menggunakan aplikasi standalone Java Decompiler GUI.

Berikut pratinjau dari Java Decompiler GUI.

Kita juga dapat menyimpan source code kelas-kelas Java dari file Jar dengan jd-gui, File > Save All Sources (CTRL+Alt+S).

Saya coba mencari “sesuatu yang penting” lagi, tetapi di dalam sekumpulan kelas-kelas Java yang baru saja saya simpan dari jd-gui dan mengekstraknya.

Berikut hasil pemyimpanan kelas-kelas Java dari jd-gui yang baru saja saya ekstrak dan juga diimport ke Sublime Text.

etc

Oke, sebelum terlalu jauh, saya hentikan sampai sini dulu pembahasan kali ini (karena takut “berlebihan”). Mungkin nanti saya akan menuliskan bagian ke-2 atau seterusnya, bagaimana memodifikasi APK, bagaimana cara melacak aktivitas APK dari awal berjalannya aplikasi, dan lain sebagainya.

Perlu diingat, segala tindakan yang Anda implementasi dari tutorial ini bukan tanggung jawab dari penulis.

Referensi

Disalin dari https://noobsec.org/project/2018–11–04-cara-reverse-engineering-apk/.

--

--

dw1
dw1

Written by dw1

Love to build & break things.

Responses (2)