OpenDrop:用Python实现的开源AirDrop方案

OpenDrop 是一个用 Python 编写的命令行工具,实现了苹果 AirDrop 协议,支持通过 Wi-Fi 与 iOS 和 macOS 设备共享文件。

什么是 OpenDrop?

OpenDrop 是一个开源的命令行工具,实现了苹果 AirDrop 协议,允许你通过 Wi-Fi 与运行 iOS 和 macOS 的苹果设备直接共享文件。它由达姆施塔特工业大学的 Seemoo Lab 开发,是对苹果专有 AirDrop 协议进行大量逆向工程的结果。

为什么 OpenDrop 很重要

AirDrop 对苹果用户来说是一个便捷的功能,但它被锁定在苹果生态系统内。OpenDrop 通过提供跨平台实现打破了这一壁垒,能够从苹果设备发送和接收文件。这对于开发者、研究人员以及任何需要在非苹果和苹果系统之间传输文件而不依赖云服务或第三方应用的人来说尤其有价值。

主要特性

  • 协议兼容性:OpenDrop 与苹果 AirDrop 协议兼容,意味着它可以与苹果设备直接通信。
  • 命令行界面:简单且可脚本化,非常适合自动化以及集成到工作流程中。
  • 文件和 URL 共享:支持向苹果设备发送文件和网页链接(URL)。
  • 接收方发现:可以发现附近设置为“所有人”可发现模式的苹果设备。
  • 自动接受文件:接收时,OpenDrop 会自动接受所有传入文件并保存到当前目录。

工作原理

OpenDrop 运行在苹果无线直连链路(AWDL)之上,这是苹果设备用于点对点通信的专有 Wi-Fi 链路层。这意味着它目前只能在运行 AWDL 开源实现(如 OWL)的 macOS 或 Linux 系统上工作。

安装

通过 pip 安装 OpenDrop 非常简单:

pip3 install opendrop

如需最新开发版本,请克隆仓库并安装:

git clone https://github.com/seemoo-lab/opendrop.git
pip3 install ./opendrop

发送文件

  1. 发现接收方:使用 find 命令列出附近的苹果设备。
$ opendrop find
Looking for receivers. Press Ctrl+C to stop ...
Found index 0 ID eccb2f2dcfe7 name John’s iPhone
Found index 1 ID e63138ac6ba8 name Jane’s MacBook Pro
  1. 发送文件:使用 send 命令,指定接收方索引、ID 或名称。
$ opendrop send -r 0 -f /path/to/some/file
Asking receiver to accept ...
Receiver accepted
Uploading file ...
Uploading has been successful

发送 URL

从 v0.13 开始,OpenDrop 可以发送网页链接。接收的苹果设备在接受后会在浏览器中立即打开该 URL。

$ opendrop send -r 0 -f https://owlink.org --url

接收文件

接收更加简单。只需运行 receive 命令,OpenDrop 就会自动接受所有传入文件,并保存到当前目录。

$ opendrop receive

技术细节

要求

  • Python:>= 3.6
  • AWDL:macOS 或 Linux 系统上运行 OWL
  • libarchive:需要当前版本。在 macOS 上,通过 Homebrew 安装:
brew install libarchive

OpenDrop 会自动设置 DYLD_LIBRARY_PATH 以使用 Homebrew 版本。Linux 发行版通常自带最新版本。

局限性(以及研究机会)

OpenDrop 是实验性研究软件,因此存在一些局限性:

  • 蓝牙低功耗触发:苹果设备仅在接收到自定义蓝牙低功耗广播后才会启动 AWDL 接口。这意味着 OpenDrop 可能无法发现未主动广播的设备。
  • 无对等身份验证:OpenDrop 不验证由苹果根证书签名的 TLS 证书,也不验证 Apple ID 记录。它会自动接受所有文件。
  • 单文件发送:与苹果 AirDrop 不同,OpenDrop 不支持一次发送多个文件。
  • 仅限联系人模式:OpenDrop 仅适用于设置为“所有人”可发现模式的设备。仅限联系人模式需要从 macOS 提取苹果凭据。

研究背景

OpenDrop 是开放无线链路项目的一部分,该项目旨在理解和记录苹果的专有无线协议。该团队已发表多篇学术论文:

  • PrivateDrop:一种保护隐私的 AirDrop 身份验证方案(USENIX Security '21)
  • A Billion Open Interfaces:通过 AWDL 对 iOS 和 macOS 的攻击分析(USENIX Security '19)

结论

OpenDrop 是一个强大的工具,适用于需要从非苹果平台与苹果生态系统交互的开发者和研究人员。尽管由于其研究性质存在局限性,但它为理解和扩展 AirDrop 功能提供了坚实的基础。无论你是自动化文件传输、进行安全研究,还是只想从 Linux 向 iPhone 发送文件,OpenDrop 都值得探索。

更多信息,请访问 GitHub 仓库

来源

seemoo-lab/opendrop:用 Python 编写的开源苹果 AirDrop 实现