
Veto v2.3
Open-source Android client per VirusTotal. Scansiona file, URL e app installate con oltre 70 motori antivirus. Visualizza report dettagliati con hash, classificazioni delle minacce, corrispondenze YARA e comportamenti in sandbox. Nessun tracciamento o pubblicità.
Veto
Un client VirusTotal open source per Android
Gratuito e open source. Porta la tua chiave API VirusTotal per scansionare file, link e applicazioni installate con oltre 70 motori, realizzato con un'interfaccia Material 3. Nessun account, nessun tracciamento, nessuna pubblicità.
Cos'è Veto?
Veto è un client Android per VirusTotal. Invia un file, un link o un'applicazione installata per visualizzare i risultati dell'analisi in tempo reale. L'applicazione mostra un report chiaro che spazia da un verdetto unificato all'insieme completo dei campi restituiti dal servizio.
Il progetto è gratuito e open source, senza account utente, sistemi di tracciamento o pubblicità. Poiché gli utenti forniscono la propria chiave API VirusTotal, tutte le scansioni vengono eseguite direttamente sotto il loro account personale senza passare attraverso server intermedi di terze parti.
Screenshot
![]() |
![]() |
![]() |
![]() |
![]() |
Funzionalità
- Capacità di scansione: Scansiona app installate, file locali o URL di destinazione.
- Aggregazione multi-motore: Combina le diagnosi di oltre 70 motori antivirus.
- Doppia modalità di report: Modalità rapida per riepiloghi di verifica veloci e modalità dettagliata per un'ispezione approfondita.
- Spiegazioni contestuali: Testo esplicativo disponibile per ogni sezione, con un'impostazione per nascondere le spiegazioni se desiderato.
- Report ad alta fedeltà: Visualizza hash dei file, classificazioni delle minacce, cronologia, voti della community, comportamenti sandbox, corrispondenze YARA, dettagli interni delle applicazioni Android e tutti gli altri campi del payload API.
- Esecuzione in background: Tracciamento in tempo reale dei progressi di caricamento e analisi che persiste all'interno di un servizio in background.
- Accesso offline: Salva i report localmente per poterli consultare in un secondo momento, anche senza connessione internet.
- Avvisi sul limite di richieste: Mostra notifiche chiare quando la chiave API locale raggiunge il suo limite di richieste.
- Temi: Supporto completo di Material 3 con colori di sistema dinamici, sia per temi chiari che scuri.
Dettagli di implementazione dell'architettura principale
- Sincronizzazione dello stato: Lo
ScanManagercon ambito applicativo funge da fonte centralizzata di verità per tutti gli stati di scansione. Ciò garantisce che l'interfaccia utente rimanga sincronizzata sia che l'app sia attiva in primo piano, sospesa in background o distrutta dal sistema operativo. - Polling resiliente: L'app interroga l'endpoint
/analyses/{id}con un limite massimo di sei minuti di orologio a parete. Se viene riscontrata una risposta di limite di richieste, il processo attende invece di fallire. Il report viene recuperato nuovamente finché i risultati non vengono popolati, restituendo uno stato di errore strutturato se viene raggiunto il limite di tempo. - Ciclo di vita del processo: Mentre lo
ScanStaterisiede all'interno delloScanManagerper sopravvivere alla distruzione dell'Activity, loScanServicemantiene il ciclo di vita del processo durante le operazioni attive e gestisce le notifiche in corso e di completamento. - Parsing a fedeltà completa: I campi comuni vengono acquisiti utilizzando modelli tipizzati, mentre l'intero JSON
attributesgrezzo viene conservato tramite un serializzatore personalizzato. Ciò consente alla vista del report dettagliato di visualizzare tutti i campi restituiti, inclusi eventuali nuovi campi aggiunti al payload API nel tempo.
Stack Tecnologico
| Livello | Tecnologia | Ruolo nel Progetto |
|---|---|---|
| Linguaggio | Kotlin | Linguaggio di programmazione principale |
| Framework UI | Jetpack Compose | Struttura UI dichiarativa |
| Sistema di design | Material 3 | Stile visivo, colorazione dinamica di sistema e icone estese |
| Iniezione delle dipendenze | Hilt | Gestione delle dipendenze |
| Rete | Retrofit & OkHttp | Comunicazione HTTP con l'API VirusTotal |
| Serializzazione | kotlinx.serialization | Parsing JSON type-safe e conservazione degli attributi personalizzati |
| Asincronia | Kotlin Coroutines | Programmazione asincrona ed elaborazione in background |
| Persistenza | Jetpack DataStore | Archiviazione delle impostazioni dinamiche e dei report di scansione salvati |
| Compatibilità | SDK 30 fino a 36 | Compilato con JDK 17, minSdk 30, targetSdk 36 |
Struttura del Progetto
└── app/src/main/java/com/quantum_prof/vtscansuite/
├── data/ # Modelli, API remota e implementazione del repository
├── domain/ # Interfaccia del repository e casi d'uso aziendali
├── di/ # Moduli di iniezione delle dipendenze Hilt
├── scan/ # ScanManager, ScanService e notifiche di sistema
└── ui/ # Componenti UI e livelli di presentazione
├── intro/ # Schermata di avvio e configurazione della chiave API
├── dashboard/ # Hub di navigazione: moduli di scansione link, file e app
├── results/ # Visualizzatori di report rapidi e dettagliati
├── components/# Elementi UI e layout riutilizzabili
├── theme/ # Configurazioni di colori, forme, tipografia e movimento
└── util/ # Utility per feedback aptico, gesti e deep linking
- Le risorse e i testi per la scheda dello store sono disponibili in
fastlane/metadata/android/en-US/. - Gli SVG dei mockup modificabili si trovano in
docs/store/svg/. - I mockup possono essere esportati in formato PNG utilizzando
docs/store/export.html.
Per Iniziare
Prerequisiti
- Android Studio (ultima versione stabile)
- JDK 17
- Una chiave API VirusTotal gratuita, ottenibile all'indirizzo: https://www.virustotal.com/gui/my-apikey
Compilazione ed Esecuzione
Clona il repository e compila la build di debug utilizzando la riga di comando:
git clone https://github.com/ProfessorQuantumUniverse/VTScan.git
cd VTScan
./gradlew :app:assembleDebug




