r0capture.py 行号导览
📜 按行号区间逐段拆解
r0capture.py(576 行)。
行号区间索引
| 行号区间 | 内容 | 教学要点 |
|---|---|---|
| 1-13 | Apache 许可证 | 开源协议 |
| 15-25 | 模块 docstring | 工具用途说明 |
| 27-46 | 作者/简介 | r0capture 定位 |
| 48-63 | import 依赖 | 依赖库 |
| 65-95 | 可选 import 降级 | 平台兼容 |
| 95-123 | banner + show_banner | 彩色 banner |
| 126-128 | ssl_sessions 全局 | 模拟 TCP 序列号 |
| 131-512 | ssl_log 主函数 | 核心流程 |
| 147-240 | ↳ log_pcap 内嵌 | pcap 拼包 |
| 248-276 | ↳ frida17 桥接准备 | serve_bridge |
| 278-336 | ↳ on_message 内嵌 | 消息回调 |
| 338-394 | ↳ 设备连接 + pcap 全局头 | spawn/attach |
| 396-428 | ↳ 脚本加载 + bootstrap | 注入 |
| 430-498 | ↳ selftest 分支 | 自检 |
| 500-512 | ↳ 信号处理 + 阻塞 | 退出 |
| 515-576 | __main__ | CLI 入口 |
1-13:许可证
Apache 2.0 许可证头。原项目基于 Google 的 ssl_logger。
15-46:docstring 与简介
python
"""Decrypts and logs a process's SSL traffic.
Hooks the functions SSL_read() and SSL_write() ...
"""点明工具核心:hook SSL_read/SSL_write,记录解密后的 SSL 流量。__version__ = "2.0"。
简介部分(r0ysue 改写)强调:
- 仅限安卓 7~16
- 无视证书校验/绑定
- 通杀应用层全部协议与框架
48-95:依赖与降级
python
import frida
from loguru import logger可选 import 用 try/except 降级:
| 依赖 | 降级 |
|---|---|
win_inet_pton | Windows IP 转换,失败忽略 |
myhexdump as hexdump | 失败则 hexdump=None |
click | 失败则用 print 桩 |
这是「弱依赖」模式:核心库缺失不崩,降级处理。
95-123:banner
banner 字符串 + show_banner() 函数。详见 show_banner。
126-128:ssl_sessions 全局
python
ssl_sessions = {}key=ssl_session_id,value=(client_sent, server_sent)。详见 TCP 序列号。
131-512:ssl_log 主函数
整个核心。详见 ssl_log 与各内嵌函数文档。
147-240:log_pcap
手工拼 pcap 包。详见 log_pcap。
248-276:serve_bridge
frida 17 桥接服务。详见 serve_bridge。
278-336:on_message
消息总汇回调。详见 on_message。
338-394:设备连接 + pcap 全局头
python
# 三种设备连接
if isUsb: device = frida.get_usb_device()
elif host: device = manager.add_remote_device(host)
else: device = frida.get_local_device()
# spawn 或 attach
if isSpawn: spawn + sleep + attach + sleep + resume
else: attach
# pcap 全局头 24 字节
pcap_file = open(pcap, "wb", 0)
for writes in (magic, version, ...): write396-428:脚本加载
python
_FRIDA_SCRIPT = open("script.js").read()
script = session.create_script(_FRIDA17_BOOTSTRAP + "\n" + _FRIDA_SCRIPT)
script.on("message", on_message)
script.load()bootstrap 拼在 script.js 前。详见 frida17 bootstrap。
430-498:selftest 分支
--selftest 时注入独立 selftest script 发 HTTPS 验证。详见 selftest 脚本。
500-512:信号处理 + 阻塞
python
signal.signal(signal.SIGINT, stoplog)
signal.signal(signal.SIGTERM, stoplog)
sys.stdin.read()详见 stoplog。
515-576:main
CLI 解析 + 日志配置 + 调用 ssl_log。详见 main。