Memory API
🧠 Frida 的内存操作 API,r0capture 读写 Native 内存用。
r0capture 用到的 Memory API
| API | 用途 |
|---|---|
Memory.alloc(n) | 分配 n 字节 Native 内存 |
ptr.readByteArray(len) | 从指针读 len 字节为 ArrayBuffer |
ptr.readU8() | 读 1 字节无符号 |
ptr.writeU8(v) | 写 1 字节无符号 |
ptr.add(n) | 指针偏移 n 字节 |
用法示例
读 SSL hook 明文
javascript
// SSL_read onLeave: 从 buf 读 retval 字节明文
send(this.message, this.buf.readByteArray(retval));
// SSL_write onEnter: 从 args[1] 读 args[2] 字节明文
send(message, args[1].readByteArray(parseInt(args[2])));读会话 ID
javascript
var len = Memory.alloc(4); // 给 &len 分配 4 字节
var p = SSL_SESSION_get_id(session, len);
len = len.readU32(); // 读回长度
for (var i = 0; i < len; i++) {
session_id += ("0" + p.add(i).readU8()...).slice(-2); // 逐字节读
}Java byte[] → Native 内存
javascript
var ptr = Memory.alloc(byteCount);
for (var i = 0; i < byteCount; ++i)
ptr.add(i).writeU8(bytearry[offset + i] & 0xFF); // 逐字节写
send(message, ptr.readByteArray(byteCount));1 字节占位(事件通知)
javascript
var data = Memory.alloc(1);
send(message, Memory.readByteArray(data, 1)) // 1 字节占位证书导出/pinning 定位等事件用 1 字节 data,触发 Python 端事件分支。详见 message 字段。