返回更新列表
新发布Sep 7, 2026

Veto v2.3

VirusTotal 的开源 Android 客户端。扫描文件、URL 和已安装应用,使用 70 多个反病毒引擎。查看详细报告,包含哈希值、威胁分类、YARA 匹配和沙箱行为。无追踪或广告。

分享
Veto, the open source VirusTotal client

Veto

一款开源的 Android VirusTotal 客户端

免费且开源。自带 VirusTotal API 密钥,即可扫描文件、链接和已安装应用,覆盖超过 70 个引擎,采用 Material 3 界面构建。无需账户、无追踪、无广告。

Platform Kotlin Jetpack Compose minSdk

什么是 Veto?

Veto 是 VirusTotal 的 Android 客户端。提交文件、链接或已安装应用,即可查看实时分析结果。应用会显示清晰的报告,从单一综合判定到服务返回的完整字段集一应俱全。

该项目免费且开源,不包含任何用户账户、追踪系统或广告。由于用户自带 VirusTotal API 密钥,所有扫描均直接在其个人账户下运行,不会经过任何第三方中间服务器转发。


截图

Dashboard ScreenClean Results ScreenDetailed Report Screen
Settings ScreenSaved Scans Screen

功能特性

  • 扫描能力: 扫描已安装应用、本地文件或目标 URL。
  • 多引擎聚合: 整合超过 70 个杀毒引擎的诊断结果。
  • 双报告模式: 快速模式用于快速验证摘要,详细模式用于深度检查。
  • 上下文说明: 每个部分均提供说明文字,并可通过设置按需隐藏说明。
  • 高保真报告: 显示文件哈希、威胁分类、历史记录、社区投票、沙箱行为、YARA 规则匹配、Android 应用内部信息以及 API 返回的所有附加字段。
  • 后台执行: 实时上传与分析进度跟踪,可在后台服务中持续运行。
  • 离线访问: 报告本地保存,即使没有网络连接也可随时回顾。
  • 速率限制提醒: 当本地 API 密钥达到速率限制时,显示清晰的通知。
  • 主题支持: 完整支持 Material 3,支持动态系统颜色,同时适配浅色与深色主题。

核心架构实现细节

  • 状态同步: 应用作用域的 ScanManager 是所有扫描状态的集中数据源。这确保了无论应用处于前台活跃、后台挂起还是被操作系统销毁的状态,用户界面都能保持同步。
  • 弹性轮询: 应用以六分钟墙钟上限轮询 /analyses/{id} 端点。若遇到速率限制响应,进程会等待而非直接失败。报告会被反复重新获取,直到结果填充完毕;若达到超时上限,则返回结构化失败状态。
  • 进程生命周期: ScanState 驻留在 ScanManager 中以在 Activity 销毁后存活,而 ScanService 则在操作进行期间维持进程生命周期,并管理进行中及完成通知。
  • 全保真解析: 常见字段通过类型化模型捕获,而完整的原始 attributes JSON 则通过自定义序列化器保留。这使得详细报告视图能够渲染所有返回字段,包括 API 载荷中随时间新增的任何字段。

技术栈

层级技术项目中的作用
语言Kotlin主要编程语言
UI 框架Jetpack Compose声明式 UI 结构
设计系统Material 3视觉样式、动态系统配色及扩展图标
依赖注入Hilt依赖管理
网络通信Retrofit & OkHttp与 VirusTotal API 的 HTTP 通信
序列化kotlinx.serialization类型安全的 JSON 解析与自定义属性保留
异步处理Kotlin Coroutines异步编程与后台处理
持久化Jetpack DataStore动态设置存储与已保存的扫描报告
兼容性SDK 30 至 36使用 JDK 17 编译,minSdk 30,targetSdk 36

项目结构

└── app/src/main/java/com/quantum_prof/vtscansuite/
    ├── data/          # 模型、远程 API 与仓库实现
    ├── domain/        # 仓库接口与业务用例
    ├── di/            # Hilt 依赖注入模块
    ├── scan/          # ScanManager、ScanService 与系统通知
    └── ui/            # UI 组件与展示层
        ├── intro/     # 启动画面与 API 密钥配置
        ├── dashboard/ # 导航中心:链接、文件与应用扫描模块
        ├── results/   # 快速与详细报告可视化
        ├── components/# 可复用 UI 元素与布局
        ├── theme/     # 颜色、形状、字体与动效配置
        └── util/      # 触觉反馈、手势与深度链接工具
  • 商店列表素材与文本资源位于 fastlane/metadata/android/en-US/
  • 可编辑的 SVG 样机位于 docs/store/svg/
  • 样机可通过 docs/store/export.html 导出为 PNG 格式。

快速开始

前置条件

构建与运行

克隆仓库并使用命令行编译调试版本:

git clone https://github.com/ProfessorQuantumUniverse/VTScan.git
cd VTScan
./gradlew :app:assembleDebug

或者,在 Android Studio 中打开根目录并选择 Run 配置。

首次启动时,在引导设置界面输入你的 VirusTotal API 密钥。该密钥仅存储在你的设备本地,使用 Android Keystore 中的 AES-256-GCM 密钥加密,并排除在云备份和设备间传输之外。免费 API 密钥通常限制为每分钟四次查询。


隐私政策

该应用仅使用你提供的凭据与 VirusTotal API 通信。上传的文件、提交的 URL 及动态结果会直接发送至 VirusTotal 的服务器。API 密钥仅存储在你的设备本地,使用 Android Keystore 中的 AES-256-GCM 密钥加密,并排除在云备份和设备间传输之外,因此永远不会离开设备。HTTP 日志记录仅限于调试构建,并会对密钥头进行脱敏处理。Veto 不收集分析数据,也不包含任何广告 SDK。


许可证

本项目根据 GNU 通用公共许可证 v3.0 的条款进行许可。

GPLv3 关键条款:

  • 商业使用: 允许
  • 修改: 允许
  • 分发: 允许
  • 源代码公开: 分发时必须提供
  • 相同许可证: 修改后的代码也必须使用 GPLv3
  • 责任与担保: 作者不提供任何担保

更多详情,请参阅本仓库中的 LICENSE 文件。


由 VirusTotal API 提供支持。与 VirusTotal 无关联,亦未获其认可。

分类