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.
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.
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:
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.
Bypass Penjagaan Security - Biasanya sebuah aplikasi ada proteksi pendeteksian Jailbreak, SSL Pinning, dll. Nah, kita bisa melakukan RE untuk bypass segala proteksi tersebut.
Membajak Lisensi - Jika ada aplikasi yang berbayar, kita bisa melakukan bypass pengecekan lisensi dengan RE, sehingga kita dapat menggunakan aplikasi tersebut secara gratis.
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.
Untuk mengikuti tutorial ini, berikut adalah beberapa device dan software yang perlu kita siapkan:
Macbook
iPhone yang sudah dijailbreak (Opsional)
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:
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.
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).
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.
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.
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
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:
Install Frida
Jalankan command di Terminal: git clone https://github.com/AloneMonkey/frida-ios-dump
Masuk ke folder "frida-ios-dump" dan jalankan lagi: sudo pip install -r requirements.txt --upgrade
Jalankan iproxy 2222 22
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.
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.
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.
Silakan buka aplikasi Ghidra dan buat Project baru
Drag & Drop file binary yang ada di dalam folder Payload -> CrackMeIOS (Show Package Contents) -> CrackMeIOS
Click 2x file binary nya di aplikasi Ghidra
Centang "Decompiler Parameter ID"
Klik button Analyze
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.
Pertama, silakan ke menu Symbol Tree di sebelah kiri, kemudian filter dengan keyword "Verify" untuk mencari function yang berhubungan dengan verifikasi serial number.
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.
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.
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.
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.
Setelah itu, klik menu File -> Export Program -> Format: Original File -> Output: replace file binary yang ada di folder Payload -> OK.
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.
Sekarang, ketika kita memasukkan Serial Number random pun akan dianggap valid dan aplikasi kita menjadi PRO Version ๐
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.
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
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
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
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! ๐ ๐
Always open to new ideas. ๐๏ธ
Articles that you might want to read.
Tutorial membongkar dan memodifikasi aplikasi Android ๐ค
Otomatisasi build, testing, screenshot, dan deployment aplikasi iOS ke Testflight & AppStore.
Otomatisasi build dan deployment aplikasi iOS ke Testflight.