Frida Thread API
🧵 Frida 的线程操作 API,r0capture 用于多线程环境取堆栈。
是什么
Thread / Process.enumerateThreads() 提供线程信息,配合 Log.getStackTraceString 可定位调用方。
r0capture 的潜在用法
javascript
// 列出当前线程
Process.enumerateThreads().forEach(function(t) {
console.log(t.id, t.state);
});配合堆栈定位
r0capture 在 hook 触发时打印调用栈,看是谁调的 SSL_write:
javascript
onEnter: function (args) {
var Throwable = Java.use("java.lang.Throwable");
console.log(Log.getStackTraceString(Throwable.$new()));
}堆栈里能看到线程的调用路径,间接反映线程归属(OkHttp 线程池?业务线程?)。
Thread.backtrace
Frida native 层也有 backtrace:
javascript
onEnter: function (args) {
console.log(Thread.backtrace(this.context, Backtracer.ACCURATE)
.map(DebugSymbol.fromAddress).join('\n'));
}打印 native 调用栈,定位是哪个 .so 调的 SSL_write。
多线程抓包注意
- 多线程并发调
SSL_write,各 hook 触发独立,this互不干扰 - 但
send到主机端是顺序的,主机端按到达顺序处理 - pcap 写入需线程安全(r0capture 主机端单线程处理 on_message,天然安全)