Portfolio Hire Me

Mobile / Lisensi Anti-Bajak

Sistem Lisensi POS Offline Aman (EMA / MOLLA / TRIFA POS)

Sistem lisensi yang terikat ke perangkat dan ditandatangani secara kriptografis untuk aplikasi POS Flutter offline-first — dibangun untuk menghentikan pembajakan kasual dan cracking modifikasi aplikasi untuk produk yang dijual di bawah tiga merek white-label.

Flutter Riverpod SQLite (sqflite) Laravel 12 Sanctum Spatie Permission Ed25519 signing Midtrans Android Keystore

Masalahnya: Produk ini adalah aplikasi Point-of-Sale yang sepenuhnya offline untuk toko kecil — dibangun dengan Flutter, berjalan sepenuhnya di perangkat dengan database SQLite lokal, sehingga bekerja tanpa koneksi internet sama sekali. Desain offline-first inilah yang menjadi daya tarik utama bagi pelanggan warung dan retail kecil, tapi ini juga yang membuatnya sangat mudah dibajak: tanpa kontak server sama sekali, pembeli bisa membayar sekali, lalu install ulang atau hapus data aplikasi untuk mereset trial atau kunci PIN tanpa batas. Aplikasi ini dijual di bawah tiga merek white-label terpisah (EMA POS, MOLLA POS, TRIFA POS) dari satu basis kode yang sama, sehingga perbaikan lisensi apa pun harus bekerja identik di ketiganya tanpa harus memecah aplikasi.

Solusinya: Saya merancang dan membangun sistem lisensi yang terikat ke perangkat, yang tetap membuat aplikasi 100% berfungsi secara offline setelah aktivasi, sekaligus membuat langkah aktivasi itu sendiri tidak bisa dipalsukan. Setiap perangkat menghasilkan pasangan kuncinya sendiri di Android Keystore (didukung perangkat keras jika tersedia), mengirim kunci publiknya ke server lisensi Laravel 12 saat aktivasi pertama, dan server menandatangani balik sertifikat lisensi dengan kunci privat Ed25519 yang tidak pernah meninggalkan server. Aplikasi memverifikasi tanda tangan tersebut secara lokal di setiap peluncuran — tanpa perlu panggilan jaringan — sehingga instalasi asli yang sudah dibayar tetap berfungsi tanpa konektivitas sama sekali, sementara instalasi hasil kloning atau yang dimodifikasi langsung gagal verifikasi tanda tangan.

Pembayaran dan penerbitan lisensi berjalan lewat Midtrans, dengan server lisensi dibangun mengikuti konvensi yang sama dengan backend lainnya — Sanctum untuk autentikasi API, primary key UUID, Spatie Permission untuk peran staf, dan pencatatan aktivitas lengkap untuk setiap lisensi yang diterbitkan, dipindahkan, atau dicabut. Sebelum menulis satu baris kode lisensi pun, saya melakukan audit penuh dan pemodelan ancaman terhadap aplikasi yang sudah ada, lalu mengurutkan penyerang berdasarkan kemampuan realistisnya — mulai dari pemilik toko biasa yang menghapus data aplikasi demi menghemat biaya langganan, sampai reverse engineer yang menambal APK dengan Frida — dan merancang perlindungan berdasarkan ancaman yang benar-benar relevan, bukan over-engineering untuk skenario yang paling kecil kemungkinannya.

Hasilnya: Satu basis kode Flutter kini dirilis di bawah tiga merek terpisah dengan satu inti lisensi yang sama, setiap pelanggan yang membayar mendapat lisensi terikat perangkat yang tetap bertahan meski dipakai offline tanpa batas waktu, dan pembajakan kasual berupa reset-dan-pakai-ulang — ancaman dengan volume tertinggi — berhasil ditutup tanpa mengharuskan aplikasi menghubungi server di setiap peluncuran.

← Back to Portfolio Discuss a Project Like This