Panduan Reverse Engineering APK Android: Deteksi Kebocoran API Key
Dengarkan Artikel Ini
Suara AI Otomatis β’ 4 mnt baca baca
β‘ TL;DR
Poin Kunci Artikel Ini:
- Periksa package util, network, atau config.
- [ ] Menggunakan backend proxy untuk request yang butuh kredensial.
- [ ] Menggunakan enkripsi/obfuscation jika terpaksa menyimpan rahasia di klien.
π Daftar Isi Materi Tutup β΄
Kenapa Hardcoded Secret Berbahaya?
APK pada dasarnya adalah arsip ZIP. Di dalamnya ada fileclasses.dex, resources.arsc, AndroidManifest.xml, dan library native. Karena bytecode Android tidak dikompilasi ke mesin native, ia masih bisa dikembalikan mendekati kode Java/Kotlin aslinya.
Beberapa konsekuensi yang umum terjadi:
- Kuota API disalahgunakan. API key Google Maps, Firebase, atau OpenAI yang bocor bisa dipakai orang lain hingga tagihan Anda membengkak.
- Akses backend terbuka. Kredensial database atau token admin memungkinkan peretas membaca atau mengubah data.
- Data pengguna bocor. Token akses bisa digunakan untuk mencuri informasi pribadi pengguna.
- Layanan pihak ketiga disalahgunakan. Kredensial Stripe, Midtrans, Twilio, atau SendGrid yang terexpose bisa digunakan untuk aktivitas ilegal.
Peralatan yang Kita Butuhkan
Sebelum mulai, siapkan tiga tools ini:- Jadx / Jadx-GUI β decompiler APK ke Java.
- ADB β untuk mengambil APK dari perangkat.
- Apktool β untuk membongkar resource XML.
Langkah 1: Ambil APK dari Perangkat
Aktifkan USB Debugging di HP Android Anda, sambungkan ke komputer, lalu jalankan perintah berikut:adb shell pm list packages | grep targetapp
adb shell pm path com.example.targetapp
adb pull /data/app/~~random_hash/com.example.targetapp-random_hash/base.apk target_app.apk
Sekarang kita sudah punya file APK di komputer.
Langkah 2: Bongkar APK dengan Jadx
Buka file APK di Jadx:jadx-gui target_app.apk
Jadx akan menampilkan struktur kode Java hasil decompile. Untuk mencari API key atau token, tekan Ctrl + Shift + F dan cari kata seperti api_key, apikey, token, secret, password, atau firebase.
Tips pencarian cepat:
- Perhatikan file
strings.xmldanAndroidManifest.xml. - Cek class yang namanya
BuildConfigatauConstants. - Periksa package util, network, atau config.
Langkah 3: Periksa String dengan Terminal
Selain Jadx, Anda juga bisa memakai perintahstrings dari terminal untuk menyaring string yang terdapat di APK:
unzip -p target_app.apk classes.dex | strings | grep -iE 'apikey|api_key|token|secret|password'
Ini cara cepat meskipupun tidak selalu rapi. Hasilnya bisa dipakai untuk memastikan tidak ada string sensitif yang terekspos.
Cara Melindungi Aplikasi
Setelah menemukan masalah, berikut beberapa pendekatan untuk mengurangi risiko:1. Jangan Simpan Rahasia di Kode
Solusi paling ideal adalah tidak menyimpan API key di kode. Gunakan backend proxy yang memegang kredensial di server. Aplikasi Android hanya mengirim request ke backend Anda, bukan langsung ke layanan pihak ketiga.// Jangan begini
const val API_KEY = "AIzaSyD-EXAMPLE_KEY" // bahaya!
// Lebih baik begini
suspend fun getNearbyPlaces(query: String) = apiService.searchPlaces(query)
// Rahasia disimpan di server backend
2. Native Library + Obfuscation
Kalau memang terpaksa menyimpan rahasia di klien, pindahkan ke native C/C++ dan obfuscat string. Tetapi ingat, ini hanya mempersulit, bukan membuat aman sepenuhnya.3. Secrets Gradle Plugin
Untuk development, gunakan plugin ini agar kredensial tetap berada dilocal.properties dan tidak ikut masuk ke Git.
plugins {
id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") version "2.0.1"
}
Dan file local.properties:
MAPS_API_KEY=AIzaSyD-EXAMPLE_SECURE_KEY_LOCAL
PAYMENT_API_SECRET=sec_live_998123123
Jangan lupa tambahkan local.properties ke .gitignore.
Checklist Keamanan Kredensial Android
- [ ]
local.propertiesdan file sensitif sudah masuk.gitignore. - [ ] Tidak ada API key atau token di
strings.xmldanAndroidManifest.xml. - [ ] Menggunakan backend proxy untuk request yang butuh kredensial.
- [ ] Menggunakan enkripsi/obfuscation jika terpaksa menyimpan rahasia di klien.
- [ ] Terintegrasi secret scanner seperti Gitleaks di CI/CD.
Integrasi Secret Scanner di CI/CD
Tambahkan pemindai otomatis di pipeline. Contoh dengan GitHub Actions dan Gitleaks:name: Security Code Scan
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
gitleaks-scan:
name: Detect Hardcoded Secrets
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Run Gitleaks Scanner
uses: gitleaks/gitleaks-action@v2
env:
GITHUB_TOKEN: {{ secrets.GITHUB_TOKEN }}




π¬ Komentar (0)
Tulis Komentar