
androidqf(Android Quick Forensics)は、Androidデバイスから迅速にフォレンジック証拠を収集し、侵害の痕跡を特定するのに役立ちます。
androidqf(Android Quick Forensics)は、Android端末から関連するフォレンジックデータの取得を簡素化するポータブルツールです。
androidqfは、Android端末からデータを迅速に取得するためのシンプルでポータブルなクロスプラットフォームユーティリティを提供することを目的としています。機能的にはmvt-androidに似ていますが、MVTとは異なり、androidqfは技術に詳しくないユーザーでも簡単に実行できるように設計されています。androidqfで抽出されたデータはMVTで分析できます。
このリポジトリは、Amnesty InternationalのSecurity Labがメンテナンスしているandroidqfのフォークです。androidqfツールは元々Claudio Guarnieriによって開発されました。

Linux、Windows、Mac用の実行可能バイナリは、最新のリリースで入手可能です。バイナリの実行に問題がある場合は、自分でビルドすることもできます。
このプロジェクトは、自動ビルドとリリースにGoReleaserを使用しています。ローカルでビルドするには:
GoReleaserをインストール:
go install github.com/goreleaser/goreleaser@latest
スナップショットビルドを実行(公開なし):
./build_locally.sh
これにより、dist/ディレクトリにすべてのプラットフォーム用のバイナリが作成されます。これには、IntelとApple Siliconの両方で動作するmacOS用のユニバーサルバイナリが含まれます。
従来のMakefileアプローチも引き続き使用できます。Go 1.23+ がインストールされている必要があり、さらに make、git、unzip、wget が必要です。AndroidQFには、ターゲットデバイスで実行され、フォレンジック関連情報をより確実に抽出するためにクロスコンパイルされた collector が含まれています。
まず collector モジュールをビルド:
make collector
次に、AndroidQFを選択したプラットフォーム用にコンパイル:
make linux
make darwin
make windows
これらのコマンドは、build/ フォルダにバイナリを生成します。
配布パッケージは、unbundle ビルドタグを使用してビルドすることで、バンドルされたADBおよびcollectorバイナリの埋め込みをオプトアウトできます:
go build -tags unbundle -o build/
このタグが有効な場合、androidqfは以下を期待します:
adb がシステムの PATH から利用可能であること。collector_arm や collector_arm64 など)で /usr/lib/androidqf/android-collector/ の下にインストールされていること。パッケージャーは、ビルド前に assets/ からバンドルされたバイナリアセットを削除してもかまいませんが、assets/ パッケージディレクトリとそのGoソースファイルは存在している必要があります。unbundle ビルドは依然として assets パッケージをインポートするため、assets/ ディレクトリ全体が削除されるとビルドは失敗します。
リリースコンテナイメージはGitHub Container Registryに公開されています:
docker pull ghcr.io/mvt-project/androidqf:latest
LinuxでUSB接続されたAndroidデバイスから収集するには、USBバスを通過させ、出力ディレクトリをマウントします:
docker run --rm -it --privileged \
-v /dev/bus/usb:/dev/bus/usb \
-v "$(pwd)/output:/output" \
ghcr.io/mvt-project/androidqf:latest -fast -output /output
リリースバージョン用にローカルでイメージをビルドすることもできます:
docker build --build-arg VERSION=1.8.3 -t androidqf .
[!TIP] アーカイブ形式、整合性ハッシュ、暗号化、大規模ファイルの処理については、収集アーカイブを参照してください。収集されたファイルの辞書については、サードパーティのSocialTIC AndroidQF出力ファイル辞書を参照してください。
androidqfを起動する前に、ターゲットのAndroidデバイスをUSB経由でコンピュータに接続し、USBデバッグを有効にしておく必要があります。これを行う方法については、公式ドキュメントを参照してください。ただし、メーカーによっては、デフォルトとは異なるナビゲーション手順が必要な場合があることに注意してください。
USBデバッグが有効になったら、androidqfを起動できます。最初にUSBブリッジ経由でデバイスへの接続を試みます。これにより、Android端末がホストキーの手動認証を求めるプロンプトを表示します。必ず認証してください。理想的には永続的に認証し、プロンプトが再表示されないようにしてください。
androidqfが実行され、現在の作業ディレクトリ、または -output で指定されたディレクトリに収集zipアーカイブが作成されます。実行中、androidqfがいくつかの選択肢をプロンプト表示します。これらのプロンプトは、選択が行われるまで収集を一時停止するため、注意してください。
以下のデータを抽出できます:
すべての収集には、acquisition.json、ログ出力が生成された場合は command.log、および hashes.csv も含まれます。ハッシュリストは、各先行プレーンテキストアーカイブエントリのSHA-256ダイジェストを記録し、それ自体は含みません。失敗したデバイスからのプルはアーカイブエントリとしてコミットされません。詳細は収集アーカイブを参照してください。
androidqf 収集を実行すると、以下のオプションが表示されます:
Would you like to take a backup of the device?
...
? Backup:
▸ Only SMS
Everything
No backup
これらのオプションは、バックグラウンドで adb backup コマンドを実行してデバイスから収集するデータを指します。No backup が選択された場合、adb backup コマンドは実行されません。
| オプション | 説明 |
|---|---|
| Only SMS | adb backup com.android.providers.telephony が実行されます。com.android.providers.telephony からのデータのみが収集されます。これにはSMSデータベースが含まれます。 |
Would you like to download copies of all apps or only non-system ones?
? Download:
▸ All
Only non-system packages
Do not download any
| オプション | 説明 |
|---|---|
| All | インストールされているすべてのパッケージが端末から取得されます |
| Only non-system packages | adb pm list packages -s にリストされているパッケージはダウンロードしません |
| Do not download any | パッケージをダウンロードしません |
Would you like to take the Intrusion Logs of the device?
? Intrusion Logs:
▸ Yes
No
| オプション | 説明 |
|---|---|
| Yes | 侵入ログが端末から取得されます。 |
| No | 侵入ログの収集はスキップされます。 |
androidqfの収集データを暗号化されていないドライブに持ち運ぶと、自分自身、さらにはデータを取得した相手を重大なリスクにさらす可能性があります。例えば、問題のある国境で止められ、androidqfドライブが押収される可能性があります。生データは旅行の目的を明らかにするだけでなく、非常に機密性の高いデータ(インストールされているアプリのリストやSMSメッセージなど)を含んでいる可能性があります。
理想的にはドライブを完全に暗号化するべきですが、それが常に可能とは限りません。VeraCryptコンテナ内にandroidqfを配置し、マウントするためのVeraCryptのコピーを一緒に持ち運ぶことも検討できます。ただし、VeraCryptコンテナは通常パスワードのみで保護されており、そのパスワードの提供を強制される可能性があります。
代替手段として、androidqfでは提供されたage公開鍵を使用して各収集を暗号化できます。できれば、この公開鍵はエンドユーザーが秘密鍵を所有していない、または少なくとも持ち歩いていないキーペアに属するものにします。これにより、エンドユーザーは強制下でも収集データを復号できなくなります。
androidqfは各収集をzipアーカイブにストリーム出力します。現在の作業ディレクトリに key.txt というファイルを置くと、androidqfはzipストリームをageで暗号化し、<UUID>.zip.age を書き込みます。そうでない場合は、暗号化されていない <UUID>.zip を書き込みます。androidqfは実行可能ファイルと同じフォルダの key.txt もチェックします。両方のファイルが存在する場合、現在の作業ディレクトリが優先されます。
暗号化された収集は平文の収集アーカイブを作成しません。暗号化アーカイブに追加される前に検証が必要なデバイスファイルは、認証付きChaCha20-Poly1305暗号化で一時的にステージングされます。完全なデータフローと大規模APKの動作については、収集アーカイブを参照してください。
暗号化された収集ファイルを取得したら、次のようにageで復号化できます:
$ age --decrypt -i ~/path/to/privatekey.txt -o <UUID>.zip <UUID>.zip.age
ただし、高度なフォレンジック技術により、少なくとも一部の暗号化されていないデータが復元される可能性が常にあることに留意してください。その対策に取り組んでいます。
androidqfの目的は、高度なモバイルスパイウェア攻撃の標的となる可能性のある人々、特に市民社会や疎外されたコミュニティのメンバーのデバイスの同意に基づくフォレンジック分析を容易にすることです。androidqfが同意しない個人のプライバシー侵害を助長することを望んでいません。したがって、このライセンスの目標は、敵対的フォレンジックの目的でのandroidqf(および同じライセンスのソフトウェア)の使用を禁止することです。
これを達成するために、androidqfはMozilla Public License v2.0を改変したMVT License 1.1の下でリリースされています。この修正ライセンスには、新しい条項3.0「Consensual Use Restriction」が含まれており、ライセンスされたソフトウェア(およびそれから派生した「Larger Work」)の使用を、データが抽出および/または分析される人物(「Data Owner」)の明示的な同意がある場合にのみ許可します。
| データ | オプション? | 出力パス |
|---|
| SMSおよびMMSメッセージの完全バックアップまたはバックアップ。 | ✅ | backup.ab |
| getpropシェルコマンドの出力。ビルド情報と設定パラメータを提供。 | getprop.txt | |
| すべてのシステム設定 | settings_*.txt | |
| psシェルコマンドの出力。実行中のすべてのプロセスのリストを提供。 | processes.txt | |
| システムサービスのリスト。 | services.txt | |
| システムからのすべてのログのコピー。 | logs/、logcat.txt | |
| dumpsysシェルコマンドの出力。デバイスに関する診断情報を提供。 | dumpsys.txt | |
| インストールされているすべてのパッケージと関連する配布ファイルのリスト。 | packages.json | |
| インストールされているすべてのAPK、またはシステムアプリとしてマークされていないもののみのコピー。 | ✅ | apks/* |
| 侵入ログのログ。ナビゲーション履歴などのプライベートデータを含む。 | ✅ | intrusion_logs/* |
| システム上のファイルのリスト。 | files.json | |
| 一時フォルダで利用可能なファイルのコピー。 | tmp/* | |
| システムおよびアプリ固有のログを含むバグレポート。プライベートデータは含まれません。 | bugreport.zip |
| Everything | adb backup -all が実行されます。この方法でデータのバックアップを明示的に許可したアプリのみのバックアップを要求します。Android 12以降では、この方法はほとんどのアプリに対して何も抽出しません。 |
| No backup | adb backup は実行されません |