SafeLink adalah aplikasi Android modern yang dirancang untuk melindungi pengguna dari ancaman phishing, malware, ransomware, dan situs web berbahaya secara real-time. Dibangun dengan fokus utama pada privasi data dan keindahan visual (Glassmorphism), SafeLink memberikan perlindungan berlapis sebelum Anda membuka tautan apa pun.
SafeLink terintegrasi penuh dengan API VirusTotal v3. Setiap URL diubah menjadi hash Base64 yang valid (tanpa padding) dan diperiksa secara simultan terhadap lebih dari 70 engine keamanan global (seperti Kaspersky, Symantec, Google Safebrowsing, dll.).
Aplikasi secara aktif memantau clipboard perangkat secara non-intrusif.
- Saat mendeteksi URL baru, sebuah Snackbar adaptif akan muncul menawarkan pemindaian sekali klik.
- Jika URL tersebut sudah diketahui berbahaya di database lokal, aplikasi langsung menampilkan dialog peringatan kritis berwarna merah untuk mencegah pembukaan tidak sengaja.
Mendukung interaksi antar-aplikasi secara dinamis. Anda dapat langsung membagikan link dari Google Chrome, WhatsApp, Telegram, atau aplikasi lainnya ke SafeLink. Aplikasi akan langsung mengekstrak URL dari teks dan membuka pemindaian secara otomatis.
Menggunakan pustaka ZXing (Zebra Crossing) untuk memindai kode QR secara instan menggunakan kamera handphone. Hasil scan langsung divalidasi keamanannya tanpa Anda perlu mengetik URL secara manual.
Semua riwayat pemindaian dan situs yang disimpan di bookmark diamankan menggunakan enkripsi AES-256 melalui SQLCipher. Data tidak dapat diakses atau didekripsi oleh aplikasi lain di perangkat yang sama, menjamin kerahasiaan riwayat penelusuran Anda.
- Offline Cache (Migrasi v5): Menyimpan seluruh objek data respons JSON asli dari VirusTotal (
api_response_json) pada tabelhistorydanbookmarks. Hal ini memungkinkan pengguna melihat detail pemindaian secara penuh dan interaktif meskipun sedang offline, tanpa membuang kuota panggilan API tambahan.
Jika link dinyatakan aman atau pengguna bersikeras membukanya, SafeLink menyediakan Webview internal cerdas yang dilengkapi dengan pendeteksi heuristik untuk memblokir navigasi berbahaya secara instan jika mendeteksi anomali di tengah jalan.
Berikut adalah diagram bagaimana SafeLink menganalisis dan mengamankan setiap tautan yang masuk:
graph TD
A[Input URL: Manual/QR/Clipboard/Share Intent] --> B(Validation & Normalization)
B --> C{Cek Database Lokal Terenkripsi}
C -- Ada & Berbahaya --> D[Tampilkan Peringatan Kritis]
C -- Tidak Ada / Baru --> E{Jalankan Mesin Heuristik}
E -- Lolos Heuristik --> F[Panggil VirusTotal API v3]
E -- Terdeteksi Bahaya --> G[Set Skor Bahaya & Tampilkan Hasil]
F --> H{Dapatkan Respons API}
H --> I[Hitung Skor Keamanan 0 - 100]
I --> J[Simpan Hasil Scan Terenkripsi ke SQLite]
J --> K[Tampilkan Hasil Detil di ResultActivity]
SafeLink menggunakan arsitektur modern berorientasi performa tinggi untuk mencegah Application Not Responding (ANR):
- Retrofit 2 & OkHttp3: Networking asynchronous yang hemat memori, dilengkapi dengan Interceptor global untuk injeksi x-apikey secara aman.
- Double-Checked Locking Singleton: Inisialisasi API client yang thread-safe untuk menghemat siklus CPU.
- ExecutorService Thread Pool: Menghindari pemrosesan database dan API pada main thread.
- Lottie Animations: Animasi pemindaian menggunakan file JSON vektor berukuran sangat ringan namun memberikan pengalaman visual berkualitas tinggi.
- ThemeHelper & Dynamic Colors: Dukungan tema Gelap/Terang adaptif serta integrasi warna dinamis Material 3 (menyesuaikan warna wallpaper perangkat pada Android 12+).
Database SafeLink diamankan sepenuhnya menggunakan library SQLCipher dengan algoritma enkripsi AES-256. Keamanan riwayat pemindaian dan bookmark dijamin tidak dapat dibaca oleh aplikasi luar tanpa otentikasi kunci yang valid.
Seiring pengembangan, database mengalami pembaruan terstruktur melalui siklus hidup versi:
- Database Version 1 (v1): Pembuatan tabel
historyutama. - Database Version 2 (v2): Penambahan tabel
bookmarksuntuk menyimpan tautan favorit pengguna. - Database Version 3 (v3): Penambahan tabel
trusted_domainsuntuk menangani domain daftar putih. - Database Version 4 (v4): Penambahan tabel
blacklist_domainsuntuk memblokir cepat domain daftar hitam. - Database Version 5 (v5): Penambahan kolom
api_response_jsonpada tabelhistorydanbookmarksuntuk penyimpanan offline respon analitik VirusTotal secara penuh.
Menyimpan riwayat pemindaian URL pengguna.
| Nama Kolom | Tipe Data | Deskripsi |
|---|---|---|
id |
INTEGER PRIMARY KEY |
ID unik auto-increment |
url |
TEXT NOT NULL |
Tautan URL penuh yang dipindai |
status |
TEXT NOT NULL |
Status akhir pemindaian (misal: "Safe", "Malicious") |
risk_level |
TEXT |
Tingkat risiko (misal: "LOW", "HIGH") |
recommendation |
TEXT |
Rekomendasi tindakan pengguna |
scanned_at |
TEXT NOT NULL |
Cap waktu tanggal & waktu pemindaian |
api_response_json |
TEXT |
Cache respons mentah JSON dari API VirusTotal (Offline Mode) |
Menyimpan tautan yang ditandai atau difavoritkan pengguna.
| Nama Kolom | Tipe Data | Deskripsi |
|---|---|---|
id |
INTEGER PRIMARY KEY |
ID unik auto-increment |
url |
TEXT NOT NULL |
Tautan URL |
title |
TEXT |
Judul kustom bookmark |
category |
TEXT |
Kategori bookmark (misal: "Work", "Sosmed") |
notes |
TEXT |
Catatan tambahan pengguna |
favicon |
TEXT |
URL/Path dari ikon website (jika ada) |
status |
TEXT |
Status terakhir link |
scanned_at |
TEXT |
Tanggal pemindaian terakhir |
api_response_json |
TEXT |
Cache respons mentah JSON dari API VirusTotal (Offline Mode) |
Menyimpan pengecualian pemindaian lokal pengguna.
- Kolom:
id(INTEGER PRIMARY KEY),domain(TEXT NOT NULL UNIQUE),added_at(TEXT NOT NULL).
// Memastikan library SQLCipher dimuat sebelum database diakses
try {
net.sqlcipher.database.SQLiteDatabase.loadLibs(context);
} catch (Throwable t) {
Log.e("Database", "Gagal memuat library SQLCipher", t);
}
// Membuka database dengan kunci enkripsi rahasia
SQLiteDatabase db = this.getWritableDatabase("KUNCI_RAHASIA_AES256");Membatasi panggilan API yang mahal dengan melakukan deteksi cepat secara lokal terhadap pola penipuan:
public static int calculateHeuristicScore(String url) {
int penalty = 0;
if (url.startsWith("http://")) {
penalty += 20; // Penalti karena tidak menggunakan HTTPS
}
if (isShortener(url)) {
penalty += 15; // Penalti karena menggunakan shortener URL (potensi kamuflase)
}
if (containsSuspiciousKeywords(url)) {
penalty += 30; // Penalti kata kunci phishing (seperti: 'free-gift', 'login-update')
}
return Math.min(penalty, 100);
}SafeLink/
β
βββ app/
β βββ build.gradle # Konfigurasi dependensi & build buildConfigField
β βββ src/
β βββ main/
β β βββ AndroidManifest.xml
β β βββ java/com/example/safelink/
β β β βββ activities/ # Splash, Main, Result, SafeBrowser
β β β βββ adapters/ # HistoryAdapter, EngineResultAdapter
β β β βββ database/ # HistoryRepository, DatabaseHelper
β β β βββ fragments/ # HomeFragment, HistoryFragment, BookmarkFragment
β β β βββ models/ # ApiResponse, ScanResult, HistoryModel
β β β βββ network/ # ApiClient, ApiService, RetrofitInstance
β β β βββ utils/ # NetworkHelper, UrlHeuristicEngine, ThemeHelper
β β βββ res/
β β βββ layout/ # Layout XML (Premium Glassmorphism design)
β β βββ values/ # Colors, Strings (M3 Color Tokens)
β βββ test/ # JUnit local unit tests
- Android Studio Ladybug (2024.2.1) atau lebih baru.
- JDK 21 terpasang dan dikonfigurasi sebagai JDK Gradle di Android Studio.
- Smartphone fisik Android atau Emulator dengan Android 9.0 (API 28) atau lebih baru.
Agar pemindaian online berfungsi, Anda perlu mendaftarkan kunci API gratis Anda sendiri:
- Daftar akun gratis di VirusTotal.
- Masuk ke menu profil Anda dan salin API Key yang disediakan.
- Di komputer Anda, buka file
local.propertiespada direktori root SafeLink:# local.properties sdk.dir=C\:\\Users\\NamaUser\\AppData\\Local\\Android\\Sdk VIRUSTOTAL_API_KEY=MASUKKAN_API_KEY_VIRUSTOTAL_ANDA_DISINI
(Catatan: local.properties terdaftar di .gitignore secara default sehingga kunci API Anda tidak akan pernah bocor ke publik saat di-push ke GitHub).
Gunakan terminal untuk melakukan kompilasi proyek:
# Jalankan kompilasi debug apk (Output: app/build/outputs/apk/debug/SafeLink-debug.apk)
./gradlew assembleDebug
# Jalankan kompilasi release apk (Output: app/build/outputs/apk/release/SafeLink-release.apk)
./gradlew assembleReleaseAtau klik tombol Run langsung di Android Studio. Hasil file APK secara otomatis diberi nama SafeLink-debug.apk atau SafeLink-release.apk sesuai dengan tipe kompilasi yang dipilih.
Kami telah menyediakan suite pengujian lokal untuk menguji keakuratan deteksi heuristik dan formatting Base64:
# Jalankan unit tests
./gradlew testDebugUnitTestDibuat dengan penuh β€οΈ oleh ShinZeleo untuk Keamanan Digital yang Lebih Baik.
