logo
hero image

Android Reverse Engineering

Tutorial membongkar dan memodifikasi aplikasi Android ๐Ÿค–
15 March 2025 ยท 9 Minutes

Sebagai seorang Developer, kita pasti tidak ingin aplikasi yang kita buat dimodifikasi oleh orang lain (Attacker) dengan tujuan tidak baik yang bisa merugikan kita maupun pengguna dari aplikasi kita, seperti pembajakan lisensi, mendapatkan API Key, menambahkan keylogger untuk mendapatkan kredensial pengguna, dll.

Oleh karena itu, kita di sini akan belajar bagaimana Attacker bisa membongkar dan memodifikasi sebuah aplikasi Android. Karena dengan mengetahui hal tersebut, kita menjadi tahu bagaimana cara mencegah hal tersebut agar tidak terjadi.

Artikel ini ditulis hanya untuk tujuan edukasi, saya tidak bertanggung jawab atas tindakan apapun yang dilakukan atas informasi yang saya sampaikan.

Apa itu Reverse Engineering?

Secara umum, Reverse Engineering (RE) merupakan teknik dalam penetration testing untuk mengetahui alur jalannya program atau sistem tanpa mempunyai source code / dokumentasinya.

Dalam konteks aplikasi Mobile khususnya Android, kita bisa melakukan Reverse Engineering sebuah aplikasi dengan membongkar dan menganalisa file APK (Android Package Kit).

Reverse Engineering ini seperti membongkar resep dari sebuah masakan, kita akan bisa mengetahui apa saja bahan yang diperlukan, bagimana cara memasaknya, dll. Tentu tidak akan 100% akurat karena ada faktor-faktor tertentu yang mungkin tidak dapat terungkap sepenuhnya, Namun, dengan analisa yang mendalam, Reverse Engineering bisa sangat berguna untuk memahami bagaimana cara kerja suatu aplikasi.

Tujuan RE

Sebenarnya tujuan Reverse Engineering itu bukan sekedar mendapatkan source code hasil dekompilasi dari sebuah aplikasi, yang lebih penting adalah setelah kita mendapatkan source code tersebut, apa yang akan kita lakukan.

Berikut adalah beberapa tujuan mengapa orang melakukan RE:

  1. Penetration Testing - Jika kita mempunyai sebuah aplikasi dan kita ingin mengujinya dari sisi keamanan, kita bisa melakukan Reverse Engineering untuk mencari tahu apakah ada Key yang bocor, apakah jika aplikasi kita dimodifikasi masih bisa berjalan, dll.

  2. Bypass Penjagaan Security - Biasanya sebuah aplikasi ada proteksi pendeteksian Root, SSL Pinning, dll. Nah, kita bisa melakukan RE untuk bypass segala proteksi tersebut.

  3. Membajak Lisensi - Jika ada aplikasi yang berbayar, kita bisa melakukan bypass pengecekan lisensi dengan RE, sehingga kita dapat menggunakan aplikasi tersebut secara gratis.

  4. Injeksi Malware - Dalam aplikasi modifikasi yang mungkin terlihat baik misalnya menghilangkan iklan, Attacker juga bisa menyisipkan malware untuk mencuri data login, data pribadi pengguna, dll.

Requirements

Untuk mengikuti tutorial ini, berikut adalah beberapa device dan software yang perlu kita siapkan:

File APK

Jika di iOS kita menggunakan file IPA untuk menginstall sebuah aplikasi, di Android kita dapat menginstall sebuah aplikasi menggunakan file APK (Android Package Kit).

File APK sebenarnya hanyalah file ZIP yang berisi file-file yang digunakan untuk menjalankan sebuah aplikasi, berikut adalah isi dari sebuah file APK:

File APKFile APK

Jika kita ekstrak, mungkin terlihat ada banyak sekali file, tapi tenang saja, tidak semua file perlu kita analisa dalam melakukan RE, berikut adalah beberapa file yang penting untuk dilakukan analisa:

  • classes.dex (Dalvik Executable): Berisi Bytecode dari Kotlin / Java yang sudah dikompilasi, nantinya kita bisa lakukan dekompilasi menjadi source code Java agar bisa dibaca oleh manusia.

  • Android.manifest: Berisi konfigurasi & metadata aplikasi, seperti permission, Activity, dll.

  • lib/*.so: Berisi kode binary native yang ditulis menggunakan C/C++/Rust.

  • Resources Files: Pada aplikasi yang tidak aman, mungkin kita bisa mendapatkan konfigurasi atau Key yang dihardcode di dalam file resources.

Workflow RE

Berikut adalah langkah-langkah untuk melakukan Reverse Engineering aplikasi Android menggunakan Static Analysis yang akan kita bahas satu-persatu.

  • Static Analysis: Menganalisis kode atau aplikasi tanpa menjalankannya.

  • Dynamic Analysis: Menganalisis aplikasi ketika sedang dijalankan (runtime).

Workflow REWorkflow RE

1. Mendapatkan APK

Google Play Store

Untuk mendapatkan file APK, cara pertama kita bisa download saja melalui Google Play Store, setelah itu kita bisa export APK yang sudah terinstall menggunakan aplikasi seperti ES File Explorer.

Atau kita juga bisa pull APK yang sudah terinstall langsung ke komputer kita menggunakan ADB (Android Debug Bridge). Berikut adalah command-nya:

1adb shell pm list packages | grep "gpt"
2adb pull /data/app/VCISw==/com.openai.chatgpt/base.apk ChatGPT.apk

ApkPure

Cara yang kedua, kita dapat mendapatkan file APK melalui website ApkPure di sini

Kelebihan cara ini adalah kita bisa mendapatkan file APK tanpa perlu menginstallnya terlebih dahulu dan bisa memilih versi yang kita inginkan.


Untuk studi kasus pada artikel ini, kita akan melakukan Reverse Engineering untuk bypass pengecekan Serial Number agar aplikasinya menjadi PRO Version tanpa perlu membeli lisensinya. โ˜ ๏ธ

Silakan download file APK-nya melalui Github di sini: https://github.com/alfinsyahruddin/crackme-android

CrackMeAndroidCrackMeAndroid

2. Unpack APK

Setelah kita mendapatkan file APK, kita bisa Unpack APK-nya menggunakan ApkTool.

Proses Unpack ini akan mengubah file DEX menjadi kode smali yang bisa kita edit nantinya untuk melakukan Patching aplikasi.

Silakan jalankan commmand berikut:

1apktool d CrackMeAndroid.apk -o CrackMeAndroid

Unpack APKUnpack APK

3. Decompile

Sekarang, kita akan melakukan dekompilasi file DEX yang terdapat pada file APK CrackMeAndroid menggunakan aplikasi JADX.

Dekompilasi adalah proses untuk mengubah file DEX menjadi source code Java yang high-level, sehingga mudah untuk dibaca oleh manusia. Meskipun tidak bisa 100% mirip dengan source code aslinya, tapi ini dapat membantu kita dalam memahami bagaimana alur kerja sebuah program.

  1. Silakan buka aplikasi JADX

  2. Drag & Drop file APK yang ingin kita dekompilasi

4. Analisa

Setelah proses unpack dan dekompilasi selesai dilakukan, sekarang kita sudah bisa melakukan analisa terhadap sebuah aplikasi, proses ini adalah yang paling sulit, mungkin bisa menghabiskan waktu sampai beberapa menit atau bahkan beberapa hari, kita harus benar-benar teliti agar dapat menemukan celah yang ada pada suatu aplikasi.

Apa yang perlu di-analisa sebenarnya tergantung tujuan kita masing-masing, misalnya untuk mencari apakah ada API Key yang dihardcode di dalam source code, mencari bagian kode pengecekan Root & SSL Pinning untuk di-bypass, dll.

Untuk studi kasus kali ini, tujuan kita adalah untuk mencari bagian kode untuk bypass pengecekan Serial Number, sehingga kita bisa memasukkan Serial Number apa saja akan tetap dianggap valid.

  1. Pertama, silakan ke menu Navigation -> Class Search, kemudian search dengan keyword "Verify" untuk mencari class yang berhubungan dengan verifikasi serial number.

JADX - FilterJADX - Filter

  1. Di sini, kita menemukan class bernama VerifySerialNumberActivity, kemudian kita klik, maka akan diarahkan ke kode java hasil dekompilasi terkait function tersebut.

    Lalu, di bagian kode dekompilasinya, terdapat ViewOnClickListenerC0075a yang dipanggil, karena di page tersebut hanya ada 1 button, maka kita bisa simpulkan bahwa event on-click tersebut lah yang berfungsi untuk melakukan pengecekan serial number.

JADXJADX

  1. Di dalam class ViewOnClickListenerC0075a, kita melihat method m692a yang digunakan untuk membandingkan 2 variabel, bisa jadi inilah bagian kode untuk pengecekannya! ๐Ÿ‘€

    Jadi, idenya adalah kita akan melakukan patching kondisi perbandingan 2 variabel ini agar hasilnya selalu true.

JADXJADX

  1. Untuk melihat kode smali yang berhubungan dengan logic tersebut, kita bisa centang "Split View" yang ada di bagian bawah, kemudian pilih tab "Smali"

JADX - SmaliJADX - Smali

5. Patching

Setelah kita tahu apa yang mau dipatch, kita bisa buka folder hasil Unpack oleh ApkTool tadi menggunakan Text Editor karena kita tidak bisa mengedit file secara langsung di JADX.

Untuk melakukan patching, kita hanya bisa mengedit kode smali-nya, hasil dekompilasi Java yang ada di JADX hanyalah preview saja untuk membantu kita dalam membaca alur sebuah program.

ApkTool - BeforeApkTool - Before

Di bagian kode smali, kita melihat instruksi if-eqz (Equal to Zero) yang digunakan untuk melakukan mengecek register v0, jika hasilnya 0 (false), maka instruksi selanjutnya tidak akan dieksekusi dan akan berpindah ke block :cond-1. dan kalau kita cek isi dari :cond-1 adalah untuk menampilkan alert "Invalid Serial Number". Sehingga kita perlu set agar register v0 selalu 1 (true).

Dalam konteks kode Smali / Assembly, register adalah tempat untuk menyimpan nilai seperti angka, objek, atau tipe data lainnya. register biasanya diberi nama seperti v0, v1, v2, dan seterusnya.

Jadi, silakan tambahkan code berikut di sebelum instruksi if-eqz untuk menimpa isi dari register v0 menjadi 1 (true):

ApkTool - AfterApkTool - After

Setelah itu, simpan filenya.

6. Repacking APK

1. Repacking

Untuk me-repack APK, jalankan command berikut di Terminal:

1apktool b CrackMeAndroid -o modified.apk

2. Re-Signing

Agar aplikasi yang telah kita modifikasi dapat diinstall di Android, kita perlu melakukan Signing ulang.

Tool yang akan kita pakai adalah "uber-apk-signer", silakan download dulu di sini: https://github.com/patrickfav/uber-apk-signer

Jika sudah, jalankan command berikut:

1java -jar signer.jar --apk modified.apk

Command di atas akan menghasilkan file APK baru yang telah di-signing ulang bernama "modified-aligned-debugSigned.apk"

3. Install

Terakhir, kita tinggal install APK yang telah kita modifikasi ke HP Android menggunakan command berikut:

1adb install -r modified-aligned-debugSigned.apk

Sekarang, ketika kita memasukkan Serial Number random pun akan dianggap valid dan aplikasi kita menjadi PRO Version ๐ŸŽ‰

CrackMeAndroid - PatchedCrackMeAndroid - Patched

Proteksi Aplikasi

Proteksi aplikasi Android agar tidak bisa di-reverse engineer sepenuhnya tidak mungkin dilakukan, karena teknik Reverse Engineering terus berkembang. Namun, ada beberapa cara yang dapat meningkatkan kesulitan bagi siapa saja yang mencoba melakukan RE aplikasi Android kita.

1. Obfuscation

Obfuscation adalah proses menyamarkan kode sumber aplikasi agar sulit dipahami oleh orang lain. Misalnya, nama variabel, fungsi, dan kelas bisa diubah menjadi nama yang tidak bermakna dan acak.

Tools: Licel DexProtector, ProGuard

2. App Integrity Checks

Kita bisa melakukan integrity check dalam aplikasi pada saat runtime untuk mendeteksi jika ada modifikasi pada binary aplikasi, misalnya dengan memeriksa checksum dari binary atau file tertentu, atau bisa juga menggunakan Play Integrity API.

Tools: Play Integrity, Firebase AppCheck

3. Anti Dynamic Instrumentation

Jika aplikasi kita di-reverse engineer menggunakan Dynamic Analysis seperti Frida, Objection atau Debugger, kita bisa tambahkan pengecekan juga agar aplikasi kita tidak bisa dimodifikasi behaviornya pada saat runtime. Misalnya kita cek apakah ada process frida-server yang berjalan, mendeteksi apakah ada debugger yang berjalan menggunakan library AntiDebugandMemoryDump, dll.

Tools: DetectFrida, AntiDebugandMemoryDump

What's Next?

Setelah kita tahu bagaimana cara membongkar dan memodifikasi aplikasi Android, serta bagaimana cara proteksinya agar hal tersebut sulit dilakukan, mungkin selanjutnya kamu bisa membaca lebih detail mengenai best practice penerapan keamanan pada aplikasi Mobile dari OWASP (Open Web Application Security Project), khususnya MASVS (Mobile Application Security Verification Standard) dan MASTG (Mobile Application Security Testing Guide). Kedua pedoman ini memberikan panduan yang sangat berguna untuk memastikan aplikasi Mobile kita aman dari berbagai serangan.


Oke mungkin itu saja yang bisa saya bagikan kali ini, kalau kamu merasa artikel ini bermanfaat silakan Like & Share artikel ini ke teman-teman kamu atau jika kamu punya pertanyaan, tulis aja di kolom komentar, Thank you! ๐Ÿ˜ ๐Ÿ™

Android Development
Security
Reverse Engineering

Written by :
Alfin Syahruddin
Developer ยท Stock Trader ยท Libertarian ยท Freethinker

Always open to new ideas. ๐Ÿ•Š๏ธ

Loading...

Related articles

Articles that you might want to read.

hero image
iOS Reverse Engineering

Tutorial membongkar dan memodifikasi aplikasi iOS ๐ŸŽ

15 March 2025 ยท 10 Minutes
iOS Development
Security
Reverse Engineering
hero image
CI/CD aplikasi iOS dengan Fastlane dan Github Actions

Otomatisasi build, testing, screenshot, dan deployment aplikasi iOS ke Testflight & AppStore.

24 September 2023 ยท 9 Minutes
iOS Development
CI/CD
Fastlane
Github Actions
hero image
DocC Tutorial

Dokumentasikan project-mu dengan DocC!

19 March 2023 ยท 8 Minutes
iOS Development
Swift
DocC
CI/CD
All rights reserved ยฉ Alfin Syahruddin ยท 2019
RSS Feed