案例
OpenDrop:Apple AirDrop 的开源重新实现
基于 SEEMOO 实验室逆向研究、用 Python 编写的 Apple AirDrop 协议命令行重新实现。它通过 _airdrop._tcp DNS-SD 发现接收方,经 HTTPS 发送二进制 plist 格式的 /Discover 和 /Ask 请求,并上传 gzip 压缩的 CPIO 归档,与 iOS 和 macOS 设备互传文件。它与 Apple 无关联。
使用条件与局限
- 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 的协议。
关于此条目
- 类型
- 案例
- 类别
- 独立重建案例
- 关联
- 独立重建项目
- 目标
- 协议
来源复核于
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.md GitHub · seemoo-lab/opendrop · 修订 11fe7ba
- setup.py GitHub · seemoo-lab/opendrop · 修订 11fe7ba
- opendrop/config.py GitHub · seemoo-lab/opendrop · 修订 11fe7ba
- opendrop/client.py GitHub · seemoo-lab/opendrop · 修订 11fe7ba
- opendrop/server.py GitHub · seemoo-lab/opendrop · 修订 11fe7ba
- .github/workflows/testpackage.yml GitHub · seemoo-lab/opendrop · 修订 11fe7ba
- tests/test_server.py GitHub · seemoo-lab/opendrop · 修订 11fe7ba
- CITATION.cff GitHub · seemoo-lab/opendrop · 修订 11fe7ba
- LICENSE GitHub · seemoo-lab/opendrop · 修订 11fe7ba
- https://pypi.org/project/opendrop/0.13.0/
- https://www.usenix.org/conference/usenixsecurity19/presentation/stute