Rekayasa Balik Aplikasi SMK Taruna Bangsa Pelajar
Panduan teknis komprehensif untuk menganalisis dan memodifikasi aplikasi SMK Taruna Bangsa Pelajar (v1.2.3) guna memahami mekanisme mode kios dan proteksi screenshot menggunakan teknik rekayasa balik di Fedora 42. Tutorial ethical hacking dan cybersecurity untuk tujuan pendidikan.
Mulai TutorialPendahuluan Rekayasa Balik Android
Tutorial ini menyajikan panduan lengkap untuk melakukan reverse engineering terhadap aplikasi SMK Taruna Bangsa Pelajar (versi 1.2.3) dengan tujuan memahami dan memanipulasi fitur mode kios serta proteksi screenshot yang membatasi navigasi dan capture layar pada perangkat Android. Proses ini dilakukan di lingkungan Fedora 42 menggunakan alat profesional seperti APKTool, Java 21, dan ADB.
Fokus utama adalah memodifikasi logika mode kios agar selalu dianggap aktif, mencegah pengembalian ke halaman awal, menonaktifkan penguncian perangkat, serta menghapus proteksi screenshot untuk keperluan penetration testing dan analisis keamanan mobile.
🎯 Tujuan Tutorial:
- Menonaktifkan
startLockTask()untuk mencegah penguncian perangkat Android - Memodifikasi
smali/j0/b.smaliagar mode kios selalu dianggap aktif (TRUE) - Menghapus proteksi screenshot dengan memodifikasi
smali/h0/a.smaliuntuk mengizinkan capture layar - Menghasilkan APK baru yang dapat diuji di perangkat Android untuk analisis keamanan
- Memahami struktur aplikasi Android dan teknik bypass keamanan
🛠️ Tools yang Digunakan:
- APKTool 2.11.1 - Dekompilasi dan kompilasi APK
- Java 21 OpenJDK - Runtime environment
- Android Debug Bridge (ADB) - Komunikasi dengan perangkat
- Keytool - Pembuatan dan pengelolaan keystore
- APK Signer - Penandatanganan digital APK
⚠️ Peringatan Etis dan Legal: Pastikan Anda memiliki izin resmi untuk memodifikasi aplikasi atau hanya bereksperimen di laboratorium keamanan siber yang terkontrol. Penyalahgunaan teknik ini dapat melanggar hukum, kebijakan institusi, dan etika profesional cybersecurity. Tutorial ini ditujukan untuk tujuan edukasi, penelitian keamanan, dan ethical hacking semata.
0. Instalasi Tools Reverse Engineering #
Apa: Menginstal perangkat lunak yang diperlukan untuk rekayasa balik.
Mengapa: Alat-alat ini membentuk lingkungan kerja untuk mendekompilasi, memodifikasi, menandatangani, dan menguji APK.
# Instal Java 21
sudo dnf install java-21-openjdk-devel
java -version
# Instal alat lain
sudo dnf install unzip android-tools
# Instal apktool 2.11.1
wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.11.1.jar -O apktool.jar
sudo mv apktool.jar /usr/local/bin/apktool.jar
sudo chmod +x /usr/local/bin/apktool.jar
# Download script wrapper
wget https://bitbucket.org/iBotPeaches/apktool/raw/7e03efc09e406a97f2995963c48500ed62487d3f/scripts/linux/apktool -O apktool
sudo mv apktool /usr/local/bin/apktool
sudo chmod +x /usr/local/bin/apktool
sudo chcon -t bin_t /usr/local/bin/apktool
# Verifikasi instalasi
apktool --version
adb version
Potensi Error:
apktooltidak berjalan karena izin SELinux: Gunakanchcon.- Java versi salah: Pastikan Java 21 terinstal.
adbtidak mendeteksi perangkat: Aktifkan USB Debugging.
Persiapan: Mendapatkan Berkas XAPK
Screenshot halaman APKPure untuk mengunduh berkas .xapk SMK Taruna Bangsa Pelajar (v1.2.3).
Unduh berkas SMK_Taruna_Bangsa_Pelajar_1.2.3_APKPure.xapk dari APKPure (apkpure.com) untuk memulai proses rekayasa balik. Pastikan versi aplikasi adalah 1.2.3 untuk konsistensi dengan tutorial ini.
1. Ekstrak Berkas XAPK #
Apa: Mengekstrak berkas .xapk untuk mendapatkan APK dasar dan komponen lainnya.
Mengapa: File APK diperlukan untuk proses dekompilasi.
mkdir ~/apk_tb
cd ~/apk_tb
cp ~/Unduhan/SMK\ Taruna\ Bangsa\ Pelajar_1.2.3_APKPure.xapk .
unzip SMK\ Taruna\ Bangsa\ Pelajar_1.2.3_APKPure.xapk
rm SMK\ Taruna\ Bangsa\ Pelajar_1.2.3_APKPure.xapk
Alternatif:
- Dari Perangkat: Jika aplikasi sudah terinstall, ekstrak APK menggunakan ADB.
- Mobile: Download
.xapkdi HP, gunakan ZArchiver untuk ekstrak, lalu SAI untuk instalasi.
adb shell pm path com.tb.view_spp
adb pull /data/app/com.tb.view_spp-*/base.apk com.tb.view_spp.apk
2. Membuat Keystore #
Apa: Menghasilkan berkas keystore untuk menandatangani APK yang dimodifikasi.
keytool -genkey -v -keystore mykey.jks -alias myalias -keyalg RSA -keysize 2048 -validity 10000
Catatan: Simpan password keystore dengan aman, karena akan dibutuhkan untuk penandatanganan APK.
3. Dekompilasi APK Dasar #
Apa: Mendekompilasi com.tb.view_spp.apk untuk menghasilkan kode Smali.
apktool d com.tb.view_spp.apk -o decompiled_apk
Proses ini akan menghasilkan folder decompiled_apk yang berisi kode Smali dan resources aplikasi.
4. Modifikasi Kode Smali #
Apa: Memodifikasi dua bagian kode Smali untuk bypass mode kios.
cd ~/apk_tb/decompiled_apk
grep -r -i "lockTask" smali
# Edit file smali/F0/Y.smali
nano smali/F0/Y.smali
Modifikasi 1: Di smali/F0/Y.smali, ganti:
# Sebelum
invoke-virtual {v0}, Landroid/app/Activity;->startLockTask()V
# Sesudah
nop
Modifikasi 2: Di smali/j0/b.smali, edit method a(). Lihat kode lengkap di /kode/small_j0b.txt:
nano smali/j0/b.smali
.method public final a()Ljava/lang/Boolean;
.locals 1
sget-object v0, Ljava/lang/Boolean;->TRUE:Ljava/lang/Boolean;
return-object v0
.end method
4.5. Menghilangkan Proteksi Screenshot #
Apa: Memodifikasi kode Smali di smali/h0/a.smali untuk menghapus proteksi screenshot yang menggunakan WindowManager.LayoutParams.FLAG_SECURE.
Mengapa: Aplikasi SMK Taruna Bangsa Pelajar menggunakan FLAG_SECURE (nilai hex: 0x2000) untuk mencegah screenshot atau screen recording, yang menyulitkan analisis keamanan. Dengan modifikasi ini, kita bisa capture layar untuk dokumentasi atau pengujian.
Bagaimana Menemukannya: Proteksi screenshot ditemukan dengan mencari string terkait seperti FLAG_SECURE, setFlags, 0x2000, atau screenshot di folder Smali menggunakan perintah grep. File smali/h0/a.smali teridentifikasi karena mengandung logika untuk mengatur FLAG_SECURE dan status is_screenshot_on di SharedPreferences.
cd ~/apk_tb/decompiled_apk
grep -r -i "FLAG_SECURE" smali
grep -r -i "setFlags" smali
grep -r -i "0x2000" smali
grep -r -i "screenshot" smali
grep -r -i "is_screenshot_on" smali
Hasil Grep: Perintah di atas mengarahkan ke smali/h0/a.smali, yang mengandung method f(), j(), dan k(). Method k() berisi panggilan clearFlags(0x2000), dan method f() mengatur logika screenshot berdasarkan perintah seperti screenshotOn atau screenshotOff.
Modifikasi: Kita ubah method j() dan k() untuk menonaktifkan proteksi screenshot, serta memodifikasi f() agar selalu memanggil k(). Lihat kode lengkap di /kode/small_h0.txt.
- Buka file
smali/h0/a.smalimenggunakan editor sepertinano: - Modifikasi method
j()agar selalu mengembalikanfalse, menandakan proteksi screenshot dimatikan: - Modifikasi method
k()untuk menghapusFLAG_SECURE(0x2000) dari window dan mengaturis_screenshot_onkefalsediSharedPreferences: - Modifikasi method
f()untuk memastikan perintah sepertiscreenshotOn,screenshotOff, dantoggleScreenshotselalu memanggilk()dan menonaktifkan listener screenshot:
nano smali/h0/a.smali
.method public final j()Z
.locals 1
const/4 v0, 0x0 # MODIFIED: Selalu kembalikan false untuk menonaktifkan screenshot protection
return v0
.end method
.method public final k()Z
.locals 3
const/4 v0, 0x1 # MODIFIED: Selalu kembalikan true untuk menandakan berhasil menonaktifkan
:try_start_0
iget-object v1, p0, Lh0/a;->g:Lp0/d;
if-eqz v1, :cond_0
invoke-virtual {v1}, Landroid/app/Activity;->getWindow()Landroid/view/Window;
move-result-object v1
if-eqz v1, :cond_0
invoke-virtual {v1, v2, v2}, Landroid/view/Window;->clearFlags(I)V # MODIFIED: Clear FLAG_SECURE (0x2000)
:cond_0
iget-object v1, p0, Lh0/a;->h:Landroid/content/SharedPreferences;
if-eqz v1, :cond_1
invoke-interface {v1}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;
move-result-object v1
const-string v2, "is_screenshot_on"
const/4 v0, 0x0
invoke-interface {v1, v2, v0}, Landroid/content/SharedPreferences$Editor;->putBoolean(Ljava/lang/String;Z)Landroid/content/SharedPreferences$Editor;
move-result-object v1
invoke-interface {v1}, Landroid/content/SharedPreferences$Editor;->apply()V
const/4 v0, 1
goto :goto_0
:cond_1
const-string v1, "preferences"
invoke-static {v1}, LS0/h;->g(Ljava/lang/String;)V
const/4 v1, 0x0
throw v1
:try_end_0
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
:catch_0
:goto_0
return v0
.end method
.method public final f(LB0/c;Ly0/j;)V
...
:sswitch_0
const-string v0, "screenshotOff"
invoke-virtual {p1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result p1
if-nez p1, :cond_0
goto/16 :goto_3
:cond_0
invoke-virtual {p0}, Lh0/a;->k()Z # MODIFIED: Panggil k() untuk menonaktifkan screenshot
move-result p1
invoke-static {p1}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
move-result-object p1
invoke-virtual {p0, v3}, Lh0/a;->l(Ljava/lang/String;)V
invoke-virtual {p2, p1}, Ly0/j;->c(Ljava/lang/Object;)V
goto/16 :goto_4
...
Catatan: Setelah modifikasi, simpan file dan lanjutkan ke langkah berikutnya (kompilasi ulang APK). Pastikan semua perubahan Smali konsisten dengan struktur aplikasi untuk mencegah crash.
Pengujian: Setelah menginstal APK yang dimodifikasi (lihat Langkah 9), coba ambil screenshot di aplikasi. Jika berhasil, proteksi screenshot sudah dinonaktifkan. Contoh hasil screenshot:
Contoh screenshot aplikasi SMK Taruna Bangsa Pelajar setelah proteksi dinonaktifkan.
⚠️ Peringatan Etis: Modifikasi ini hanya boleh dilakukan untuk tujuan edukasi atau pengujian keamanan dengan izin resmi. Penyalahgunaan dapat melanggar hukum atau kebijakan privasi.
5. Kompilasi Ulang APK #
Apa: Mengompilasi ulang kode Smali yang telah dimodifikasi menjadi APK.
cd ~/apk_tb/decompiled_apk
apktool b -o ../modified_app.apk
Periksa apakah file modified_app.apk berhasil dibuat di folder ~/apk_tb/.
6. Menandatangani Semua APK #
Apa: Menandatangani APK dan split APK dengan keystore yang telah dibuat.
cd ~/apk_tb
apksigner sign --ks mykey.jks --ks-key-alias myalias modified_app.apk
apksigner sign --ks mykey.jks --ks-key-alias myalias config.en.apk
apksigner sign --ks mykey.jks --ks-key-alias myalias config.arm64_v8a.apk
apksigner sign --ks mykey.jks --ks-key-alias myalias config.mdpi.apk
apksigner sign --ks mykey.jks --ks-key-alias myalias config.fr.apk
# Hapus file signature yang tidak diperlukan
rm -f *.idsig
7. Memperbarui manifest.json #
Apa: Mengedit manifest.json untuk menunjuk ke APK yang dimodifikasi sebagai base APK.
cd ~/apk_tb
nano manifest.json
{
"xapk_version": 2,
"package_name": "com.tb.view_spp",
"name": "Taruna Bangsa Pelajar",
"version_code": "23",
"version_name": "1.2.3",
"min_sdk_version": "23",
"target_sdk_version": "35",
"permissions": [
"android.permission.MANAGE_DEVICE_ADMINS",
"android.permission.INTERNET",
"android.permission.ACTION_MANAGE_OVERLAY_PERMISSION",
"android.permission.SYSTEM_ALERT_WINDOW",
"android.permission.HIDE_OVERLAY_WINDOWS",
"android.permission.CALL_PHONE",
"com.tb.view_spp.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"
],
"split_configs": [
"config.en",
"config.arm64_v8a",
"config.mdpi",
"config.fr"
],
"total_size": 23855334,
"icon": "icon.png",
"split_apks": [
{
"file": "modified_app.apk",
"id": "base"
},
{
"file": "config.en.apk",
"id": "config.en"
},
{
"file": "config.arm64_v8a.apk",
"id": "config.arm64_v8a"
},
{
"file": "config.mdpi.apk",
"id": "config.mdpi"
},
{
"file": "config.fr.apk",
"id": "config.fr"
}
]
}
Catatan: Pastikan com.tb.view_spp.apk adalah base APK yang telah dimodifikasi dan ditandatangani di Langkah 6. Nama file dalam split_apks harus sesuai dengan file yang ada di folder ~/apk_tb/. Simpan file ini di ~/apk_tb/.
8. Membuat Berkas XAPK #
Apa: Menggabungkan APK yang dimodifikasi, split APK, dan manifest.json menjadi file XAPK baru.
Mengapa: XAPK memungkinkan instalasi aplikasi dengan semua komponennya dalam satu paket.
cd ~/apk_tb
zip -r SMK_Taruna_Bangsa_Pelajar_1.2.3_modified.xapk manifest.json modified_app.apk config.en.apk config.arm64_v8a.apk config.mdpi.apk config.fr.apk
Hasil: File SMK_Taruna_Bangsa_Pelajar_1.2.3_modified.xapk akan dibuat di folder ~/apk_tb/.
9. Instalasi dan Pengujian #
Apa: Menginstal XAPK yang telah dimodifikasi ke perangkat Android untuk menguji perubahan mode kios dan proteksi screenshot.
Mengapa: Memastikan modifikasi berfungsi (mode kios bypass, navigasi bebas, screenshot diizinkan).
# Pastikan perangkat terhubung via USB
adb devices
# Instal XAPK via adb
adb install-multiple modified_app.apk config.en.apk config.arm64_v8a.apk config.mdpi.apk config.fr.apk
# Atau, transfer XAPK ke HP dan instal via SAI
cp ~/apk_tb/SMK_Taruna_Bangsa_Pelajar_1.2.3_modified.xapk /sdcard/Download/
Alternatif Mobile: Gunakan aplikasi SAI (Split APKs Installer) untuk menginstal .xapk langsung di perangkat. Download SAI dari Play Store, lalu buka file XAPK di folder Download.
Pengujian:
- Buka aplikasi di perangkat.
- Periksa apakah mode kios tidak mengunci navigasi (bisa keluar aplikasi).
- Coba ambil screenshot untuk memastikan proteksi telah dinonaktifkan.
- Navigasi ke semua menu untuk memastikan tidak ada crash.
Contoh Hasil: Berikut tampilan aplikasi setelah modifikasi:
Analisis Keamanan
Apa: Mengevaluasi implikasi keamanan dari modifikasi mode kios dan proteksi screenshot.
Mengapa: Memahami risiko dan rekomendasi untuk lingkungan produksi.
Risiko:
- Bypass Mode Kios: Menonaktifkan
startLockTask()memungkinkan pengguna keluar dari aplikasi, yang dapat mengekspos data sensitif di perangkat (misal, file sistem atau aplikasi lain). - Bypass Proteksi Screenshot: Menghapus
FLAG_SECUREmemungkinkan capture layar, yang dapat membocorkan informasi sensitif seperti data siswa atau transaksi jika aplikasi digunakan di lingkungan produksi. - Smali Modifikasi: Mengubah
smali/j0/b.smalidansmali/h0/a.smalibisa menyebabkan perilaku aplikasi tidak konsisten, seperti error pada fitur lain yang bergantung pada logika kios atau screenshot. - Penandatanganan Ulang: APK yang ditandatangani ulang dengan keystore pribadi tidak akan lolos verifikasi Play Store, meningkatkan risiko distribusi aplikasi berbahaya jika tidak dikontrol.
Rekomendasi:
- Gunakan modifikasi ini hanya di lingkungan pengujian atau dengan izin resmi.
- Terapkan hardening tambahan, seperti obfuscation kode dengan ProGuard atau R8, untuk mencegah rekayasa balik lebih lanjut.
- Monitor log aplikasi (
adb logcat) untuk mendeteksi anomali setelah modifikasi. - Untuk produksi, gunakan MDM (Mobile Device Management) untuk mengontrol mode kios tanpa modifikasi APK.
- Pastikan aplikasi menggunakan mekanisme anti-tampering untuk melindungi dari bypass proteksi screenshot.
Catatan Pentester: Teknik ini menunjukkan kerentanan aplikasi terhadap rekayasa balik jika tidak dilindungi dengan baik. Pengembang harus mempertimbangkan anti-tampering, code signing yang lebih kuat, dan mekanisme deteksi screenshot yang lebih robust.