logo
hero image

iOS Reverse Engineering

Tutorial membongkar dan memodifikasi aplikasi iOS ๐ŸŽ
15 March 2025 ยท 10 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 iOS. 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 iOS, kita bisa melakukan Reverse Engineering sebuah aplikasi dengan membongkar dan menganalisa file IPA (iOS AppStore Package).

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 Jailbreak, 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 IPA

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

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

File IPAFile IPA

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:

  • File Binary (Mach-O): Berisi binary dari Swift / Objective-C yang sudah dikompilasi, nantinya kita bisa lakukan dekompilasi menjadi source code agar bisa dibaca oleh manusia.

  • Info.plist: Berisi konfigurasi & metadata aplikasi, seperti permission, Base URL API, AID NFC, dll.

  • Frameworks: Dapat kita analisis untuk memahami dependensi aplikasi dan mengidentifikasi potensi kerentanannya.

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

Workflow RE

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

  • Static Analysis: Menganalisis kode atau aplikasi tanpa menjalankannya.

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

Workflow REWorkflow RE

1. Mendapatkan IPA

AppStore

Untuk mendapatkan file IPA, cara pertama kita bisa download saja melalui AppStore, namun perlu diketahui bahwa setiap aplikasi yang diinstall dari AppStore akan dienkripsi oleh Apple (Melalui DRM Fair Play) dan hanya bisa diinstall oleh akun tertentu saja.

Jika kita ingin melakukan Reverse Engineering aplikasi yang diinstall di AppStore dan ingin agar hasil patchingnya bisa diinstall oleh orang lain, maka kita perlu men-decrypt file IPA nya, yang akan kita bahas lebih detail di step ke-2.

iOSGods

Cara yang kedua, kita dapat mendapatkan file IPA yang sudah ter-decrypt melalui website iOSGods di sini

Namun, website ini berbayar jika kita ingin mengakses fitur-fitur VIP seperti decrypt IPA tanpa limit, melihat histori versi, dll.

Github

Ada beberapa aplikasi yang didistribusikan di Github melalui file IPA, meskipun jumlahnya tidak sebanyak yang ada di AppStore.

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 IPA-nya melalui Github di sini: https://github.com/alfinsyahruddin/crackme-ios

CrackMeIOSCrackMeIOS

2. Decrypt IPA

Untuk men-decrypt file IPA dari aplikasi yang didownload dari AppStore, kita bisa menggunakan tool bernama "frida-ios-dump", sebenarnya bukan tool ini yang men-decrypt file IPA nya, tool ini hanya mengambil IPA yang sudah ter-decrypt di Memory pada saat aplikasinya sedang berjalan.

Untuk menggunakan tool ini, kita memerlukan iPhone yang sudah di-Jailbreak.

Berikut adalah langkah-langkahnya:

  1. Install Frida

  2. Jalankan command di Terminal: git clone https://github.com/AloneMonkey/frida-ios-dump

  3. Masuk ke folder "frida-ios-dump" dan jalankan lagi: sudo pip install -r requirements.txt --upgrade

  4. Jalankan iproxy 2222 22

  5. Terakhir, dump file IPA dari memory: python3 dump.py -u root -p root -o CrackMeIOS.ipa CrackMeIOS

Note: Silakan sesuaikan nama aplikasi dan kredensial untuk mengakses shell ke iPhone kita.

3. Unpack IPA

Setelah kita mendapatkan file IPA yang telah ter-decrypt, kita bisa unpack IPA-nya, karena file IPA sebenarnya adalah file ZIP biasa, jadi silakan rename saja extensionnya menjadi .zip kemudian klik 2x untuk mengekstrak filenya.

Unpack IPAUnpack IPA

4. Decompile

Sekarang, kita akan melakukan disassembly dan dekompilasi file binary yang terdapat pada file IPA CrackMeIOS menggunakan aplikasi Ghidra.

Disassembly adalah proses untuk mengubah file binary menjadi bahasa assembly, di iOS bahasa assembly-nya menggunakan arsitektur ARM64. Jika kamu ingin melakukan patching sebuah aplikasi iOS, pengetahuan tentang dasar bahasa assembly ARM akan sangat membantu, kamu bisa mulai belajar dari sini: https://azeria-labs.com/writing-arm-assembly-part-1/

Sedangkan Dekompilasi adalah proses untuk mengubah file binary menjadi source code bahasa pemrograman yang high-level, sehingga mudah untuk dibaca oleh manusia dibandingkan membaca langsung bahasa assembly-nya. 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 Ghidra dan buat Project baru

  2. Drag & Drop file binary yang ada di dalam folder Payload -> CrackMeIOS (Show Package Contents) -> CrackMeIOS

  3. Click 2x file binary nya di aplikasi Ghidra

  4. Centang "Decompiler Parameter ID"

  5. Klik button Analyze

GhidraGhidra

5. Analisa

Setelah proses unpack, disassembly 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 binary / Info.plist, mencari bagian kode pengecekan Jailbreak & 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 Symbol Tree di sebelah kiri, kemudian filter dengan keyword "Verify" untuk mencari function yang berhubungan dengan verifikasi serial number.

Ghidra - FilterGhidra - Filter

  1. Di sini, kita menemukan function bernama didTapVerifyButton, kemudian kita klik, maka view-nya akan diarahkan ke kode assembly (tengah) & hasil dekompilasi (kanan) terkait function tersebut.

    Lalu, di bagian kode dekompilasinya, terdapat 2 function yang dipanggil, silakan masuk ke dalam function yang ada di baris ke-14 (FUN_100004364) karena setelah dilihat implementasinya, function tersebut lah yang berfungsi untuk melakukan pengecekan serial number.

GhidraGhidra

  1. Di dalam function FUN_100004364, kita melihat operator perbandingan 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.

GhidraGhidra

6. Patching

Setelah kita tahu apa yang mau dipatch, kita bisa klik kondisi perbandingan tersebut, maka akan diarahkan ke kode assembly-nya.

Untuk melakukan patching, kita hanya bisa mengedit kode assembly-nya, hasil dekompilasi yang di sebelah kanan hanyalah preview saja untuk membantu kita dalam membaca alur sebuah program.

Ghidra - BeforeGhidra - Before

Di bagian kode assembly, kita melihat 2 instruksi cmp (Compare) & bne (Branch if Not Equal)yang digunakan untuk melakukan operasi perbandingan, jika hasilnya tidak sama, maka instruksi selanjutnya tidak akan dieksekusi dan akan berpindah ke block LAB_100004440. dan kalau kita cek isi dari LAB_100004440 adalah untuk menampilkan alert "Invalid Serial Number". Sehingga kita perlu set agar hasil perbandingannya selalu sama.

Jadi, silakan arahkan cursor ke instruksi cmp, kemudian klik kanan -> Patch Instruction -> Ubah kedua valuenya agar menjadi sama.

Ghidra - AfterGhidra - After

Setelah itu, klik menu File -> Export Program -> Format: Original File -> Output: replace file binary yang ada di folder Payload -> OK.

Ghidra - ExportGhidra - Export

7. Repacking IPA

Karena file IPA sebenarnya adalah file ZIP biasa, silakan compress folder Payload dengan nama "modified.ipa"

Jika sudah, silakan buka aplikasi Sideloadly untuk menginstall aplikasi ke device kita dari file IPA.

Drag & Drop file IPA nya, pilih Apple ID, dan klik button Start.

SideloadlySideloadly

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

CrackMeIOS - PatchedCrackMeIOS - Patched

Proteksi Aplikasi

Proteksi aplikasi iOS 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 iOS 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, SwiftShield

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 service App Attest bawaan Apple.

Tools: App Attest, Firebase AppCheck

3. Anti Dynamic Instrumentation

Jika aplikasi kita di-reverse engineer menggunakan Dynamic Analysis seperti Frida, Objection atau LLDB, 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 ptrace, dll.

Tools: IOSSecuritySuite

What's Next?

Setelah kita tahu bagaimana cara membongkar dan memodifikasi aplikasi iOS, 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! ๐Ÿ˜ ๐Ÿ™

iOS 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
Android Reverse Engineering

Tutorial membongkar dan memodifikasi aplikasi Android ๐Ÿค–

15 March 2025 ยท 9 Minutes
Android 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
CI/CD aplikasi iOS dengan AppCenter

Otomatisasi build dan deployment aplikasi iOS ke Testflight.

31 December 2023 ยท 7 Minutes
iOS Development
CI/CD
AppCenter
All rights reserved ยฉ Alfin Syahruddin ยท 2019
RSS Feed