Skip to content

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,天然安全)

相关文档 ​

基于 VitePress 构建 · 教学用途