关于 frida-tracing-discovery
用于发现未知 API、类、符号和调用路径的 Frida 技能。它引导研究者从宽泛边界追踪逐步缩小到精确 Hook,并提供命令行、Android 和原生代码示例。
主要功能
- 01由宽泛追踪逐步缩小范围
- 02命令行追踪示例
- 03发现 Android 方法与类加载器
- 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 操作。
- 围绕该边界进行跟踪或枚举。
- 添加堆栈跟踪,以识别应用自身的调用方。
- 用范围更窄的 Hook 替换广泛探测。
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