script.js 行号导览
📜 按行号区间逐段拆解
script.js(491 行)。
行号区间索引
| 行号区间 | 内容 | 教学要点 |
|---|---|---|
| 1-29 | 文件头注释 | 总体职责与三类 hook |
| 30 | "use strict" | 严格模式 |
| 32-45 | rpc.exports | setssllib RPC |
| 47-70 | 全局状态 | addresses/栈/libname |
| 72-105 | uuid | 随机串 |
| 107-115 | return_zero | 桩函数 |
| 117-184 | initializeGlobals | 符号解析 |
| 186-209 | ipToNumber | IP 转 uint32 |
| 211-246 | getPortsAndAddresses | 地址端口查询 |
| 248-269 | getSslSessionId | 会话 ID |
| 271-296 | SSL_read hook | 抓响应明文 |
| 298-317 | SSL_write hook | 抓请求明文 |
| 319-329 | Java 块守卫 | Java.perform |
| 331-352 | storeP12 | 证书打包 |
| 354-386 | 客户端证书导出 hook | getPrivateKey/getCertificateChain |
| 388-406 | SSL Pinning 定位 hook | File.$init |
| 408-455 | 裸 TCP hook | socketWrite0/socketRead0 |
| 457-487 | Conscrypt 调用栈 hook | 版本分支 |
1-29:文件头
详细注释了:
- 总体职责(hook 三类函数,回传明文)
- 三类 hook(Native SSL / Java Socket / Java KeyStore)
- 回传消息结构(function/ssl_session_id/五元组/stack)
- data 长度==1 的事件约定
30-45:严格模式与 RPC
javascript
"use strict";
rpc.exports = {
setssllib: function (name) { libname = name; initializeGlobals(); }
};详见 setssllib RPC。
47-70:全局状态
javascript
var addresses = {}; // Native 函数地址
var SSL_get_fd = null; // NativeFunction 包装
var SSLstackwrite = null; // SSL 发时的 Java 栈
var SSLstackread = null; // SSL 收时的 Java 栈
var libname = "*libssl*"; // 默认 SSL 库通配符72-105:uuid
详见 uuid。
107-115:return_zero
详见 return_zero。
117-184:initializeGlobals
关键行:
- 124-130:两组符号(SSL 组 + libc 组)
- 138-146:零匹配处理(SSL_get_fd 允许缺)
- 147-163:多匹配优先选 conscrypt
- 171-181:构造 NativeFunction
186-209:ipToNumber
详见 ipToNumber。
关键行 207:num = num >>> 0 保证无符号。
211-246:getPortsAndAddresses
关键行 229:方向异或逻辑 (src_dst[i] == "src") ^ isRead。
248-269:getSslSessionId
详见 getSslSessionId。
关键行 254-256:SSL_get_session → SSL_SESSION_get_id。
271-296:SSL_read hook
详见 SSL_read hook。
关键行:
- 281-285:onEnter 记录上下文
- 288-294:onLeave 读明文 send
298-317:SSL_write hook
详见 SSL_write hook。
关键行 313:onEnter 直接 send(明文现成)。
319-329:Java 块守卫
javascript
if (typeof Java !== 'undefined' && Java.available) {
Java.perform(function () { ... });
}frida 17 下靠 bootstrap 让 typeof Java 为真。详见 Java.perform。
331-352:storeP12
详见 storeP12。
354-386:客户端证书导出 hook
详见 客户端证书导出 hook。
关键行 364:导出路径 + uuid 随机串。
388-406:SSL Pinning 定位 hook
关键行 398:双条件过滤(cacert + checkServerTrusted)。
408-455:裸 TCP hook
详见 socketWrite0 与 socketRead0。
关键行 426-428:Java byte[] → Native 内存拷贝。
457-487:Conscrypt 调用栈 hook
关键行 463:按 Java.androidVersion > 8 分支。