Case study
OpenDrop: an open reimplementation of Apple AirDrop
Python command-line reimplementation of Apple's AirDrop protocol from SEEMOO Lab's reverse-engineering research. It finds receivers via _airdrop._tcp DNS-SD, sends binary-plist /Discover and /Ask requests over HTTPS and uploads gzip-compressed CPIO archives to exchange files with iOS and macOS. It is not affiliated with Apple.
Requirements & limits
- README calls OpenDrop experimental output of the Open Wireless Link reverse-engineering effort that lacks some AirDrop features and may break with future AirDrop versions, and says Apple neither affiliates with nor endorses it. The latest release is 0.13.0 (PyPI, 2021-04-29); the reviewed master commit of 2026-08-17 adds only a citation file and link edits since.
- AirDrop runs only over Apple Wireless Direct Link, so OpenDrop is supported on macOS or on Linux with an open AWDL implementation such as SEEMOO's OWL; the default interface is awdl0. It needs Python 3.6+ (classifiers list 3.6–3.9), a current libarchive (Homebrew's on macOS), the openssl command and the packages in setup.py, including zeroconf and libarchive-c.
- By default it creates its own self-signed key and certificate. Receivers in the default contacts-only mode need AirDrop keys, a certificate and an Apple ID validation record from the user's own Mac, which README says come from a separate SEEMOO extractor; the repository ships only Apple's public root CA certificate.
- README lists known gaps: no Bluetooth Low Energy trigger, so Apple receivers may stay undiscovered; no peer authentication (neither TLS certificate chains nor validation records are checked) and automatic acceptance of every incoming file; and one file per transfer, with links sent but not received. CI runs black, flake8 and pytest on Python 3.6–3.9; its two tests only start the browser and server on loopback.
- GPL-3.0. README points to the authors' USENIX Security 2019 AWDL paper and 2021 PrivateDrop paper for protocol details; AirDrop and AWDL remain Apple's protocols.
About this entry
- Type
- Case study
- Category
- Independent reconstruction cases
- Relationship
- Independent reconstruction project
- Targets
- Protocol
Sources reviewed
The description was reviewed against primary sources. This does not establish runtime testing, security auditing or verified compatibility.
Primary sources
- README.md GitHub · seemoo-lab/opendrop · Revision 11fe7ba
- setup.py GitHub · seemoo-lab/opendrop · Revision 11fe7ba
- opendrop/config.py GitHub · seemoo-lab/opendrop · Revision 11fe7ba
- opendrop/client.py GitHub · seemoo-lab/opendrop · Revision 11fe7ba
- opendrop/server.py GitHub · seemoo-lab/opendrop · Revision 11fe7ba
- .github/workflows/testpackage.yml GitHub · seemoo-lab/opendrop · Revision 11fe7ba
- tests/test_server.py GitHub · seemoo-lab/opendrop · Revision 11fe7ba
- CITATION.cff GitHub · seemoo-lab/opendrop · Revision 11fe7ba
- LICENSE GitHub · seemoo-lab/opendrop · Revision 11fe7ba
- https://pypi.org/project/opendrop/0.13.0/
- https://www.usenix.org/conference/usenixsecurity19/presentation/stute
More in Protocols
- bluefluff: reverse engineering Furby Connect's Bluetooth LE protocol · Case study
- Wireshark · Tool
- Netzob · Tool
- Scapy · Tool
- Universal Radio Hacker (URH) · Tool
- SavvyCAN · Tool