mcpField
F
frida-tracing-discovery

frida-tracing-discovery

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

frida-tracing-discovery について

未知のAPI、クラス、シンボル、呼び出し経路を調べるためのFridaスキルです。広い境界のトレースから対象を絞ったフックへ進む手順を、CLI、Android、ネイティブコードの例とともに示します。

主な機能

  1. 01広範なトレースから段階的に絞り込み
  2. 02CLIトレース例
  3. 03Androidのメソッドとクラスローダーの検出
  4. 04ネイティブライブラリのエクスポート列挙
  5. 05バックトレースによる呼び出し元の特定

活用シーン

  1. 01未知のAPI呼び出し経路の特定
  2. 02関連するAndroidクラスやメソッドの検出
  3. 03ネイティブライブラリのエクスポートと呼び出し元の調査

インストール

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

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

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

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

詳細

Frida トレースによる探索

対象の API、クラス、シンボル、または呼び出し経路が不明な場合に、このスキルを使用します。

広く調べてから絞り込む

  1. Frida を使わずに、その動作が発生することを確認します。
  2. 最も有効な境界を選びます。ネットワーク、暗号、ファイル、IPC、WebView、クラスの読み込み、ネイティブライブラリの読み込み、または UI 操作が候補です。
  3. その境界の周辺をトレースまたは列挙します。
  4. スタックトレースを追加して、アプリ側の呼び出し元を特定します。
  5. 広範なプローブを、対象を絞ったフックに置き換えます。

CLI トレース

frida-trace -U -f com.example.app -j 'java.net.URL!*' --no-pause
frida-trace -U -f com.example.app -i 'open' -i 'connect' --no-pause
frida-trace -U -n target -m 'Module!*pattern*'

生成されたハンドラーは一時的な探索用成果物として扱い、実証できたロジックはレビュー済みのスクリプトに移します。

Android の探索

Java.perform(() => {
  const groups = Java.enumerateMethods("*crypto*!*/isu");
  console.log(JSON.stringify(groups, null, 2));
});

クラスローダーの確認:

Java.perform(() => {
  Java.enumerateClassLoaders({
    onMatch(loader) {
      try {
        Java.classFactory.loader = loader;
        Java.use("com.example.Target");
        console.log("loader", loader);
      } catch (_) {}
    },
    onComplete() {}
  });
});

ネイティブの探索

const mod = Process.getModuleByName("libtarget.so");
for (const e of mod.enumerateExports()) {
  if (e.name.includes("SSL") || e.name.includes("crypto")) console.log(e.name, e.address);
}

汎用的な境界でのバックトレース:

Interceptor.attach(Module.getGlobalExportByName("open"), {
  onEnter(args) {
    console.log(args[0].readUtf8String());
    console.log(Thread.backtrace(this.context, Backtracer.ACCURATE)
      .map(DebugSymbol.fromAddress).join("\n"));
  }
});

参考資料

対象に応じたトレース手順については、references/discovery-patterns.md を参照してください。

コメント