workers-app-tester について
Workers App Tester は、root 化端末で Android アプリのセキュリティテストを行うスキルです。UI 操作、通信傍受、APK の静的解析、Frida による実行時解析を組み合わせます。
主な機能
- 01ADB によるアプリ UI 操作
- 02ネットワーク通信の取得と確認
- 03エンドポイントと脆弱性の分析
- 04APK の逆コンパイルと静的解析
- 05Frida による実行時解析
活用シーン
- 01Android アプリの認証フローをテスト
- 02API 通信の情報露出を調査
- 03APK のコンポーネントや埋め込みシークレットを確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ workersio/ skills --skill workers-app-testerインストール後、Claude Code で/workers-app-testerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/frida.mdtesting-methodology.mdreferences/agents/reverse-agent.mdscripts/analyze.pybypass.jscapture.pytraffic.pyui.py詳細
Workers App Tester
root 化されたデバイスを通じて Android アプリのペネトレーションテストを行います。デバイスの UI を操作し、ネットワークトラフィックを傍受し、Frida を使用してランタイム解析を行います。
詳細なガイドが必要な場合は、必要に応じて以下を読み込んでください。
- references/testing-methodology.md — IDOR、認証、情報漏えい、ローカルストレージ、ディープリンク、エクスポートされたコンポーネント、ログ記録
- references/frida.md — SSL バイパス、root バイパス、Codeshare スクリプト、フックのパターン、カスタム証明書
- agents/reverse-agent.md — APK 逆コンパイルのサブエージェント。エンドポイント、シークレット、コンポーネントを特定するため、コードベースを読み込みます
セッションのセットアップ
1. 対象を選択する
adb shell pm list packages -3
adb shell dumpsys activity activities | grep -m 1 -E 'topResumedActivity=|ResumedActivity:|mFocusedApp='
2. セッションディレクトリを作成する
SESSION_DIR=/tmp/workers-app-tester-$(date +%Y%m%d-%H%M%S)
mkdir -p "$SESSION_DIR"
3. トラフィックの傍受を開始する
認証ヘッダーがマスキングされず、完全な状態で記録されるように PRESERVE_AUTH=1 を設定します。
adb shell settings put global http_proxy 10.0.2.2:8080
ANDROID_APP_TESTER_OUT_DIR="$SESSION_DIR" \
ANDROID_APP_TESTER_PACKAGE="<package>" \
ANDROID_APP_TESTER_PRESERVE_AUTH=1 \
nohup mitmdump --set block_global=false --listen-host 0.0.0.0 --listen-port 8080 \
-s scripts/capture.py >"$SESSION_DIR/mitmdump.log" 2>&1 &
echo $! >"$SESSION_DIR/mitmdump.pid"
物理デバイスの場合は、10.0.2.2 をホストの IP アドレスに置き換えてください。
4. アプリを起動する
adb shell am force-stop <package> || true
adb shell monkey -p <package> -c android.intent.category.LAUNCHER 1
5. HTTPS トラフィックが表示されない場合
アプリは SSL ピンニングを使用しています。references/frida.md を参照してください。frida-server を起動してから、bypass.js を使ってアプリを起動します。
静的解析
パッケージ名とセッションディレクトリを指定して、reverse-agent に処理を依頼します。以下を実行します。
- デバイスから APK を取得する
- apktool で逆コンパイルする(マニフェスト、smali、リソース)
- ハードコードされたシークレット、API エンドポイント、セキュリティ上のアンチパターンを grep で検索する
- 興味深いファイルを読み込み、より詳しいコンテキストを確認する
返される内容:エクスポートされたコンポーネント、ディープリンクのスキーム、API エンドポイント、ハードコードされたシークレット、セキュリティ上の問題。
これらの調査結果を使って、The Loop で対象を絞ったテストを行います。
The Loop
1. 観察する
python3 scripts/ui.py
操作可能な要素を番号付きで簡潔に一覧表示します。
[1] "Sign In" btn @ (540,1200) bounds=[380,1150][700,1250] clickable
[2] "Email" input @ (540,400) bounds=[100,350][980,450] focusable
2. 操作する
1 サイクルにつき操作は 1 つです。要素 [1] をタップします。
adb shell input tap 540 1200
テキストフィールドの場合は、タップしてから入力します。
adb shell input tap 540 400
adb shell input text "[email protected]"
3. 傍受する
python3 scripts/traffic.py --input "$SESSION_DIR/traffic.jsonl" --since-seconds 15 --limit 10
ヘッダーと本文を含める場合:
python3 scripts/traffic.py --input "$SESSION_DIR/traffic.jsonl" --since-seconds 15 --show-headers --show-body
4. 次の手順を決めて繰り返す
セキュリティ解析
アプリの主要なフローを一通り実行した後、アナライザーを実行します。
python3 scripts/analyze.py --input "$SESSION_DIR/traffic.jsonl" --mode full
個別のモード:endpoints、idor、auth、exposure、headers。
各調査結果への対処方法については、references/testing-methodology.md を参照してください。
ADB リファレンス
| 操作 | コマンド |
|---|---|
| タップ | adb shell input tap <x> <y> |
| 入力 | adb shell input text "hello%sworld" (%s = スペース) |
| 下にスクロール | adb shell input swipe 540 1500 540 500 300 |
| 上にスクロール | adb shell input swipe 540 500 540 1500 300 |
| 戻る | adb shell input keyevent KEYCODE_BACK |
| ホーム | adb shell input keyevent KEYCODE_HOME |
| Enter | adb shell input keyevent KEYCODE_ENTER |
| 長押し | adb shell input swipe <x> <y> <x> <y> 1000 |
| アプリを起動 | adb shell monkey -p <pkg> -c android.intent.category.LAUNCHER 1 |
| 強制停止 | adb shell am force-stop <pkg> |
セッションの終了
kill "$(cat "$SESSION_DIR/mitmdump.pid")" 2>/dev/null || true
adb shell settings delete global http_proxy
adb shell "su -c 'pkill frida-server'" 2>/dev/null || true
ルール
- 1 サイクルにつき UI 操作は 1 つです。観察し、操作し、傍受してから、次の手順を決めてください。
- 操作する前に必ず
ui.pyを実行し、座標が現在の画面に合っていることを確認してください。 - 作業が終わったら、必ずセッションを終了してください。プロキシの設定は再起動後も維持されます。
- 調査結果を記録してください:エンドポイント、脆弱性の種類、再現手順、証拠。
- コマンドでは絶対に
sleepを使用しないでください。sleep 1、sleep 2、sleep && commandも禁止です。コマンドは直接実行してください。ui.pyが独自にタイミングを処理します。必要に応じて&&で連結してください。 - 迅速に作業してください。操作の間に不要な遅延を入れないでください。
同梱スクリプト
| スクリプト | 用途 |
|---|---|
scripts/ui.py | スマート UI パーサー。空間的な重複排除を行い、操作可能な要素に絞り込みます。 |
scripts/capture.py | mitmproxy アドオン。JSONL にログを記録します。認証ヘッダーを保持するには、PRESERVE_AUTH=1 を設定します。 |
scripts/traffic.py | トラフィックビューアー。--since-seconds、--show-headers、--show-body を使用できます。 |
scripts/analyze.py | セキュリティアナライザー。モードは endpoints、idor、auth、exposure、headers、full です。 |
scripts/bypass.js | SSL ピンニングのバイパス。TrustManagerImpl、OkHttp3、SSLContext、Conscrypt に対応します。 |