
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
In alternativa, apri la directory principale in Android Studio e seleziona la configurazione di esecuzione.
Al primo avvio, inserisci la tua chiave API VirusTotal nella schermata di configurazione iniziale. La chiave viene archiviata localmente sul tuo dispositivo, crittografata con una chiave AES-256-GCM del Android Keystore, ed è esclusa dal backup cloud e dal trasferimento da dispositivo a dispositivo. Le chiavi API gratuite sono generalmente soggette a un limite di quattro ricerche al minuto.
Informativa sulla Privacy
L'applicazione comunica esclusivamente con l'API VirusTotal utilizzando le credenziali che fornisci. I file caricati, gli URL inviati e i risultati dinamici vengono inviati direttamente ai server di VirusTotal. La chiave API viene archiviata localmente sul tuo dispositivo, crittografata con una chiave AES-256-GCM del Android Keystore, ed è esclusa dal backup cloud e dal trasferimento da dispositivo a dispositivo, quindi non lascia mai il dispositivo. La registrazione HTTP è limitata alle build di debug e oscura l'intestazione della chiave. Veto non raccoglie dati analitici e non contiene SDK pubblicitari.
Licenza
Questo progetto è concesso in licenza secondo i termini della GNU General Public License v3.0.
Termini chiave della GPLv3:
- Uso commerciale: Consentito
- Modifica: Consentita
- Distribuzione: Consentita
- Divulgazione del codice sorgente: Richiesta in caso di distribuzione
- Stessa licenza: Il codice modificato deve utilizzare anch'esso la GPLv3
- Responsabilità e garanzia: Nessuna fornita dagli autori
Per maggiori dettagli, consulta il file LICENSE in questo repository.




