mcpField
F
frida-troubleshooting

frida-troubleshooting

github.com/rudra-ravi開発7111 回インストール25 週間前に更新
リポジトリ

frida-troubleshooting について

Fridaの利用者向けに、Hookロジックを変更する前に環境、ランタイム、Hook、クラッシュの問題を切り分けるトラブルシューティングスキルです。Android、iOS、ネイティブ対象の診断手順を示します。

主な機能

  1. 01Frida障害の段階的な診断
  2. 02ホストとデバイスのバージョン確認
  3. 03AndroidとiOSのランタイム確認
  4. 04Hookとクラッシュの調査
  5. 05エラー手引きの参照

活用シーン

  1. 01発火しないHookの調査
  2. 02Hook導入後のクラッシュ診断
  3. 03デバイス接続やバージョン不一致の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/rudra-ravi/frida-skills --skill frida-troubleshooting

インストール後、Claude Code で/frida-troubleshootingを入力して読み込まれたか確認します。

同梱ファイルagents/openai.yamlreferences/error-playbook.md

詳細

Frida のトラブルシューティング

Frida 自体に問題がある可能性がある場合は、フックのロジックを変更する前にこのスキルを使用してください。

最初に収集する証拠

正確なコマンドと出力を収集します。

frida --version
frida-ls-devices
frida-ps -Uai

Android の場合:

adb devices
adb shell getprop ro.product.cpu.abi
adb shell /data/local/tmp/frida-server --version

iOS の場合:

frida-ps -Uai

診断の順序

  1. バージョンの不一致:ホスト側の frida-tools/Python パッケージと frida-server/Gadget。
  2. デバイスの接続:USB、リモート接続、エミュレーター、脱獄/root の状態、権限。
  3. モードの不一致:早い段階でコードを実行するには spawn が必要です。対象の読み込み後であれば attach で十分です。
  4. ランタイムの利用可否:Java.available、Java.perform()、ObjC.available。
  5. ローダー/モジュールのタイミング:クラス、シンボル、またはモジュールがまだ読み込まれていません。
  6. オーバーロード/シグネチャ/アドレスの誤り。
  7. アプリの保護機能またはアンチインストルメンテーションによる早期終了。

実践的なトリアージ

  • プラットフォームとランタイムの利用可否のみを記録する最小限のスクリプトで再現します。最小限のスクリプトが動作してから、実際のエージェントを読み込みます。
  • CodeShare や汎用バイパスが「部分的に動作する」場合は、バイパスを追加する前に、どのフックが実行され、どのエンドポイント/動作が変化したかを特定します。
  • ピンニングのバイパス後もトラフィックが表示されない場合は、プロキシの信頼ストア、証明書の透明性、ネイティブ TLS、HTTP/3/QUIC、代替エンドポイント、バックエンドのデバイス整合性チェック、HTTP 以外のプロトコルを確認します。
  • 難読化されたアプリでフックが実行されない場合は、名前が変更されたクラスを追うのではなく、データの境界とスタックトレースをフックします。
  • ログなしでアプリが終了する場合は、spawn モードを使ってネイティブのアンチインストルメンテーションと初期ライフサイクルのフックを調べます。

フックが実行されない場合

  • Frida を使わずに、そのコードパスが実行されることを確認します。
  • フックをインストールする前に、モジュール/クラスの読み込みを記録します。
  • Android では、オーバーロードとクラスローダーを列挙します。
  • iOS/Swift では、シンボル/モジュールを列挙し、まず Objective-C から見えるサーフェスをフックします。
  • ネイティブコードでは、シグネチャとアーキテクチャを確認してから、呼び出し元/呼び出し先の境界にアタッチします。

フック後にクラッシュする場合

  • 変更処理を取り除き、ログ記録のみを残します。
  • null ポインターと無効な ObjC/Java オブジェクトをチェックします。
  • コールバック内で値をコピーします。再利用される retval を保存しないでください。
  • ポインター引数を置き換える際は、文字列の有効期間を確認します。
  • 実行頻度が高すぎる、または再帰する広範なフックの対象を絞ります。

参考資料

一般的なエラー、考えられる原因、次に確認すべき項目については、references/error-playbook.md を参照してください。

コメント