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)。