Skip to content

r0capture.py 行号导览 ​

📜 按行号区间逐段拆解 r0capture.py(576 行)。

行号区间索引 ​

行号区间内容教学要点
1-13Apache 许可证开源协议
15-25模块 docstring工具用途说明
27-46作者/简介r0capture 定位
48-63import 依赖依赖库
65-95可选 import 降级平台兼容
95-123banner + show_banner彩色 banner
126-128ssl_sessions 全局模拟 TCP 序列号
131-512ssl_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_ptonWindows 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, ...): write

396-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。

相关文档 ​

基于 VitePress 构建 · 教学用途