return_zero() 桩函数
🧱 一个永远返回 0 的桩函数,用于
SSL_get_fd缺失时的降级。
📎 源码在线查看:
script.js#L113-L122(return_zero)
实现
javascript
function return_zero(args) {
return 0;
}何时使用
个别 Android 版本 / 定制 ROM 会缺 SSL_get_fd 导出符号。initializeGlobals 遇到这种情况:
javascript
if (addresses["SSL_get_fd"] == 0) {
SSL_get_fd = return_zero; // 用桩代替 NativeFunction
} else {
SSL_get_fd = new NativeFunction(addresses["SSL_get_fd"], "int", ["pointer"]);
}用 return_zero 代替 NativeFunction,使得后续调用 SSL_get_fd(...) 永远返回 0。
返回 0 的连锁影响
SSL_read/SSL_write 的 onEnter 会调 SSL_get_fd(args[0]) 拿 fd,再传给 getPortsAndAddresses(fd, ...):
走 getPortsAndAddresses 里的「fd==0 → 地址置 0」降级分支。明文数据照抓不误,只是 pcap 里这个包的源/目的地址是 0.0.0.0:0,无法在 Wireshark 里按地址过滤,但仍能看到载荷内容。
设计意图
不让一个非关键符号的缺失(SSL_get_fd)导致整个脚本崩掉——降级为「能抓明文、地址无效」,比完全抓不到强。