ApiResolver 符号解析
🔍 Frida 按通配符枚举模块导出符号的 API,r0capture 用来定位 SSL_read 等。
用法
javascript
var resolver = new ApiResolver("module");
var matches = resolver.enumerateMatches("exports:*libssl*!SSL_read");
// matches = [{ name: "libssl.so!SSL_read", address: 0x... }, ...]匹配串语法
exports:<库通配符>!<函数名>| 部分 | 说明 | 示例 |
|---|---|---|
exports: | 前缀,表示按导出符号查 | — |
| 库通配符 | 支持 * | *libssl*、*libc* |
| 函数名 | 精确名 | SSL_read |
r0capture 的使用
initializeGlobals 用它解析两组符号:
javascript
var resolver = new ApiResolver("module");
var exps = [
["*libssl*", ["SSL_read", "SSL_write", "SSL_get_fd", "SSL_get_session", "SSL_SESSION_get_id"]],
["*libc*", ["getpeername", "getsockname", "ntohs", "ntohl"]]
];对每个符号 enumerateMatches,按匹配数处理:
| matches.length | 处理 |
|---|---|
| 0 | SSL_get_fd 允许缺(置0),其余抛异常 |
| 1 | 直接用 |
| >1 | 优先选 com.android.conscrypt 的实现 |
多匹配的原因
Android 上同时存在系统 libssl 与 Conscrypt 自带的 SSL 实现,同一符号名(如 SSL_read)在两个库里都有导出。ApiResolver 都枚举出来,r0capture 选 Conscrypt 的(App 流量实际走它)。