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_read | Native SSL_read | HTTPS 响应明文(服务端→本端) |
SSL_write | Native SSL_write | HTTPS 请求明文(本端→服务端) |
HTTP_send | Java SocketOutputStream.socketWrite0 | 裸 TCP 发送(非 SSL) |
HTTP_recv | Java SocketInputStream.socketRead0 | 裸 TCP 接收(非 SSL) |
dumpClinetCertificate=>路径 pwd: r0ysue | Java 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.writehook 时填入的全局变量HTTP_send/HTTP_recv直接现场抓栈- 可能为
null(非 Java 上下文触发)
方向约定
| function | src 是 | dst 是 |
|---|---|---|
SSL_write / HTTP_send | 本端 | 对端 |
SSL_read / HTTP_recv | 对端 | 本端 |