Skip to content

Interceptor.attach 与 hook ​

🪝 Frida 下 hook 的核心 API,r0capture 用它拦截 SSL_read/SSL_write 等。

基本用法 ​

javascript
Interceptor.attach(targetAddress, {
  onEnter: function (args) {
    // 函数刚被调用时, args 是参数列表
  },
  onLeave: function (retval) {
    // 函数即将返回, retval 是返回值
  }
});

onEnter / onLeave ​

  • onEnter:函数入口,可读参数 args[i],可改参数
  • onLeave:函数出口,可读/改返回值 retval

r0capture 的两种用法 ​

SSL_read:onEnter 记录,onLeave 读取 ​

javascript
Interceptor.attach(addresses["SSL_read"], {
  onEnter: function (args) {
    this.message = getPortsAndAddresses(...);  // 记录上下文
    this.buf = args[1];                          // 保存 buf 指针
  },
  onLeave: function (retval) {
    if (retval > 0)
      send(this.message, this.buf.readByteArray(retval));  // 读明文
  }
});

明文在函数执行后才写入 buf,故 onLeave 才读。

SSL_write:onEnter 直接读 ​

javascript
Interceptor.attach(addresses["SSL_write"], {
  onEnter: function (args) {
    send(message, args[1].readByteArray(parseInt(args[2])));  // 现成明文
  },
  onLeave: function (retval) {}
});

待发明文在 args[1] 已现成,onEnter 直接读。

this 透传 ​

onEnter 里挂到 this 的属性,onLeave 能取到——用于在两个回调间传递数据(如 this.buf、this.message)。

相关文档 ​

基于 VitePress 构建 · 教学用途