Skip to content

ssl_log() 主函数 ​

🧭 r0capture.py 的核心,串联「连接设备 → 注入脚本 → 接收消息 → 写 pcap」全流程。

📎 源码在线查看:r0capture.py#L131-L512(ssl_log)

签名 ​

python
def ssl_log(process, pcap=None, host=False, verbose=False, isUsb=False,
            ssllib="", isSpawn=True, wait=0, selftest=False):
参数来源含义
process位置参数进程名或 PID
pcap-ppcap 输出路径
host-H远程 frida-server 地址
verbose-v详细输出
isUsb-UUSB 连接
ssllib-sslSSL 库通配符
isSpawn-fSpawn 模式
wait-w等待秒数
selftest--selftest自检模式

执行步骤 ​

步骤详解 ​

1. 定义内嵌函数 ​

log_pcap、serve_bridge、on_message 都作为 ssl_log 的内嵌函数定义,闭包捕获 pcap_file、ssl_sessions 等上下文,避免全局状态污染。

2. 选设备 ​

python
if isUsb:
    device = frida.get_usb_device()  # 失败退回 get_remote_device
elif host:
    device = manager.add_remote_device(host)
else:
    device = frida.get_local_device()

3. spawn 或 attach ​

python
if isSpawn:
    pid = device.spawn([process])
    time.sleep(1)
    session = device.attach(pid)
    time.sleep(1)
    device.resume(pid)
else:
    session = device.attach(process)

4-5. pcap 全局头 ​

python
if pcap:
    pcap_file = open(pcap, "wb", 0)  # 无缓冲
    for writes in (                # 逐字段写 24 字节全局头
        ("=I", 0xa1b2c3d4), ...    # magic
    ):
        pcap_file.write(struct.pack(writes[0], writes[1]))

6-8. 脚本加载 ​

python
_FRIDA_SCRIPT = open("script.js").read()
script = session.create_script(_FRIDA17_BOOTSTRAP + "\n" + _FRIDA_SCRIPT)
script.on("message", on_message)
script.load()

把 frida17 引导代码拼在 script.js 前面一起注入,保证 Java 桥接按需加载。

10. 阻塞等待 ​

python
signal.signal(signal.SIGINT, stoplog)
signal.signal(signal.SIGTERM, stoplog)
sys.stdin.read()   # 主线程阻塞,hook 事件由 frida 消息线程驱动

相关文档 ​

基于 VitePress 构建 · 教学用途