ProfessorQuantumUniverse/Veto

GitHub: ProfessorQuantumUniverse/Veto

Veto 是一款开源的 Android 端 VirusTotal 客户端,让用户在手机上使用自有 API Key 对文件、链接和应用进行多引擎安全扫描与分析。

Stars: 2 | Forks: 0

Veto, the open source VirusTotal client # 否决 ### 一个开源的 Android 版 VirusTotal 客户端 [![Platform](https://img.shields.io/badge/Platform-Android-3DDC84?style=flat-square&logo=android&logoColor=white)](https://developer.android.com) [![Kotlin](https://img.shields.io/badge/Kotlin-100%25-7F52FF?style=flat-square&logo=kotlin&logoColor=white)](https://kotlinlang.org) [![Jetpack Compose](https://img.shields.io/badge/UI-Jetpack%20Compose-4285F4?style=flat-square&logo=jetpackcompose&logoColor=white)](https://developer.android.com/jetpack/compose) [![minSdk](https://img.shields.io/badge/minSdk-30-4A50E0?style=flat-square)](https://developer.android.com/tools/releases/platforms)
## 什么是 Veto? Veto 是一个 Android 版的 VirusTotal 客户端。提交文件、链接或已安装的应用程序,即可查看实时分析结果。该应用会展示清晰的报告,范围涵盖从单一的统一判定结果到该服务返回的完整字段集。 本项目是免费且开源的,不包含任何用户账户、跟踪系统或广告。由于用户使用自己的 VirusTotal API key,所有扫描均直接在其个人账户下运行,而不会通过中间的第三方服务器进行路由。 ## 截图
Dashboard Screen Clean Results Screen Detailed Report Screen
Settings Screen Saved Scans Screen
## 功能特性 * **扫描能力:** 扫描已安装的应用程序、本地文件或目标 URL。 * **多引擎聚合:** 汇总来自 70 多种反病毒引擎的诊断结果。 * **双重报告模式:** 快速模式用于快速验证摘要,详细模式用于深入检查。 * **上下文说明:** 每个部分均提供说明文本,并支持设置在不需要时隐藏说明。 * **高保真报告:** 显示文件哈希、威胁分类、历史记录、社区投票、沙盒行为、YARA 匹配、Android 应用程序内部结构以及所有额外的 API payload 字段。 * **后台执行:** 实时上传并追踪分析进度,该追踪会在后台服务中持久保留。 * **离线访问:** 在本地保存报告,以便日后即使在没有网络连接的情况下也能进行审查。 * **速率限制警告:** 当本地 API key 达到速率限制时,会显示清晰的通知。 * **主题化:** 全面支持 Material 3 及动态系统配色,同时支持浅色和深色主题。 ### 核心架构实现细节 * **状态同步:** 应用作用域内的 `ScanManager` 作为所有扫描状态的集中单一事实来源。这确保了无论应用是在前台激活、在后台挂起,还是被操作系统销毁,用户界面都能保持同步。 * **弹性轮询:** 应用使用六分钟的实际时间上限来轮询 `/analyses/{id}` endpoint。如果遇到速率限制响应,该过程将等待而不是直接失败。系统会重新获取报告直到结果填充完毕,如果达到超时限制,则返回结构化的失败状态。 * **进程生命周期:** 虽然 `ScanState` 驻留在 `ScanManager` 中以在 Activity 销毁后保留状态,但在执行活动操作期间,`ScanService` 会维持进程生命周期,并管理进行中和完成的通知。 * **全保真解析:** 常见字段使用类型化模型进行捕获,而完整的原始 `attributes` JSON 则通过自定义序列化器保留。这使得“详细”报告视图能够渲染所有返回的字段,包括未来随着时间的推移添加到 API payload 中的任何新字段。 ## 技术栈 | 层级 | 技术 | 项目中的角色 | | :--- | :--- | :--- | | **语言** | 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/ # Models, remote API, and repository implementation ├── domain/ # Repository interface and business use cases ├── di/ # Hilt dependency injection modules ├── scan/ # ScanManager, ScanService, and system notifications └── ui/ # UI components and presentation layers ├── intro/ # Splash screen and API key configuration ├── dashboard/ # Navigation hub: link, file, and app scanning modules ├── results/ # Quick and Detailed report visualizers ├── components/# Reusable UI elements and layouts ├── theme/ # Color, shapes, typography, and motion configurations └── util/ # Haptic feedback, gestures, and deep linking utilities ``` * 应用商店上架素材和文本资源位于 `fastlane/metadata/android/en-US/`。 * 可编辑的模型 SVG 位于 `docs/store/svg/`。 * 可以使用 `docs/store/export.html` 将模型导出为 PNG 格式。 ## 入门指南 ### 前置条件 * Android Studio(最新稳定版本) * JDK 17 * 一个免费的 VirusTotal API key,可在此获取:https://www.virustotal.com/gui/my-apikey ### 构建与运行 克隆代码仓库并使用命令行编译 debug 版本: ``` git clone https://github.com/ProfessorQuantumUniverse/VTScan.git cd VTScan ./gradlew :app:assembleDebug ``` 或者,在 Android Studio 中打开根目录并选择 Run 配置。 首次启动时,请在引导设置界面输入您的 VirusTotal API key。该 key 将在本地存储在您的设备上。免费的 API key 通常受限于每分钟 4 次查询的限制。 ## 隐私政策 本应用程序仅使用您提供的凭据与 VirusTotal API 进行通信。上传的文件、提交的 URL 以及动态结果将直接发送至 VirusTotal 的服务器。API key 本地存储在您的设备上。Veto 不收集分析数据,也不包含任何广告 SDK。 ## 许可证 本项目根据 **GNU General Public License v3.0** 的条款进行授权。 ### GPLv3 的核心条款: * **商业用途:** 允许 * **修改:** 允许 * **分发:** 允许 * **源代码披露:** 分发时必须提供 * **相同许可证:** 修改后的代码也必须使用 GPLv3 * **责任与保证:** 作者不提供任何责任与保证 有关更多详细信息,请参阅本代码仓库中的 [LICENSE](LICENSE) 文件。
由 VirusTotal API 提供支持。未隶属于 VirusTotal,也未获得其认可。
标签:网页爬虫