Skip to content

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处理
0SSL_get_fd 允许缺(置0),其余抛异常
1直接用
>1优先选 com.android.conscrypt 的实现

多匹配的原因 ​

Android 上同时存在系统 libssl 与 Conscrypt 自带的 SSL 实现,同一符号名(如 SSL_read)在两个库里都有导出。ApiResolver 都枚举出来,r0capture 选 Conscrypt 的(App 流量实际走它)。

相关文档 ​

基于 VitePress 构建 · 教学用途