mcpField
F
frida-workflow

frida-workflow

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

frida-workflow について

Fridaによる計装を計画・実行するためのオーケストレーションスキルです。許可確認、環境の把握、アタッチまたはスポーンの選択、フック検証を扱い、作業を目的別のFridaスキルに振り分けます。

主な機能

  1. 01許可と対象範囲の確認
  2. 02Frida環境の把握
  3. 03アタッチ・スポーン・Gadgetの選択
  4. 04最小限のフックと動作検証
  5. 05目的別Fridaスキルへの振り分け

活用シーン

  1. 01計装セッションの計画
  2. 02対象に応じたFridaモードの選択
  3. 03フック検証と再現可能な実行記録

インストール

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

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

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

agents/
openai.yaml
references/
frida-sources.md
scripts/
frida-env-check.sh

詳細

Frida ワークフロー

Frida のインストルメンテーションを記述または実行する前に、オーケストレーションスキルとして使用してください。

運用ルール

  1. サードパーティ製ソフトウェアにインストルメンテーションを行う前に、許可と対象範囲を確認してください。
  2. 動作がバージョン、デバイスモード、Java ブリッジ、Gadget、CLI フラグに依存する場合は、最新の Frida ドキュメントを調べてください。
  3. Frida クライアント、サーバー、Gadget、OS、アーキテクチャ、パッケージ/バンドル/プロセス ID、アタッチ/スポーンモードを正確に記録してください。
  4. まず観察用フックから始め、対象と呼び出し形式が確認できてから変更に移ってください。
  5. フックは小さく、元に戻せるものにし、ログを残してください。広範なバイパススクリプトより、対象を絞ったクラス/関数フックを優先してください。

スキルの使い分け

  • ホスト、デバイス、バージョン、またはトランスポートの状態が不明な場合は、フック作業の前に frida-setup-checklist を使用してください。
  • frida、frida-ps、frida-ls-devices、frida-trace、frida-discover、frida-kill、frida-create のどれを使うか選ぶ際は、frida-tools-reference を使用してください。
  • クラス、シンボル、モジュール、メソッド、または呼び出し経路が不明な場合は、frida-tracing-discovery を使用してください。
  • TypeScript エージェント、再利用可能なスクリプトプロジェクト、RPC エクスポート、パッケージ化、複数スクリプトの構成には、frida-agent-builder を使用してください。
  • Interceptor、NativeFunction、メモリスキャン、エクスポート、インポート、シンボル、CModule、ホットなネイティブ処理経路には、frida-native-hooks を使用してください。
  • Java.perform、クラスローダー、オーバーロード、JNI、Android のピンニング分析、APK を使ったワークフローには、frida-android-hooks を使用してください。
  • ObjC、Swift/Objective-C メソッド、モジュール、iOS のピンニング分析、rootless 脱獄の制約には、frida-ios-hooks を使用してください。
  • Java、ObjC、Flutter、React Native、BoringSSL/OpenSSL、Conscrypt、OkHttp、SecTrust の各経路における TLS/SSL ピンニングの分析とバイパス作業には、frida-tls-pinning を使用してください。
  • Anti-Frida、root/脱獄、エミュレーター、デバッガー、ptrace、ポートスキャン、スレッド名、整合性チェックには、frida-anti-instrumentation を使用してください。
  • HTTP、ヘッダー、トークン、JSON、暗号処理の入出力、設定、ファイル、SQLite、メモリバッファーなど、実行時データの観察が目的の場合は、frida-data-extraction を使用してください。
  • CodeShare の検索、スクリプトの抽出、ソースの確認、公開スニペットのローカルエージェントまたは --codeshare コマンドへの変換には、frida-codeshare-search を使用してください。
  • 公開スクリプト、生成スクリプト、広範なスクリプト、ネイティブポインターを多用するスクリプト、または変更を多用するスクリプトを実行する前に、frida-script-review を使用してください。
  • アタッチ/スポーンに失敗する、フックが発火しない、対象がクラッシュする、ObjC/Java を利用できない、またはバージョンが一致しない場合は、frida-troubleshooting を使用してください。

ワークフロー

  1. 目的を定義する:観察または変更する動作、期待する証拠、ロールバック条件を明記してください。
  2. 環境を把握する:
    frida --version
    frida-ps -Uai
    frida-ls-devices
    
  3. モードを選択する:
    • アプリの初期化時にフックする場合は、スポーンを使用してください。
    • すでに実行中のプロセスには、アタッチを使用してください。
    • アタッチがブロックされている場合、root/脱獄の方法がない場合、またはアプリ内部からインストルメンテーションを読み込む必要がある場合は、Gadget を使用してください。
  4. フックの前に調査する:
    • ネイティブ:モジュール、エクスポート、インポート、シンボル、読み取り可能な文字列を列挙します。
    • Android:読み込まれたクラス/メソッドを列挙し、正しいクラスローダーを確認します。
    • iOS:ObjC.available を確認し、クラス/モジュールを列挙して、必要に応じて Swift シンボルを解決します。
  5. フックを最小限にする:エントリー、引数、戻り値、必要に応じてスレッド/バックトレースを記録し、その後対象を絞り込みます。
  6. 検証する:対象の動作でフックが発火すること、クラッシュしないこと、期待どおりのログが出ることを確認します。使用したコマンドとスクリプトのバージョンを保存してください。

実践者向けプレイブック

  • Frida CodeShare と公開スニペットを、偵察とパターンのライブラリとして活用します。実行する前にスクリプトを読み、アプリの実際のフレームワーク/バージョンに合致するフックだけをコピーします。
  • フックを段階的に追加します。まず高レベル API から始め、スタックトレース/呼び出し元をログに記録し、証拠が示す場合にのみ、フレームワーク、JNI/ネイティブ、暗号、TLS、システムコールの境界へと掘り下げます。
  • 対象の経路が判明したら、「万能バイパス」バンドルより、対象を絞ったスクリプトを優先します。幅広いバンドルは、可能性のある対象箇所の発見には役立ちますが、どのフックが実際に効果を発揮したのかが分かりにくくなります。
  • 難読化されたアプリでは、名前ではなくデータを追います。URL、ヘッダー、バイト配列、暗号処理の入力/出力、ファイルパス、リフレクション呼び出し、動的な DEX の読み込み、ネイティブライブラリの読み込みを追跡します。
  • すべての実験を再現可能な状態に保ちます。正確なコマンド、対象のバージョン、デバイス、Frida のバージョン、スクリプトのハッシュまたはファイル名、確認できた動作上の証拠を記録します。
  • 対象にインストルメンテーション対策がある場合、まず検出の原因が root/脱獄、Frida の痕跡、デバッガー/ptrace、エミュレーター/デバイスの識別情報、パッケージの整合性、タイミングのどれなのかを確認します。

Frida に関する最新の注意事項

  • Frida 17 では Java ランタイムブリッジが GumJS から分離されました。TypeScript/コンパイル済みエージェントで Java API をバンドルする場合、npm 依存関係として frida-java-bridge が必要になることがあります。
  • Frida ツールとリモートの frida-server/Gadget のバージョンを揃えます。バージョンの不一致は、アタッチやプロトコルの失敗のよくある原因です。
  • Interceptor.onLeave() の retval は再利用されるため、後で使うために保存しないでください。コールバック内で値を変換またはコピーします。
  • Memory.allocUtf8String()/UTF-16 ヘルパーで割り当てた文字列は、対象が使用する可能性がある間は存続させてください。

参考資料

最新のドキュメント、バージョン確認、出典の明記が必要な場合は、references/frida-sources.md を参照してください。

コメント