# OpenDrop：Apple AirDrop 的开源重新实现

> 基于 SEEMOO 实验室逆向研究、用 Python 编写的 Apple AirDrop 协议命令行重新实现。它通过 _airdrop._tcp DNS-SD 发现接收方，经 HTTPS 发送二进制 plist 格式的 /Discover 和 /Ask 请求，并上传 gzip 压缩的 CPIO 归档，与 iOS 和 macOS 设备互传文件。它与 Apple 无关联。

- 类型：案例
- 目标：协议
- 类别：独立重建案例
- 关联：独立重建项目
- 来源复核于：2026-10-19
- 收录于：2026-10-30
- 原始资源：<https://github.com/seemoo-lab/opendrop>
- 一手来源：<https://github.com/seemoo-lab/opendrop/blob/11fe7ba7861093b302bc0637e8cb10adf2d29337/README.md>
- 目录页面：<https://awesomerea.org/zh/resources/opendrop-airdrop-reimplementation-case/>
- 记录 JSON：<https://awesomerea.org/resources/opendrop-airdrop-reimplementation-case/record.json>
- 英文版：[English](https://awesomerea.org/resources/opendrop-airdrop-reimplementation-case/index.md)

## 使用条件与局限

- README 称 OpenDrop 是 Open Wireless Link 逆向工程工作的实验性成果，缺少部分 AirDrop 功能，也可能与未来的 AirDrop 版本不兼容，并声明其与 Apple 无关联、未获 Apple 认可。最新发行版为 0.13.0（PyPI，2021-04-29）；所审阅的 master 提交（2026-08-17）此后只增加了引用文件并修改了链接。
- AirDrop 只运行在 Apple Wireless Direct Link（AWDL）上，因此 OpenDrop 支持 macOS，或运行 SEEMOO 的 OWL 等开源 AWDL 实现的 Linux；默认网络接口为 awdl0。需要 Python 3.6+（分类标签列出 3.6–3.9）、较新的 libarchive（macOS 上用 Homebrew 版本）、openssl 命令，以及 setup.py 所列软件包，包括 zeroconf 和 libarchive-c。
- 默认情况下，它会自行生成自签名密钥和证书。要向默认处于“仅限联系人”模式的接收方发送，需要来自使用者自己 Mac 的 AirDrop 密钥、证书和 Apple ID 验证记录，README 称这些由 SEEMOO 另一款提取工具获得；仓库只附带 Apple 公开的根 CA 证书。
- README 列出已知缺口：没有蓝牙低功耗触发，因此 Apple 接收方可能无法被发现；没有对端认证（既不校验 TLS 证书链，也不校验验证记录），并会自动接受所有传入文件；每次只能发送一个文件，链接只能发送而不能接收。CI 在 Python 3.6–3.9 上运行 black、flake8 和 pytest；其两项测试只是在回环接口上启动浏览器与服务器组件。
- 采用 GPL-3.0 许可。README 指向作者发表于 USENIX Security 2019 的 AWDL 论文和 2021 年的 PrivateDrop 论文以了解协议细节；AirDrop 和 AWDL 仍是 Apple 的协议。

## 一手来源

1. <https://github.com/seemoo-lab/opendrop/blob/11fe7ba7861093b302bc0637e8cb10adf2d29337/README.md>
2. <https://github.com/seemoo-lab/opendrop/blob/11fe7ba7861093b302bc0637e8cb10adf2d29337/setup.py>
3. <https://github.com/seemoo-lab/opendrop/blob/11fe7ba7861093b302bc0637e8cb10adf2d29337/opendrop/config.py>
4. <https://github.com/seemoo-lab/opendrop/blob/11fe7ba7861093b302bc0637e8cb10adf2d29337/opendrop/client.py>
5. <https://github.com/seemoo-lab/opendrop/blob/11fe7ba7861093b302bc0637e8cb10adf2d29337/opendrop/server.py>
6. <https://github.com/seemoo-lab/opendrop/blob/11fe7ba7861093b302bc0637e8cb10adf2d29337/.github/workflows/testpackage.yml>
7. <https://github.com/seemoo-lab/opendrop/blob/11fe7ba7861093b302bc0637e8cb10adf2d29337/tests/test_server.py>
8. <https://github.com/seemoo-lab/opendrop/blob/11fe7ba7861093b302bc0637e8cb10adf2d29337/CITATION.cff>
9. <https://github.com/seemoo-lab/opendrop/blob/11fe7ba7861093b302bc0637e8cb10adf2d29337/LICENSE>
10. <https://pypi.org/project/opendrop/0.13.0/>
11. <https://www.usenix.org/conference/usenixsecurity19/presentation/stute>

## 同分区更多条目：协议

- [bluefluff：逆向分析 Furby Connect 的蓝牙低功耗协议](https://awesomerea.org/zh/resources/bluefluff-furby-connect-ble-case/index.md) · 案例
- [pyatv：逆向工程实现的 Apple TV 与 AirPlay 协议客户端](https://awesomerea.org/zh/resources/pyatv-apple-tv-airplay-protocols-case/index.md) · 案例
- [BudsPro-Headtracking：通过 Samsung 串口协议获取 Galaxy Buds Pro 头部追踪数据](https://awesomerea.org/zh/resources/budspro-headtracking-case/index.md) · 案例
- [Even G2 协议：逆向分析 Even Realities G2 智能眼镜的 BLE 通信](https://awesomerea.org/zh/resources/even-g2-ble-protocol-case/index.md) · 案例
- [fuji-cam-wifi-tool：重建 Fujifilm X 系列相机 Wi-Fi 遥控协议](https://awesomerea.org/zh/resources/fuji-cam-wifi-tool-protocol-case/index.md) · 案例
- [Gymnasticon：将专有健身单车数据转为标准骑行传感器信号](https://awesomerea.org/zh/resources/gymnasticon-exercise-bike-bridge-case/index.md) · 案例

## 关于此条目

说明已依据一手来源复核。
原创说明采用 MIT 许可；外部项目、论文与素材保留各自的权利和许可。
