Skip to content

SSL_read(C 原型) ​

📥 OpenSSL/BoringSSL 的 SSL_read 函数原型与 r0capture hook 方式。

C 原型 ​

c
#include <openssl/ssl.h>

int SSL_read(SSL *ssl, void *buf, int num);

参数与返回值 ​

参数类型含义
sslSSL*SSL 连接对象
bufvoid*接收明文的缓冲区
numint最多读取的字节数

返回值:

  • > 0:实际读取的字节数,明文已写入 buf
  • <= 0:无数据或出错(需查 SSL_get_error)

r0capture 的 hook ​

javascript
Interceptor.attach(addresses["SSL_read"], {
  onEnter: function (args) {
    // args[0]=ssl, args[1]=buf, args[2]=num
    this.message = getPortsAndAddresses(SSL_get_fd(args[0]), true);
    this.message["ssl_session_id"] = getSslSessionId(args[0]);
    this.message["function"] = "SSL_read";
    this.message["stack"] = SSLstackread;
    this.buf = args[1];
  },
  onLeave: function (retval) {
    retval |= 0;
    if (retval <= 0) return;
    send(this.message, this.buf.readByteArray(retval));
  }
});

参数映射 ​

C 参数Frida含义
sslargs[0]用于取 fd 和 session_id
bufargs[1]onLeave 时从中读明文
numargs[2](未直接用,用 retval)
返回值retval实际读取字节数

为什么在 onLeave 读 ​

SSL_read 执行后才把明文写入 buf,且实际长度由 retval 决定。详见 SSL_read hook。

相关文档 ​

基于 VitePress 构建 · 教学用途