mcpField
F
frida-ios-hooks

frida-ios-hooks

github.com/rudra-raviセキュリティ7104 回インストール25 週間前に更新
リポジトリ

frida-ios-hooks について

Objective-C、Swift、ネイティブコードで構築された iOS アプリを調査・計装する Frida スキルです。セキュリティ実務者向けに、ランタイム確認、フックの発見、証明書ピンニングやジェイルブレイク環境のトラブルシューティングを案内します。

主な機能

  1. 01Objective-C ランタイムフック
  2. 02Swift とネイティブシンボルの調査
  3. 03モジュールとクラスの列挙
  4. 04ネットワークピンニングの調査
  5. 05rootless ジェイルブレイクの設定メモ

活用シーン

  1. 01iOS アプリのネットワークリクエスト調査
  2. 02Swift またはネイティブ関数の特定
  3. 03証明書ピンニング経路の調査
  4. 04Frida のアタッチ問題の診断

インストール

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

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

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

同梱ファイルagents/openai.yamlreferences/ios-patterns.md

詳細

Frida iOS フック

iOS の Objective-C、Swift、またはネイティブの動作を計測する際に、このスキルを使用します。

セットアップの確認

frida --version
frida-ps -Uai
frida -U -f com.example.app -l agent.js --no-pause

ランタイムが利用可能であることを確認します。

console.log("ObjC.available =", ObjC.available);
console.log(Process.platform, Process.arch);

iOS アプリで ObjC.available が false の場合、スクリプトに問題があると判断する前に frida-troubleshooting を使用してください。

Objective-C のフックパターン

if (ObjC.available) {
  const cls = ObjC.classes.NSURLSession;
  const method = cls["- dataTaskWithRequest:completionHandler:"];
  Interceptor.attach(method.implementation, {
    onEnter(args) {
      const request = new ObjC.Object(args[2]);
      console.log("[NSURLSession]", request.URL().toString());
    }
  });
}

Swift とネイティブのルール

  • Swift のマングル名を推測する前に、モジュールとシンボルを列挙します。
  • 可能であれば、Objective-C から参照可能な Swift を ObjC クラス経由でフックします。
  • 純粋な Swift/ネイティブ関数については、シンボルを解決し、frida-native-hooks を使用します。
  • フックをアプリデリゲート、ネットワークスタック、または改ざん防止の初期化より前に実行する必要がある場合は、スポーンします。
  • 信頼性評価、暗号化、署名の生成、リクエストの構築については、結果を変更する前に観察フックを優先します。

実践パターン

  • 利用可能な場合は、デリゲート、URL ローディング、キーチェーン、ペーストボード、ファイル API、暗号化ラッパー、脱獄検出セレクターなど、Objective-C ランタイムのサーフェスから始めます。
  • Swift を多用するアプリでは、モジュール/シンボルの列挙と呼び出し元のスタックトレースを使用します。Swift が Objective-C に公開していない限り、セレクターが存在すると仮定しないでください。
  • ピンニングについては、Objective-C フレームワークとネイティブの Security/BoringSSL/CommonCrypto の両方の経路を確認します。アプリでは両方が混在していることがよくあります。
  • 発見には ObjC メソッドオブザーバーなどの CodeShare ツールを使用し、クラス名/メソッド名が判明したら、対象を絞ったフックに置き換えます。
  • rootless 脱獄環境では、セットアップの失敗とフックの不具合を混同しないよう、「ランタイムが利用可能」かどうかを確認する最小限のスクリプトを、実際のエージェントとは別に用意します。

検出用スニペット

if (ObjC.available) {
  for (const name of Object.keys(ObjC.classes).filter(n => n.includes("Trust"))) {
    console.log(name);
  }
}
for (const m of Process.enumerateModules()) {
  if (m.name.includes("Target")) console.log(m.name, m.base, m.path);
}

ピンニングと rootless に関する注意点

  • ピンニングが NSURLSession、SecTrustEvaluate*、サードパーティ製フレームワーク、ネイティブのカスタムコードのどこにあるかを特定します。
  • rootless 脱獄環境では、Frida パッケージのバージョンを揃え、正しいブートストラップパスを設定し、ツールを更新する必要がある場合があります。バージョンの不整合は、アタッチの失敗や ObjC ブリッジの欠落のように見えることがよくあります。
  • 通常のアタッチがブロックされていて、アプリの変更が許可されている場合は、Gadget を使用します。

参考資料

Objective-C、Swift のシンボル、SecTrust、モジュール、および rootless のトラブルシューティングパターンについては、references/ios-patterns.md を参照してください。

コメント