Skip to content

SSL_write(C 原型) ​

📤 OpenSSL/BoringSSL 的 SSL_write 函数原型与 r0capture hook 方式。

C 原型 ​

c
#include <openssl/ssl.h>

int SSL_write(SSL *ssl, const void *buf, int num);

参数与返回值 ​

参数类型含义
sslSSL*SSL 连接对象
bufconst void*待发送的明文缓冲区
numint要发送的字节数

返回值:

  • > 0:实际发送的字节数
  • <= 0:出错

r0capture 的 hook ​

javascript
Interceptor.attach(addresses["SSL_write"], {
  onEnter: function (args) {
    var message = getPortsAndAddresses(SSL_get_fd(args[0]), false);
    message["ssl_session_id"] = getSslSessionId(args[0]);
    message["function"] = "SSL_write";
    message["stack"] = SSLstackwrite;
    send(message, args[1].readByteArray(parseInt(args[2])));
  },
  onLeave: function (retval) {}
});

参数映射 ​

C 参数Frida含义
sslargs[0]取 fd 和 session_id
bufargs[1]待发明文,onEnter 直接读
numargs[2]读 parseInt(args[2]) 字节

为什么在 onEnter 读 ​

待发明文在 args[1] 已现成,无需等返回值。详见 SSL_write hook。

与 SSL_read 的差异 ​

维度SSL_readSSL_write
明文位置执行后写 bufargs[1] 现成
读时机onLeaveonEnter
长度来源retvalargs[2]
方向服务端→本端本端→服务端

相关文档 ​

基于 VitePress 构建 · 教学用途