Clean ADBでAndroidの隠しデータとテレメトリを抽出する方法
フラっきとしたバグや不審な動作があるテストデバイスに触れる機会があると、標準のAndroid Studio Logcatウィンドウでは物足りないことがよくあります。素早くシステムスナップショットを取得したいですよね:どのアカウントがリンクされているか、スマートフォンが何度再起動されたか、バックグラウンドサービスでは何が実行されているか、バッテリー消費の内訳はどうか。
このような場合、多くの人はすぐにroot権限を求めたり、重いGUIユーティリティをダウンロードしたりします。実際、標準のAndroid Debug Bridge(ADB)なら、サードパーティ製ソフトウェアなしで大量のデータを取得できます。開発者のDouglas Fresh HabianによるAndroidForensicsプロジェクトは、これらのコマンドを1つのリファレンスガイドと2つの готовые Bashスクリプトにまとめ上げたものです。
リポジトリの中身
本質的に、このリポジトリはAndroidデバイスのフォレンジックと深い診断のためのチートシートおよび自動化スクリプトセットです。このプロジェクトはroot権限なしのデバイスでの作業を主眼に置いており、エンジ니어링ビルドでは一部のローレベルコマンドがより多くの情報を開示します。
リポジトリには2つのメイン実行ファイルが含まれています:
extract.sh— プライマリのトリアージおよびユーザーデータ収集スクリプト。システムプロパティ、ネットワーク設定、インストール済みパッケージリスト、アクティブサービスを取得し、コンテンツプロバイダの読み取りを試みます。dumpsys.sh— システムテレメトリコレクタ。このスクリプトはdumpsysユーティリティ経由で25以上の内部Androidサブシステムにクエリを実行し、ログを別々のテキストファイルに整理します。
実行するたびにタイムスタンプ付きの別フォルダが作成され、個々のコマンドの結果が整理されて保存されます。これによりターミナルが散らかることなく、特定時点でのシステム状態をすぐにキャプチャできます。
あなたのアーナナルに追加すべき便利なコマンド
READMEには基本的なgetprop呼び出しと、grep、sed、awkで出力をパースする自明でないワンライナーがどちらも含まれています。
アカウントとメールアドレスデータの収集
アカウントマネージャーを通じて、スマートフォンがどのサービスにリンクされているかをすぐに確認でき、登録されているすべてのメールアドレスを収集できます:
adb shell dumpsys account | grep -i com.*$ -o | cut -d' ' -f1 | cut -d} -f1 | grep -v com$
メールアドレスの検索には、システムダンプに対して直接正規表現を使用することを推奨しています:
adb shell dumpsys | grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b"
このコマンドは、共有テストベンチで前のテスターが仕事用のアカウントからログアウトし忘れたかを素早く確認する必要がある場合に便利です。
再起動カウンターとシステムタイムライン
バグがコールドスタート後にのみ再現されることがあり、ユーザーはスマートフォンを切ったことがないと言い張ることがあります。グローバル設定からこれを確認できます:
adb shell settings list global | grep "boot_count=" | cut -d= -f2 | head -n 1 | xargs echo "Booted:" | sed 's/$/ times/g'
また、時間の経過に伴うリソース消費とアプリアクティビティの全体像を理解する必要がある場合は、統計コマンドが活躍します:
adb shell dumpsys usagestats
adb shell dumpsys batterystats
adb shell settings list system
コンテンツプロバイダへのアクセス
連絡先、通話履歴、メッセージを取得するために、スクリプトはシステムURIに直接クエリを実行します:
# Список контактов и номеров телефонов
adb shell content query --uri content://contacts/phones/ --projection display_name:number
# Журнал звонков
adb shell content query --uri content://call_log/calls
# База входящих и исходящих SMS
adb shell content query --uri content://sms/
ここに重要な技術的制限があります。Android 11以降、Googleはセキュリティモデルを大幅に強化しました。新しいOSバージョンでは、特別な権限やrootなしでADBから直接content://sms/や連絡先にクエリを実行すると、アクセスエラーが発生します。ただし古いテストデバイス(Android 9〜10)やカスタム開発者ビルドでは、これらのコマンドは今後も正常に動作します。
自動化の詳細
手動でコマンドを実行するのが面倒になったら、スクリプトがルーティンを自動化します。始めるには、リポジトリをクローンして実行権限を付与するだけです:
git clone https://github.com/DouglasFreshHabian/AndroidForensics.git
cd AndroidForensics
chmod +x extract.sh dumpsys.sh
./extract.shが起動されると、スクリプトはまずインストール済みのadbをチェックし、接続されたデバイスにpingを実行してから、収集を開始します。
動作中、extract.shはいくつかの並列タスクを実行します:
ADB_Report_20251025_163200という名前のディレクトリを作成します。- デバイスのプロパティをクエリします(
ro.product.model、ro.build.version.release、ro.serialno)。 - システムログの最後の行を
adb logcat -dでスナップショット取得します。 - バックグラウンドでターミナルをブロックせずにフルレポートの生成を
adb bugreportで開始します。 - 完了すると、保存されたすべてのファイルのサイズを含むカラーサマリーのテーブルを出力します。
2番目のスクリプトであるdumpsys.shは、システムの診断に焦点を当てています。meminfo、wifi、power、location、sensorservice、netstats、以及其他15以上のサービスに順次クエリを実行し、各出力をwifi.txt、meminfo.txtなどに保存します。サービス利用不可の場合、スクリプトはクラッシュとしてマークして動作を継続します。
実務での活用場面
このプロジェクトにはいくつかの明白な応用分野があります:
- QAとモバイルアプリテスト。
dumpsys.shスクリプトは、メモリリークや電力消費に関する複雑なバグ報告を提出する前に、数秒で完全なデバイス状態のコンテキストを収集するのに役立ちます。 - 引渡しの前のデバイス監査。テストデバイスのプールがチーム内で循環している場合、クリーンアップと検証スクリプトをすばやく実行して、スマートフォンのりに他の人のアカウントや重いバックグラウンドプロセスが残っていないことを確認すると便利です。
- インシデントの初期トリアージ。セキュリティ担当者は、疑わしいAPKをインストールしたり、ファイルシステムに不必要な変更を加えることなく、スマートフォンのステートダンプをキャプチャする迅速な方法を得ます。
AndroidForensicsは、车輪の再発明をしようとしたり、Autopsyのような本格的なフォレンジックパッケージ置き換えようとしたりしません。リポジトリの強みは別のところにあります—標準のAndroidコマンドラインユーティリティを取り上げ、読みやすい形式にパッケージ化し、手動でbashパイプラインを書く時間を節約します。
Androidスマートフォンをデバッグ、テスト、セキュリティ分析のためにコンピュータに接続することがよくあるなら、これらのスクリプトをローカルツールキットに追加してください。数秒で起動し、GUIをざっと見ただけでは見落とすようなものを見つけてくれます。
関連プロジェクト