Skip to content

message 字段参考 ​

📋 设备端 send(message, data) 中 message 对象的每个字段含义。

完整结构 ​

javascript
{
  function:       <string>,
  ssl_session_id: <string>,
  src_addr:       <uint32>,
  src_port:       <int>,
  dst_addr:       <uint32>,
  dst_port:       <int>,
  stack:          <string | null>
}

字段详解 ​

function ​

标识本次消息的类型。取值:

值来源 hook含义
SSL_readNative SSL_readHTTPS 响应明文(服务端→本端)
SSL_writeNative SSL_writeHTTPS 请求明文(本端→服务端)
HTTP_sendJava SocketOutputStream.socketWrite0裸 TCP 发送(非 SSL)
HTTP_recvJava SocketInputStream.socketRead0裸 TCP 接收(非 SSL)
dumpClinetCertificate=>路径 pwd: r0ysueJava KeyStore$PrivateKeyEntry.getPrivateKey/getCertificateChain客户端证书已导出(事件)
SSLpinning position locator => 路径 证书名Java File.$init命中证书绑定点(事件)

ssl_session_id ​

SSL 会话 ID 的十六进制大写字符串,由 getSslSessionId() 从 SSL_SESSION 取出。

  • 用于在 pcap 里把同一会话的多个包关联到同一条 TCP 流
  • 空字符串 "" 表示这是非 SSL 流量(HTTP_send/HTTP_recv)
  • 事件通知(证书导出/pinning)时该字段不出现

src_addr / dst_addr ​

源/目的 IP,uint32 网络字节序。设备端流程:

javascript
// JS 端:点分IP → 小端uint32 → ntohl → 大端uint32
ntohl(ipToNumber(sockAddr.ip.split(":").pop()))

Python 端反操作还原成可读 IP:

python
src_addr = socket.inet_ntop(socket.AF_INET, struct.pack(">I", p["src_addr"]))

src_port / dst_port ​

源/目的端口,int。设备端用 sockAddr.port & 0xFFFF 取低 16 位。

stack ​

Java 调用栈字符串,由 android.util.Log.getStackTraceString(new Throwable()) 生成。

  • SSL_read/SSL_write 的栈来自 Conscrypt 的 SSLInputStream.read/SSLOutputStream.write hook 时填入的全局变量
  • HTTP_send/HTTP_recv 直接现场抓栈
  • 可能为 null(非 Java 上下文触发)

方向约定 ​

functionsrc 是dst 是
SSL_write / HTTP_send本端对端
SSL_read / HTTP_recv对端本端

相关文档 ​

基于 VitePress 构建 · 教学用途