RE & Code Tampering Lab
interactive security training
~/lab/finvault/
⚠ Demo edukatif · aplikasi fiktif

Reverse Engineering
& Code Tampering_

Membongkar cara kerja aplikasi, memahami bagaimana logikanya bisa diubah, dan — yang terpenting — bagaimana cara melindunginya. Lab simulasi langsung di dalam slide.

4 lab interaktif
APK target demo: FinVault
⌨ navigasi: ← →
tujuan: defensif / awareness

Tekan tombol → atau klik panah di bawah untuk mulai · Spasi = lanjut

01 Konsep Dasar

Dua hal yang sering disamakan, padahal berbeda

Reverse engineering adalah memahami. Code tampering adalah mengubah. Satu bisa berdiri sendiri, satunya hampir selalu diawali yang pertama.

reverse_engineering.def read-only
🔍

Reverse Engineering

memahami tanpa source code

Proses membongkar aplikasi yang sudah jadi (binary/APK/EXE) untuk merekonstruksi cara kerja, alur logika, dan struktur-nya — tanpa memiliki kode sumber aslinya.

  • Dari 0xCAFEBABE → kode yang terbaca manusia
  • Membaca, bukan mengubah: analisis statis & dinamis
  • Sah untuk: audit keamanan, interoperabilitas, riset malware, debugging
Analogi: membongkar jam tangan untuk menggambar skema roda giginya — jamnya tetap utuh.
code_tampering.def write-access
✎

Code Tampering

mengubah perilaku

Memodifikasi kode/binary aplikasi agar berperilaku berbeda dari yang dirancang pembuatnya — lalu dikemas ulang & dijalankan kembali.

  • Bypass cek lisensi, login, atau pembayaran
  • Mengubah nilai/konstanta (mis. false → true)
  • Menyuntik kode (iklan, pencuri data) ke app sah → app palsu/trojan
Analogi: setelah tahu skemanya, mengganti satu roda gigi agar jam berjalan lebih cepat — fungsinya berubah.
⚖️

Etika & legal: teknik ini sah hanya pada aplikasi milik sendiri, dengan izin tertulis (penetration testing / bug bounty), atau untuk riset keamanan. Memodifikasi aplikasi orang lain untuk merugikan = pelanggaran hukum (UU ITE, hak cipta). Materi ini murni untuk pertahanan: pahami serangannya agar bisa menghentikannya.

02 Tahapan & Metode · Lab 1

Alur kerja: dari APK utuh ke APK termodifikasi

Klik Jalankan Tahap untuk menelusuri pipeline reverse-engineering lengkap di terminal simulasi — persis langkah yang dipakai analis di dunia nyata.

1 Acquire
2 Decompile
3 Analyze
4 Modify
5 Rebuild
6 Sign
7 Install
analyst@lab: ~/finvault idle
$ Terminal siap. Tekan "Jalankan Tahap" untuk memulai pipeline.
toolbox
apktooldecode / rebuild .smali
jadx.dex → Java terbaca
fridahook runtime (dinamis)
ghidra / IDAnative .so / binary
apksignertanda tangan ulang
DUA PENDEKATAN
Statis

App tidak dijalankan. Baca kode & resource.

Dinamis

App berjalan. Hook & debug live.

03 Perubahan Logika · Lab 2

Patch Bench: ubah satu byte, ubah seluruh perilaku

Metode checkLicense() FinVault mengembalikan false → fitur premium terkunci. Klik baris Smali yang disorot, pilih patch-nya, dan amati aplikasinya berubah secara langsung.

LicenseManager.smali method · checkLicense()Z
12# direct methods
13.method public checkLicense()Z
14    .registers 2
15    # v0 = status premium (0=false, 1=true)

  16    const/4 v0, 0x0  ✎ edit byte
17    return v0
18.end method
            
Instruksi const/4 v0, 0x0 memuat 0 (false) ke register. Pilih nilai pengganti:
java_view · JADX decompiled
public boolean checkLicense() {
  return false; // ← titik keputusan
}
₿ FinVault
v2.4.1 · premium finance
SALDO
Rp 42.500.000
🔒
Dashboard Premium Terkunci
checkLicense() → false

Status aplikasi mengikuti nilai yang kamu patch

04 Hasil Pengujian · Lab 3

Sebelum vs sesudah: jalankan test suite

Bandingkan perilaku build asli (signed resmi) dengan build hasil tamper. Klik Jalankan Pengujian untuk menjalankan assertion otomatis pada kedua versi.

● build asli — finvault.apk
LISENSI
INACTIVE
🔒
Premium terkunci
● build tamper — finvault-patched.apk
LISENSI
—
·
belum diuji
test_runner.log 0 / 5 assertions
Skenario UjiBuild AsliBuild TamperDampak
checkLicense()false ✓——
Dashboard premiumterkunci ✓——
Export PDFditolak ✓——
Verifikasi tanda tanganvalid (resmi) ✓——
Integritas kode (hash .dex)cocok ✓——
05 Deteksi & Pertahanan · Lab 4

Hidupkan pertahanan — matikan serangannya

Ini inti dari materi. Aktifkan mekanisme proteksi di bawah, lalu lihat apakah APK hasil tamper dari Lab 2 & 3 masih bisa berjalan. Satu lapisan saja sering sudah cukup untuk menggagalkannya.

🔏
Verifikasi tanda tangan

Saat start, app cek signature APK. Tamper = signature berubah → app menolak jalan.

#️⃣
Integrity / checksum .dex

Bandingkan hash kode saat runtime dengan hash resmi. Tidak cocok → berhenti.

🌫️
Obfuscation (R8 / ProGuard)

Nama kelas & method diacak jadi a/b/c. Menyulitkan analis menemukan target patch.

☁️
Validasi sisi server

Status premium diputuskan server, bukan boolean lokal. Patch lokal jadi tak berarti.

🛡️
Deteksi root / debugger / Frida

Hentikan app bila lingkungan tidak tepercaya (root, emulator, hook aktif).

₿ FinVault PATCHED
menjalankan build hasil tamper…
🔓
Premium aktif.
Tamper berhasil — tanpa proteksi.
⚠ Tanpa proteksi aktif, APK termodifikasi berjalan bebas dan fitur premium terbuka.
06 Rangkuman

Yang perlu dibawa pulang

Reverse engineering & tampering bukan sihir — hanya proses yang sistematis. Memahaminya membuat kita membangun aplikasi yang jauh lebih sulit dibobol.

01
RE = memahami, tampering = mengubah

Keduanya berbeda. Tampering hampir selalu diawali reverse engineering untuk menemukan titik keputusan.

02
Satu byte bisa membalik logika

Konstanta 0x0 → 0x1 mengubah false menjadi true. Logika kritis tak boleh bergantung pada boolean lokal.

03
Jangan percaya klien

Keputusan penting (lisensi, pembayaran, otorisasi) divalidasi di server, bukan di dalam APK yang ada di tangan pengguna.

04
Pertahanan berlapis

Signature check + integrity + obfuscation + server-side + anti-tamper. Satu lapis bisa dilewati; berlapis jauh lebih mahal untuk dibobol.

🎯

Checklist developer: aktifkan R8/obfuscation di rilis · verifikasi signature saat start · pindahkan logika kritis ke server · gunakan Play Integrity / SafetyNet · jangan hardcode rahasia · uji aplikasimu sendiri dengan mindset penyerang.

Selesai · tekan ← untuk mengulang lab · Terima kasih 🙏