frida-tracing-discovery について
未知のAPI、クラス、シンボル、呼び出し経路を調べるためのFridaスキルです。広い境界のトレースから対象を絞ったフックへ進む手順を、CLI、Android、ネイティブコードの例とともに示します。
主な機能
- 01広範なトレースから段階的に絞り込み
- 02CLIトレース例
- 03Androidのメソッドとクラスローダーの検出
- 04ネイティブライブラリのエクスポート列挙
- 05バックトレースによる呼び出し元の特定
活用シーン
- 01未知のAPI呼び出し経路の特定
- 02関連するAndroidクラスやメソッドの検出
- 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、クラス、シンボル、または呼び出し経路が不明な場合に、このスキルを使用します。
広く調べてから絞り込む
- Frida を使わずに、その動作が発生することを確認します。
- 最も有効な境界を選びます。ネットワーク、暗号、ファイル、IPC、WebView、クラスの読み込み、ネイティブライブラリの読み込み、または UI 操作が候補です。
- その境界の周辺をトレースまたは列挙します。
- スタックトレースを追加して、アプリ側の呼び出し元を特定します。
- 広範なプローブを、対象を絞ったフックに置き換えます。
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 を参照してください。
コメント
Markdown 対応