profitpioneer/iphone-protocol-sniffer
GitHub: profitpioneer/iphone-protocol-sniffer
一款无需越狱和硬件嗅探器的iPhone通信协议抓包工具,通过rvictl和idevicebtlogger捕获解密后的BLE和WiFi流量,用于逆向工程IoT设备与iPhone之间的私有通信协议。
Stars: 0 | Forks: 0
# ios-protocol-capture
[](LICENSE)



## 工作原理 (无需越狱,无需硬件嗅探器)
```
iPhone (target app) ─USB─▶ rvictl ─▶ rvi0 (decrypted IP packets) ─▶ tcpdump ─▶ pcap
╲
─USB─▶ idevicebtlogger ─▶ pcap (decrypted HCI)
╲
─▶ tshark + decode_ptp_ip.py
─▶ Claude / your AI agent
─▶ protocol timeline + payload bytes
```
iOS 既是 BLE 链路层加密的端点,也是 WiFi WPA 关联的端点,因此它的内核能够看到明文。Apple 为 IP 提供了 `rvictl`,并与 Apple 共同维护了用于 HCI 的 `idevicebtlogger`(通过 libimobiledevice)—— 这两个工具都已经存在多年。本技能将它们打包成一个工作流,并添加了一个支持 Sony 的解码器。
## 是什么
想要弄清楚官方供应商应用是如何与你的相机 / 智能锁 / IoT 插座通信的,以便你能构建自己的客户端吗?你不需要价值 300 美元的 BLE 嗅探器,也不需要在 iPhone 上使用 Charles Proxy。iPhone 可以暴露:
- 通过 USB 借助 `idevicebtlogger` (libimobiledevice) 暴露其**完整的 Bluetooth HCI 流**——因为 iOS 是 BLE 端点,所以已经解密
- 通过 USB 借助 Apple 的 `rvictl` Remote Virtual Interface 暴露其**完整的 WiFi 数据包流**——因为 iOS 是 WPA 端点,所以已经解密
本技能将这些工具打包成一个包含 3 个脚本的工作流:
```
scripts/
├── capture-ble.sh # BLE-only
├── capture-wifi.sh # WiFi-only (rvictl + sudo tcpdump)
└── capture-both.sh # Time-aligned BLE + WiFi (most reverse engineering tasks)
```
…外加一个用于 **PTP-IP + Sony 私有操作码**的 Python 解码器(可扩展至其他协议),以及用于使用 `tshark` 分析 BLE GATT/SMP 和 WiFi 流程的参考文档。
## 为什么会有这个项目
在将 Sony A7 IV 相机集成到自定义 iOS 应用时,每一个标准的 PTP-IP 客户端都失败了:`OpenSession` 成功了,但随后一切都卡住了。通过抓取一个正常工作的第三方相机控制应用在线路上传输的数据,答案立刻浮出水面——Sony 相机在接受任何命令之前,需要一个私有的三步握手(`SonySDIOConnect 0x9201`,参数为 `(1,0,0)`、`(2,0,0)`、`(3,0,0)`)。你在 Sony 公开的 Camera Remote API 文档中找不到这一点,因为那是不同端口上的不同协议。相同的操作码集记录在 [libgphoto2 的 ptp.h](https://github.com/gphoto/libgphoto2/blob/master/camlibs/ptp2/ptp.h) 中,因此 `decode_ptp_ip.py` 中的字典是建立在先前公共逆向工程成果的基础上的,而不是对专有二进制文件的原创推导。
使用此技能进行此类发现只需 30 分钟,而使用硬件嗅探器或完全不使用嗅探器则需要数天时间。完整的 Sony A7 IV 协议分析详见 [docs/sony-a7m4-case-study.md](docs/sony-a7m4-case-study.md)(独立文章)。
## 安装
你需要一台 **macOS**,并且有一部 **iPhone 通过 USB 连接**(并已点击“信任此电脑”)。
```
# clone 到 Claude 的用户级 skills 目录
git clone https://github.com//iphone-protocol-sniffer ~/.claude/skills/ios-protocol-capture
# 验证 toolchain(为缺失项提供 brew 命令)
~/.claude/skills/ios-protocol-capture/scripts/check-tools.sh
```
验证器会检查 `libimobiledevice`(提供 `idevicebtlogger`)、`wireshark` CLI(提供 `tshark`)、Apple 的 `rvictl`(macOS 内置)以及 iPhone 连接。缺失的组件会得到一行 `brew install` 的安装提示。
## 快速开始 (在 Claude Code 中)
当你提到逆向工程 iOS↔设备通信时,该技能会自动触发。示例:
Claude 会阅读该技能,运行正确的捕获脚本,并指导你完成分析。
## 针对 AI 代理
本仓库也可作为 [Claude Code 技能](https://docs.claude.com/en/docs/claude-code/skills) 使用。仓库根目录下的 `SKILL.md` 是 Claude 读取的文件——它包含 Claude Code 所期望的 YAML frontmatter,以及为 LLM 代理而非人类读者构建的指令。将整个仓库放入 `~/.claude/skills/ios-protocol-capture/` 中,Claude 就会在相关提示时自动触发它。
如果你正在构建自己的代理(LangChain、自定义工具使用循环、OpenAI 函数调用等),其集成形式如下:
| 功能 | 工具 | 输入 | 输出 |
|------------|------|-------|--------|
| 捕获 BLE | `scripts/capture-ble.sh ` | 输出路径 | pcap 文件 |
| 捕获 WiFi | `scripts/capture-wifi.sh ` | 输出路径 | pcap 文件 (需要 sudo) |
| 同时捕获两者 (时间对齐) | `scripts/capture-both.sh ` | 前缀路径 | `_ble.pcap` + `_wifi.pcap` |
| 解码 PTP-IP 帧 | `python3 scripts/decode_ptp_ip.py` | 通过标准输入传入 tshark 的 `-T fields` 输出 | 每行一帧的文本 |
| 验证环境 | `scripts/check-tools.sh` | — | 准备就绪则 exit 0 |
解码器输出结构化文本(每行一个解码后的数据包),易于回馈到 LLM 上下文进行分析。将其包装在你代理的工具 schema 中——例如,将“捕获会话”作为一个工具公开,将“解码 pcap”作为另一个工具公开,然后让代理按顺序调用它们。
`references/` 中的参考文档(BLE / WiFi / tshark 方案 / 数据脱敏)的编写方式使得 LLM 在执行任务途中查阅时,无需阅读整个技能即可获得正确的下一步操作。将它们视为按需提供的上下文。
### 用于你自建代理的系统提示片段
如果你不在 Claude Code 上并且想让 LLM 驱动此工作流,请将以下内容粘贴到你的系统提示中:
```
You have access to ios-protocol-capture, a toolkit for analyzing iPhone↔device
traffic on macOS. Capture happens on the user's machine via these scripts (you
invoke, user has USB+sudo):
- capture-ble.sh BLE HCI capture (decrypted)
- capture-wifi.sh WiFi capture via rvi0 (decrypted)
- capture-both.sh both, time-aligned
- decode_ptp_ip.py pipe tshark output → annotated frames
Workflow: (1) scope what to capture from the user's question, (2) run the right
capture script, (3) wait for user to perform the action on iPhone, (4) parse
the pcap with tshark+decoder, (5) report a *timeline* (T+0.0s relative) with
hex payloads and decoded structure for non-trivial commands.
Never fabricate hex bytes or opcodes. Quote what's actually in the pcap.
Apply sanitization rules from references/sanitization.md before showing
captures to the user.
```
## 手动使用 (无 Claude)
```
# 在 iPhone 上执行操作的同时捕获 BLE 和 WiFi
./scripts/capture-both.sh /tmp/myapp_session
# … iPhone 执行操作,然后 Ctrl+C …
# 查看使用 Sony 私有 opcodes 解码的 PTP-IP 流量
tshark -r /tmp/myapp_session_wifi.pcap -Y "ptpip" \
-T fields -e frame.time_relative -e ip.src -e tcp.payload \
| python3 scripts/decode_ptp_ip.py
```
输出如下所示:
```
[137.504s →cam] [InitCmdReq] Name='ExampleApp' GUID=4186d4f7…
[137.522s →cam] [OpReq] Op=0x1002(OpenSession) Txn=1 params=['0x41']
[137.535s →cam] [OpReq] Op=0x9201(SonySDIOConnect) Txn=3 params=['0x1','0x0','0x0']
[137.544s →cam] [OpReq] Op=0x9201(SonySDIOConnect) Txn=4 params=['0x2','0x0','0x0']
[137.560s →cam] [OpReq] Op=0x9201(SonySDIOConnect) Txn=6 params=['0x3','0x0','0x0']
[142.174s →cam] [OpReq] Op=0x9207(SDIOControlDeviceB) Txn=14 (PropID 0xd2c1 = S1_Button)
```
## 仓库布局
```
.
├── SKILL.md Skill manifest (Claude reads this)
├── scripts/
│ ├── check-tools.sh Toolchain verifier
│ ├── capture-ble.sh BLE HCI capture
│ ├── capture-wifi.sh WiFi via rvi0 + tcpdump
│ ├── capture-both.sh Time-aligned BLE + WiFi
│ └── decode_ptp_ip.py PTP-IP + Sony opcode decoder
├── references/
│ ├── tools.md Per-tool reference (idevicebtlogger, rvictl, tshark…)
│ ├── tshark-recipes.md Common analysis filters
│ ├── ble-analysis.md GATT, ATT, SMP playbook
│ ├── wifi-analysis.md HTTP / PTP-IP / private-protocol playbook
│ └── sanitization.md How to strip secrets before sharing pcaps
├── evals/evals.json Test cases (used by Claude's skill-creator)
├── LICENSE
├── DISCLAIMER.md Legal / ethical use
└── README.md
```
## 这适用于哪些设备?
任何在你的 iPhone 上运行并与本地硬件通信的设备。已验证适用于:
- Sony 相机 (PTP-IP + 私有 0x92xx + 私有 60152 实时取景 HTTP)
应该也适用于,但尚未有贡献:
- Canon, Nikon 相机 (PTP-IP,类似的私有操作码)
- 智能锁 (仅限 BLE GATT;供应商包括 August, Yale, Schlage;载荷通常经过应用层加密)
- 智能家居 (Tuya, Mi, HomeKit 非安全设备)——通常为基于 HTTP 的 mDNS + JSON
- 健身秤 / 手环 (BLE GATT,有时使用 WiFi 进行固件 OTA)
- 运动相机 (GoPro WiFi 协议,DJI)
如果你使用此工具成功逆向了新协议,**欢迎提交 PR** 以扩展 `scripts/decode_ptp_ip.py` 和 `references/`。
## 支持范围
本技能严格运行在 iPhone 自身内核可见的**可观察线路流量**上,涵盖网络层、传输层和应用层。它不会、不曾、也不是设计用于:
- 绕过 Apple 的代码签名、应用授权或 Secure Enclave
- 从设备固件、应用二进制文件或系统钥匙串中提取密钥
- 破解使用你尚无权访问的密钥的应用层加密
- 规避保护受版权保护作品的技术措施 (DMCA §1201 / 同等法规)
从你合法观察到的数据包中逆向工程协议的**结构**通常是受保护的研究活动。从你不拥有的设备或应用中提取**机密**则不是,这也不是本工具的目的。
## 局限性
- **仅限 macOS**(libimobiledevice + rvictl 仅限 macOS)。
- **无法解密应用层加密。** 如果智能锁使用首次配对时建立的设备专属密钥对其载荷进行 AES 封装,BLE 捕获将无法揭示明文——你还需要提取密钥(反编译 / Frida / 运行时 hooking,这超出了本技能的范围)。
- **无法以明文形式捕获 iPhone↔云端的 TLS 流量。** 访问互联网 API 的应用使用 HTTPS;SNI 是明文的,但请求体不是。为此,请设置 `mitmproxy` 并让 iPhone 信任你的 CA——这是一个独立的工作流。
- rvi0 上的 **WPA3 SAE 握手**——捕获的数据包已在内核级别解密,因此这行得通,但非常新的 iOS / WiFi 协议栈更改可能会影响它。如果 rvi0 在新的 iOS 版本上停止生成解密输出,请提交 issue。
## 贡献
欢迎提交 PR 以:
- 添加额外的协议解码器 (Canon, Nikon, GoPro, 运动相机)
- 在 `references/` 中添加新的设备类操作手册
- 修复使用期间发现的 macOS / Apple Silicon 边缘情况
- 翻译(本 README、免责声明)为其他语言
请**不要**贡献特定于设备的解密密钥、仅限越狱的技术,或任何会将此项目从“观察线路流量”变为“从设备固件中提取机密”的内容。
## 致谢
- [libimobiledevice](https://libimobiledevice.org) — `idevicebtlogger` 及相关工具
- Apple — `rvictl` (自 2010 年代起用于 iOS 开发的 Remote Virtual Interface)
- [Wireshark](https://www.wireshark.org) — pcap 分析
- Sony / PTP-IP 逆向工程社区 ([gphoto2](https://github.com/gphoto/libgphoto2)、[libsony-ptp](https://github.com/Bloodevil/sony_camera_api)、多个论坛) 提供了为操作码字典提供参考的先前成果
## 商标
iPhone、iOS 和 Apple 是 Apple Inc. 的商标。Sony 和 Alpha 是 Sony Corporation 的商标。本项目与这些公司没有任何关联、认可或赞助关系。提及它们的产品属于指示性使用,旨在描述本工具有助于分析的对象,并不声称存在任何商业关系。提及的其他产品名称可能是其各自所有者的商标。
## 许可证
[MIT](LICENSE) — 随意使用,只要不起诉维护者即可。
标签:BLE, Cutter, HCI, iOS, IoT, libimobiledevice, pcap, PTP-IP, rvictl, tshark, USB通信, WiFi抓包, 免越狱, 协议逆向, 数据包解密, 智能相机, 物联网, 目录枚举, 硬件嗅探, 移动安全, 索尼协议, 网络安全, 网络流量分析, 蓝牙抓包, 逆向工具, 防御绕过, 隐私保护