Reverse Engineering (rekayasa balik) — pemulihan logika dan struktur aplikasi mobile tanpa akses ke kode sumber. Dalam konteks Android dan iOS, ini berarti dekompilasi file biner DEX/APK dan Mach-O/IPA untuk mengekstrak algoritma, kunci enkripsi, endpoint API, dan logika bisnis. Menurut Veracode Security Research (2025), lebih dari 60% aplikasi mobile di top-200 mengandung setidaknya satu indikator yang mempermudah reverse engineering. Reverse Engineering diterapkan tidak hanya untuk serangan, tetapi juga untuk audit keamanan, analisis paten, dan pengujian penetrasi.
Poin Utama
Reverse Engineering (reversing) — disiplin analisis perangkat lunak yang bertujuan memulihkan karakteristik, logika, dan struktur aplikasi dari representasi binernya. Untuk aplikasi mobile, objek analisis adalah file APK (Android) dan IPA (iOS) yang berisi kode terkompilasi, sumber daya, manifes, dan sertifikat. Hasil reversing — ekstraksi algoritma, protokol, kunci enkripsi, skema API, dan logika bisnis.
Tujuan rekayasa balik terbagi menjadi legitim dan ilegitim. Legitim: analisis malware untuk membuat alat perlindungan, audit aplikasi sendiri untuk kerentanan, memastikan kompatibilitas dengan protokol tertutup, analisis paten, dan pelatihan. Ilegitim: pencurian kekayaan intelektual, penghindaran batasan lisensi, pembuatan salinan bajakan, dan modifikasi aplikasi untuk mencuri data pengguna. Menurut Google Play Protect (2025), 78% modifikasi berbahaya aplikasi perbankan dibuat berdasarkan APK asli yang telah melalui reverse engineering.
Metodologi reversing mencakup dua arah utama: analisis statis (tanpa menjalankan aplikasi) dan analisis dinamis (saat eksekusi). Setiap pendekatan memberikan tingkat informasi yang berbeda. Statis — gambaran lengkap kode, tetapi tanpa data waktu eksekusi. Dinamis — perilaku nyata, aliran data, panggilan jaringan, tetapi hanya dalam skenario eksekusi tertentu. Reversing profesional selalu menggabungkan kedua pendekatan.
Analisis statis — tahap pertama rekayasa balik. APK atau IPA asli dibongkar, dan setiap komponen dianalisis secara terpisah. Tujuan utama: bytecode DEX, sumber daya, manifes, pustaka asli (.so, .dylib) dan metadata.
jadx — alat utama untuk analisis statis aplikasi Android. Ia mengubah bytecode DEX menjadi kode Java yang dapat dibaca dengan kerugian minimal. jadx mendukung: dekompilasi multidex, pengenalan lambda dan kelas Kotlin bawaan, ekspor ke proyek Gradle. Untuk kode yang diobfusaksi (ProGuard), jadx menampilkan kode dengan nama a, b, c, tetapi struktur kelas dan urutan panggilan tetap dipertahankan. Menurut pengujian independen, jadx mendekomilasi dengan benar 85–92% kode bahkan dengan obfuskasi.
apktool mendekode APK menjadi kode smali (assembler DEX) dan memulihkan sumber daya dalam bentuk yang dapat dibaca: AndroidManifest.xml diubah dari AXML menjadi XML yang dapat dibaca, tata letak — menjadi markup XML, strings.xml — menjadi teks biasa. apktool memungkinkan memodifikasi sumber daya dan menyusun ulang APK. Setelah dibongkar melalui apktool dan penggantian sumber daya, aplikasi dapat diinstal dengan konten yang dimodifikasi.
Ghidra (NSA) — kerangka kerja reverse engineering, sangat diperlukan untuk analisis pustaka .so Android dan .dylib iOS. Ghidra membongkar kode ARM64, memulihkan pseudokode C, dan membangun grafik panggilan. Untuk reversing mobile, Ghidra digunakan untuk analisis implementasi asli kriptografi dan mekanisme DRM. Ghidra mendukung pembuatan skrip dalam Python dan Java untuk otomatisasi analisis.
# Pembongkaran dan dekompilasi APK
$ jadx -d output_dir app.apk
# Pembongkaran sumber daya melalui apktool
$ apktool d app.apk -o app_unpacked
# Analisis pustaka asli melalui Ghidra
$ ghidra app.apk/lib/arm64-v8a/libnative.so
# Pencarian konstanta string di DEX
$ strings classes.dex | grep -i api_key
Analisis dinamis dilakukan pada aplikasi yang sedang berjalan. Analis terhubung ke proses dan mencegat panggilan fungsi, argumen, dan nilai kembali secara real-time.
Frida — alat terkemuka untuk analisis dinamis aplikasi mobile. Frida menyuntikkan mesin JavaScript ke dalam proses aplikasi (Android ART atau iOS app) dan memungkinkan mencegat panggilan fungsi Java/Objective-C maupun C/C++. Dengan Frida, insinyur balik dapat: mencatat semua panggilan metode AES.decrypt() dengan parameter, mengganti nilai kembali dengan sembarang, menghapus SSL-pinning melalui Universal Android SSL Unpin, melacak panggilan asli melalui Stalker. Frida bekerja tanpa memodifikasi APK/IPA, menjadikannya sangat diperlukan untuk pengujian penetrasi.
Objection menyediakan perintah siap pakai untuk tugas reversing tipikal tanpa menulis skrip JavaScript: disable-pinning (menonaktifkan SSL pinning), dump-keychain (iOS), explore (menjelajahi hierarki kelas), memory search (mencari string di memori). Objection memungkinkan melakukan analisis dinamis lengkap tanpa satu baris kode pun. Untuk aplikasi iOS, Objection secara otomatis menemukan dan mencatat panggilan NSURLSession, CFNetwork, dan NSKeyedArchiver.
Xposed — kerangka kerja untuk Android yang bekerja dengan mengganti file app_process di Zygote. Tidak seperti Frida, Xposed tidak memerlukan akses root setelah instalasi. Modul Xposed dapat mencegat panggilan metode di aplikasi mana pun. Untuk reversing, Xposed nyaman untuk analisis jangka panjang: modul diinstal dan bekerja terus-menerus, mencatat perilaku aplikasi dalam berbagai skenario. Xposed mendukung Android hingga versi 8.1; untuk Android 9+ digunakan EdXposed berbasis SandHook.
// Frida: mencegat metode decrypt() di aplikasi
let aesClass = Java.use("javax.crypto.Cipher");
aesClass.doFinal.overload(
"[B", "int", "int"
).implementation = function(
input, offset, len
) {
console("[AES] decrypt called, len=" + len);
return this.doFinal(input, offset, len);
};
Alur kerja standar reversing terdiri dari langkah-langkah berurutan, yang masing-masing memberikan tingkat informasi tertentu.
Analis mempelajari APK pada tingkat metadata: targetSdk, uses-permission (izin apa yang diminta), intent-filter, dan exported components. Berdasarkan izin dapat ditentukan API apa yang digunakan (android.permission.CAMERA → kamera, android.permission.RECORD_AUDIO → audio). Berdasarkan exported activity ditentukan titik masuk tanpa otorisasi. Tahap ini dilakukan melalui aapt atau ApkAnalyzer dan memakan waktu 1–2 menit.
APK dibongkar, classes.dex (atau multidex) dimasukkan ke jadx. Keluaran — kode Java/Kotlin dalam paket. Analis mencari kelas kunci: CryptoUtils, ApiClient, AuthManager, DatabaseHelper, dan memeriksa algoritma apa yang digunakan. Jika dalam kode terdapat string AES/CBC/PKCS5Padding — aplikasi menggunakan enkripsi dan kunci harus ditemukan. Pada tahap ini ditentukan: kunci hardcode, URL API, token OAuth, dan rahasia. Tanpa obfuskasi seluruh kode aplikasi terbaca seperti proyek Java biasa.
Dengan mengatur Frida atau Objection untuk menonaktifkan SSL-pinning, analis menjalankan aplikasi dan mencegat lalu lintas jaringan melalui Burp Suite atau mitmproxy. Berdasarkan data lalu lintas, skema API direkonstruksi: endpoint apa, parameter apa, dalam format apa. Jika memungkinkan, analis memodifikasi permintaan dan memeriksa reaksi server terhadap data yang tidak benar atau berbahaya. Tidak adanya validasi server — kerentanan langsung yang ditemukan pada langkah ini.
Hasil analisis dicatat dalam bentuk terstruktur. Untuk setiap tempat rentan yang ditemukan, ditunjukkan: kelas dan metode, deskripsi kerentanan, vektor eksploitasi, dan rekomendasi perbaikan. Kumpulan data ini diteruskan ke tim pengembangan atau digunakan untuk menyusun laporan pentest. Di lingkungan otomatis (MobSF), laporan dihasilkan secara otomatis berdasarkan analisis statis dan dinamis.
Reverse engineering aplikasi iOS lebih sulit daripada Android karena arsitektur keamanan Apple yang lebih ketat dan tidak adanya akses langsung ke sistem file pada perangkat standar. Untuk analisis iOS diperlukan jailbreak.
Arsip IPA berisi biner Mach-O — format universal file yang dapat dieksekusi Apple. Untuk dekompilasi digunakan Hopper Disassembler atau IDA Pro. Tidak seperti Android DEX yang didekompilasi ke Java dengan kerugian minimal, Mach-O berisi kode ARM64 asli yang dipulihkan ke pseudokode C dengan akurasi lebih rendah. Hopper mampu memulihkan 60–70%, sisanya harus dianalisis pada tingkat assembler.
Frida di iOS memerlukan jailbreak dan instalasi frida-server. Setelah terhubung, Frida mencegat metode Objective-C melalui API perutean pesan. Untuk aplikasi iOS, skenario tipikal: mencegat metode NSURLSession.dataTaskWithRequest untuk mencatat permintaan HTTP, mencegat NSKeyedUnarchiver untuk menganalisis data terserialisasi, dan melacak kueri CoreData melalui frida-trace. Frida tersedia untuk iOS 15–17 dengan dirilisnya jailbreak Dopamine.
Reversing dapat mencakup modifikasi IPA dengan pengepakan ulang dan instalasi pada perangkat. Alat: ipatool untuk membongkar, MachOView untuk melihat bagian, dan optool untuk menyuntikkan kode. Setelah modifikasi, IPA ditandatangani melalui ldid atau fastlane sigh untuk instalasi pada perangkat yang di-jailbreak. Untuk iOS 16+, tanda tangan kode diperiksa pada tingkat Secure Enclave, dan IPA yang dimodifikasi tidak akan berjalan pada perangkat yang tidak di-jailbreak.
// Frida: mencegat permintaan HTTP di aplikasi iOS
if (ObjC.available) {
let NSURLSession = ObjC.classes.NSURLSession;
let dataTaskWithRequest = ObjC.protocol("NSURLSessionDelegate")
.method("- URLSession:dataTask:didReceiveData:");
Interceptor.attach(dataTaskWithRequest.implementation, {
onEnter(args) {
let data = ObjC.Object(args[3]);
console("[HTTP Response]", data.toString());
}
});
}
Perlindungan dari rekayasa balik dibangun berdasarkan prinsip keamanan berlapis: tidak ada satu metode pun yang memberikan perlindungan 100%, tetapi kombinasi membuat reversing menjadi tidak ekonomis.
Tingkat dasar — ProGuard untuk Android, yang mengganti nama kelas dan metode dengan satu karakter. Untuk penguatan digunakan DexGuard, yang menambahkan overload induction (beberapa metode dengan tanda tangan berbeda dan nama yang sama) dan enkripsi string AES-256. Obfuskasi meningkatkan waktu analisis kode dari 5 menit menjadi 5–20 jam tergantung tingkatnya. DexGuard tambahan membingungkan aliran kontrol, membuat kode tidak terbaca oleh jadx.
Semua konstanta string — URL, kunci, token, kueri SQL — dienkripsi pada tahap pembuatan dan didekripsi di runtime. Ini melindungi dari analisis statis string file DEX. Penyerang yang menjalankan strings app.apk tidak akan melihat satu pun endpoint API. Bahkan setelah dekompilasi, semua string terlihat seperti data biner. Untuk setiap string dapat digunakan kunci terpisah, yang mempersulit deobfuskasi.
Agen RASP di dalam aplikasi mendeteksi Frida dan debugging di runtime. Kontrol integritas melalui hash SHA-256 APK mencegah peluncuran versi aplikasi yang dimodifikasi. Jika hash APK tidak cocok dengan referensi (disimpan di lapisan asli) — aplikasi berhenti. Ini memblokir serangan berdasarkan modifikasi APK, termasuk repackaging.
Logika bisnis kritis harus dijalankan di server, bukan di klien. Bahkan jika penyerang sepenuhnya mendekomilasi aplikasi, kode server tetap tidak dapat diakses. Validasi server semua permintaan dan parameter mencegah eksploitasi kerentanan yang ditemukan selama reversing. Atestasi server melalui Play Integrity API atau App Attest menegaskan bahwa permintaan berasal dari aplikasi asli yang tidak dimodifikasi.
Pertanyaan yang Sering Diajukan
Di AS, reverse engineering diatur oleh DMCA — diizinkan untuk kompatibilitas, pengujian keamanan, dan tujuan pengarsipan. Penghindaran tindakan perlindungan teknis (DRM) dilarang. Di Eropa, pasal 6 EUCD analog dengan DMCA. Di Rusia, reverse engineering tanpa persetujuan pemegang hak cipta dapat ditafsirkan sebagai pelanggaran hak cipta. Konsultasi hukum wajib dilakukan sebelum reversing komersial.
Tidak. Kode apa pun yang dijalankan di perangkat penyerang dapat dianalisis — ini adalah batasan prinsip dari model perlindungan sisi klien. Tujuan perlindungan adalah membuat reversing tidak ekonomis: biaya waktu dan sumber daya harus melebihi nilai hasil yang diperoleh. Kombinasi obfuskasi, RASP, dan logika server adalah standar perlindungan saat ini.
Repackaging — modifikasi aplikasi melalui reverse engineering dengan penyusunan ulang APK. Penyerang membongkar APK melalui apktool, menambahkan kode berbahaya atau mengganti kunci API, menyusun ulang, dan menandatangani dengan sertifikatnya sendiri. Repackaging merupakan 86% dari semua serangan di Android, menurut Kaspersky Threat Report (2025). Tindakan pencegahan: periksa tanda tangan digital di runtime.
Skrip Frida Universal Android SSL Unpin mencegat panggilan TrustManager.checkServerTrusted dan ServerTrustManager di iOS, mengganti implementasi dengan allow-all. Juga digunakan pencegat metode X509TrustManager di OkHttp dan URLConnection. SSL-pinning di Frida dilewati dalam 10 detik dengan skrip siap pakai. Perlindungan yang lebih tangguh — certificate transparency melalui verifikasi sertifikat di server.
Kode asli C/C++ di pustaka .so/.dylib secara signifikan lebih sulit direverse daripada Java di DEX. Swift dengan PGO dan kompilasi Osize memberikan biner yang lebih membingungkan daripada Objective-C. Rust dikompilasi ke kode asli tanpa metadata runtime dan tanpa pembungkus standar Objective-C, menjadikannya yang paling sulit untuk direverse di antara bahasa pengembangan mobile modern.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga