
Veto v2.3
Cliente Android de código abierto para VirusTotal. Escanea archivos, URLs y aplicaciones instaladas contra más de 70 motores antivirus. Visualiza informes detallados con hashes, clasificaciones de amenazas, coincidencias de YARA y comportamientos de sandbox. Sin seguimiento ni anuncios.
Veto
Un cliente de VirusTotal de código abierto para Android
Gratuito y de código abierto. Usa tu propia clave de API de VirusTotal para escanear archivos, enlaces y aplicaciones instaladas contra más de 70 motores, con una interfaz Material 3. Sin cuentas, sin rastreo, sin anuncios.
¿Qué es Veto?
Veto es un cliente de Android para VirusTotal. Envía un archivo, un enlace o una aplicación instalada para ver los resultados del análisis en tiempo real. La aplicación muestra un informe claro que va desde un único veredicto unificado hasta el conjunto completo de campos devueltos por el servicio.
El proyecto es gratuito y de código abierto, sin cuentas de usuario, sistemas de rastreo ni publicidad. Como los usuarios aportan su propia clave de API de VirusTotal, todos los análisis se ejecutan directamente bajo su cuenta personal sin pasar por servidores intermediarios de terceros.
Capturas de pantalla
![]() | ![]() | ![]() |
![]() | ![]() |
Conjunto de funciones
- Capacidad de análisis: Analiza aplicaciones instaladas, archivos locales o URL objetivo.
- Agregación multi-motor: Combina diagnósticos de más de 70 motores antivirus.
- Modos de informe duales: Modo rápido para resúmenes de verificación ágiles y modo detallado para inspección profunda.
- Explicaciones contextuales: Hay texto explicativo disponible para cada sección, con una opción para ocultar las explicaciones si se desea.
- Informes de alta fidelidad: Muestra hashes de archivos, clasificaciones de amenazas, historial, votos de la comunidad, comportamientos de sandbox, coincidencias YARA, internals de aplicaciones Android y todos los campos adicionales del payload de la API.
- Ejecución en segundo plano: Seguimiento del progreso de carga y análisis en tiempo real que persiste dentro de un servicio en segundo plano.
- Acceso sin conexión: Guarda los informes localmente para poder revisarlos más tarde, incluso sin conexión a internet.
- Avisos de límite de tasa: Muestra notificaciones claras cuando la clave de API local alcanza su límite de tasa.
- Temas: Soporte completo de Material 3 con colores dinámicos del sistema, compatible con temas claros y oscuros.
Detalles de implementación de la arquitectura principal
- Sincronización de estado: El
ScanManagercon ámbito de aplicación actúa como la fuente centralizada de verdad para todos los estados de análisis. Esto garantiza que la interfaz de usuario permanezca sincronizada tanto si la aplicación está activa en primer plano, suspendida en segundo plano o destruida por el sistema operativo. - Sondeo resiliente: La aplicación consulta el endpoint
/analyses/{id}con un límite de reloj de pared de seis minutos. Si se encuentra una respuesta de límite de tasa, el proceso espera en lugar de fallar. El informe se vuelve a obtener hasta que los resultados se completan, devolviendo un estado de fallo estructurado si se alcanza el límite de tiempo. - Ciclo de vida del proceso: Mientras que el
ScanStatereside dentro delScanManagerpara sobrevivir a la destrucción de la Activity,ScanServicemantiene el ciclo de vida del proceso durante las operaciones activas y gestiona las notificaciones en curso y de finalización. - Análisis de fidelidad completa: Los campos comunes se capturan mediante modelos tipados, mientras que el JSON completo de
attributessin procesar se conserva mediante un serializador personalizado. Esto permite que la vista de informe detallado muestre todos los campos devueltos, incluidos los nuevos campos que se añadan al payload de la API con el tiempo.
Pila tecnológica
| Capa | Tecnología | Rol en el proyecto |
|---|---|---|
| Lenguaje | Kotlin | Lenguaje de programación principal |
| Framework de UI | Jetpack Compose | Estructura de UI declarativa |
| Sistema de diseño | Material 3 | Estilo visual, colores dinámicos del sistema e iconos extendidos |
| Inyección de dependencias | Hilt | Gestión de dependencias |
| Red | Retrofit y OkHttp | Comunicación HTTP con la API de VirusTotal |
| Serialización | kotlinx.serialization | Análisis JSON seguro por tipos y conservación de atributos personalizados |
| Asincronía | Kotlin Coroutines | Programación asíncrona y procesamiento en segundo plano |
| Persistencia | Jetpack DataStore | Almacenamiento de configuración dinámica e informes de análisis guardados |
| Compatibilidad | SDK 30 a 36 | Compilado con JDK 17, minSdk 30, targetSdk 36 |
Estructura del proyecto
└── app/src/main/java/com/quantum_prof/vtscansuite/
├── data/ # Modelos, API remota e implementación del repositorio
├── domain/ # Interfaz del repositorio y casos de uso de negocio
├── di/ # Módulos de inyección de dependencias de Hilt
├── scan/ # ScanManager, ScanService y notificaciones del sistema
└── ui/ # Componentes de UI y capas de presentación
├── intro/ # Pantalla de inicio y configuración de la clave de API
├── dashboard/ # Centro de navegación: módulos de análisis de enlaces, archivos y aplicaciones
├── results/ # Visualizadores de informes rápidos y detallados
├── components/# Elementos y diseños de UI reutilizables
├── theme/ # Configuraciones de color, formas, tipografía y movimiento
└── util/ # Utilidades de retroalimentación háptica, gestos y enlaces profundos
- Los recursos de texto y activos de la ficha de la tienda están disponibles en
fastlane/metadata/android/en-US/. - Los SVG de maquetas editables se encuentran en
docs/store/svg/. - Las maquetas se pueden exportar a formato PNG mediante
docs/store/export.html.
Primeros pasos
Requisitos previos
- Android Studio (última versión estable)
- JDK 17
- Una clave de API de VirusTotal gratuita, que se puede obtener en: https://www.virustotal.com/gui/my-apikey
Compilar y ejecutar
Clona el repositorio y compila la versión de depuración usando la línea de comandos:
git clone https://github.com/ProfessorQuantumUniverse/VTScan.git
cd VTScan
./gradlew :app:assembleDebug
Alternativamente, abre el directorio raíz en Android Studio y selecciona la configuración de ejecución.
En el primer inicio, introduce tu clave de API de VirusTotal en la pantalla de configuración de introducción. La clave se almacena localmente en tu dispositivo, cifrada con una clave AES-256-GCM del Android Keystore, y se excluye de la copia de seguridad en la nube y de la transferencia entre dispositivos. Las claves de API gratuitas suelen estar sujetas a un límite de cuatro consultas por minuto.
Política de privacidad
La aplicación se comunica exclusivamente con la API de VirusTotal usando las credenciales que proporcionas. Los archivos subidos, las URL enviadas y los resultados dinámicos se envían directamente a los servidores de VirusTotal. La clave de API se almacena localmente en tu dispositivo, cifrada con una clave AES-256-GCM del Android Keystore, y se excluye de la copia de seguridad en la nube y de la transferencia entre dispositivos, por lo que nunca sale del dispositivo. El registro HTTP se limita a las compilaciones de depuración y redacta el encabezado de la clave. Veto no recopila datos de analítica y no contiene SDK de publicidad.
Licencia
Este proyecto está licenciado bajo los términos de la GNU General Public License v3.0.
Términos clave de GPLv3:
- Uso comercial: Permitido
- Modificación: Permitida
- Distribución: Permitida
- Divulgación del código fuente: Obligatoria al distribuir
- Misma licencia: El código modificado también debe usar GPLv3
- Responsabilidad y garantía: Ninguna proporcionada por los autores
Para más detalles, consulta el archivo LICENSE en este repositorio.




