
Veto v2.3
VirusTotal用のオープンソースAndroidクライアント。ファイル、URL、インストール済みアプリを70以上のアンチウイルスエンジンでスキャン。ハッシュ、脅威分類、YARAマッチ、サンドボックス動作を含む詳細レポートを表示。トラッキングや広告はありません。
Veto
Android向けオープンソースのVirusTotalクライアント
無料かつオープンソース。ご自身のVirusTotal APIキーを使用して、ファイル、リンク、インストール済みアプリを70以上のエンジンでスキャンできます。Material 3インターフェースで構築されています。アカウント不要、トラッキングなし、広告なし。
Vetoとは?
VetoはVirusTotalのAndroidクライアントです。ファイル、リンク、またはインストール済みアプリを送信して、リアルタイムの分析結果を表示します。このアプリは、単一の統合判定からサービスが返す全フィールドの完全なセットに至るまで、明確なレポートを表示します。
このプロジェクトは無料かつオープンソースであり、ユーザーアカウント、トラッキングシステム、広告は一切含まれていません。ユーザーが自身のVirusTotal APIキーを提供するため、すべてのスキャンは中間のサードパーティサーバーを経由せず、個人アカウントの下で直接実行されます。
スクリーンショット
![]() | ![]() | ![]() |
![]() | ![]() |
機能一覧
- スキャン機能: インストール済みアプリ、ローカルファイル、または対象URLをスキャンします。
- マルチエンジン集約: 70以上のアンチウイルスエンジンからの診断結果を統合します。
- デュアルレポートモード: 迅速な検証サマリー用のクイックモードと、詳細な検査用の詳細モード。
- 文脈に応じた説明: すべてのセクションで説明テキストを利用でき、必要に応じて説明を非表示にする設定も可能です。
- 高忠実度レポート: ファイルハッシュ、脅威分類、履歴、コミュニティ投票、サンドボックス動作、YARAマッチ、Androidアプリ内部情報、およびAPIペイロードの追加フィールドをすべて表示します。
- バックグラウンド実行: バックグラウンドサービス内で継続するリアルタイムのアップロードおよび分析進捗の追跡。
- オフラインアクセス: レポートをローカルに保存して、インターネット接続がない場合でも後で確認できます。
- レート制限警告: ローカルAPIキーがレート制限に達したときに明確な通知を表示します。
- テーマ設定: 動的なシステムカラーを備えた完全なMaterial 3サポート。ライトテーマとダークテーマの両方に対応。
コアアーキテクチャ実装の詳細
- 状態同期: アプリケーションスコープの
ScanManagerは、すべてのスキャン状態の一元管理ソースとして機能します。これにより、アプリがフォアグラウンドでアクティブな場合、バックグラウンドで一時停止されている場合、またはオペレーティングシステムによって破棄された場合でも、ユーザーインターフェースが同期された状態を維持します。 - 堅牢なポーリング: アプリは
/analyses/{id}エンドポイントを6分間のウォールクロック上限でポーリングします。レート制限応答が発生した場合は、失敗するのではなく待機します。結果が入力されるまでレポートを再取得し、タイムアウト制限に達した場合は構造化された失敗状態を返します。 - プロセスライフサイクル:
ScanStateはActivityの破棄後も存続するためにScanManager内に存在しますが、ScanServiceはアクティブな操作中にプロセスライフサイクルを維持し、進行中および完了の通知を管理します。 - 完全忠実度パース: 一般的なフィールドは型付きモデルを使用してキャプチャされ、完全な生の
attributesJSONはカスタムシリアライザーを介して保持されます。これにより、詳細レポートビューは、時間の経過とともに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形式にエクスポートできます。
はじめに
前提条件
- Android Studio(最新の安定版)
- JDK 17
- 無料のVirusTotal APIキー。以下で取得できます: https://www.virustotal.com/gui/my-apikey
ビルドと実行
リポジトリをクローンし、コマンドラインでデバッグビルドをコンパイルします:
git clone https://github.com/ProfessorQuantumUniverse/VTScan.git
cd VTScan
./gradlew :app:assembleDebug
または、Android Studioでルートディレクトリを開き、Run構成を選択します。
初回起動時に、イントロダクションのセットアップ画面でVirusTotal APIキーを入力します。キーはデバイス上にローカルに保存され、Android KeystoreのAES-256-GCMキーで暗号化され、クラウドバックアップおよびデバイス間転送から除外されます。無料のAPIキーは通常、1分あたり4回のルックアップに制限されています。
プライバシーポリシー
このアプリは、提供された認証情報を使用してVirusTotal APIとのみ通信します。アップロードされたファイル、送信されたURL、動的な結果は、VirusTotalのサーバーに直接送信されます。APIキーはデバイス上にローカルに保存され、Android KeystoreのAES-256-GCMキーで暗号化され、クラウドバックアップおよびデバイス間転送から除外されるため、デバイスから出ることはありません。HTTPロギングはデバッグビルドに限定され、キーヘッダーは編集されます。Vetoは分析データを収集せず、広告SDKも含まれていません。
ライセンス
このプロジェクトはGNU General Public License v3.0の条件の下でライセンスされています。
GPLv3の主な条件:
- 商用利用: 許可
- 改変: 許可
- 配布: 許可
- ソースコードの開示: 配布時に必須
- 同一ライセンス: 改変されたコードもGPLv3を使用する必要があります
- 責任と保証: 著者による提供はありません
詳細については、このリポジトリのLICENSEファイルを参照してください。




