OpenDrop: Una implementación de código abierto de AirDrop en Python
OpenDrop es una herramienta de línea de comandos en Python que implementa el protocolo Apple AirDrop, permitiendo compartir archivos con dispositivos iOS y macOS a través de Wi-Fi.
¿Qué es OpenDrop?
OpenDrop es una herramienta de código abierto de línea de comandos que implementa el protocolo Apple AirDrop, permitiéndote compartir archivos directamente a través de Wi-Fi con dispositivos Apple que ejecuten iOS y macOS. Desarrollado por el Seemoo Lab de la TU Darmstadt, es el resultado de una extensa ingeniería inversa del protocolo propietario AirDrop de Apple.
Por qué OpenDrop es importante
AirDrop es una función conveniente para los usuarios de Apple, pero está bloqueada dentro del ecosistema de Apple. OpenDrop rompe esta barrera al proporcionar una implementación multiplataforma que puede enviar y recibir archivos desde dispositivos Apple. Esto es particularmente valioso para desarrolladores, investigadores y cualquier persona que necesite transferir archivos entre sistemas que no son Apple y sistemas Apple sin depender de servicios en la nube o aplicaciones de terceros.
Características clave
- Compatibilidad de protocolo: OpenDrop es compatible con el protocolo Apple AirDrop, lo que significa que puede comunicarse directamente con dispositivos Apple.
- Interfaz de línea de comandos: Simple y programable, perfecto para automatización e integración en flujos de trabajo.
- Compartir archivos y URL: Admite el envío tanto de archivos como de enlaces web (URL) a dispositivos Apple.
- Descubrimiento de receptores: Puede descubrir dispositivos Apple cercanos que estén configurados en modo de descubrimiento "todos".
- Aceptación automática de archivos: Al recibir, OpenDrop acepta automáticamente todos los archivos entrantes y los guarda en el directorio actual.
Cómo funciona
OpenDrop opera sobre Apple Wireless Direct Link (AWDL), una capa de enlace Wi-Fi propietaria utilizada por los dispositivos Apple para comunicación peer-to-peer. Esto significa que actualmente solo funciona en sistemas macOS o Linux que ejecuten una reimplementación abierta de AWDL, como OWL.
Instalación
Instalar OpenDrop es sencillo a través de pip:
pip3 install opendrop
Para la última versión de desarrollo, clona el repositorio e instala:
git clone https://github.com/seemoo-lab/opendrop.git
pip3 install ./opendrop
Enviar un archivo
- Descubrir receptores: Usa el comando
findpara listar dispositivos Apple cercanos.
$ opendrop find
Buscando receptores. Presiona Ctrl+C para detener...
Encontrado índice 0 ID eccb2f2dcfe7 nombre iPhone de John
Encontrado índice 1 ID e63138ac6ba8 nombre MacBook Pro de Jane
- Enviar un archivo: Usa el comando
sendcon el índice, ID o nombre del receptor.
$ opendrop send -r 0 -f /ruta/a/algun/archivo
Pidiendo al receptor que acepte...
Receptor aceptó
Subiendo archivo...
La subida ha sido exitosa
Enviar una URL
Desde la versión 0.13, OpenDrop puede enviar enlaces web. El dispositivo Apple receptor abrirá inmediatamente la URL en su navegador al aceptar.
$ opendrop send -r 0 -f https://owlink.org --url
Recibir archivos
Recibir es aún más simple. Simplemente ejecuta el comando receive, y OpenDrop aceptará automáticamente todos los archivos entrantes, guardándolos en el directorio actual.
$ opendrop receive
Detalles técnicos
Requisitos
- Python: >= 3.6
- AWDL: macOS o Linux con OWL
- libarchive: Se requiere una versión actual. En macOS, instala a través de Homebrew:
brew install libarchive
OpenDrop establece automáticamente DYLD_LIBRARY_PATH para usar la versión de Homebrew. Las distribuciones de Linux generalmente incluyen versiones actualizadas.
Limitaciones (y oportunidades de investigación)
OpenDrop es software de investigación experimental, por lo que tiene algunas limitaciones:
- Activación Bluetooth LE: Los dispositivos Apple inician su interfaz AWDL solo después de recibir un anuncio Bluetooth LE personalizado. Esto significa que OpenDrop puede no descubrir receptores que no estén anunciándose activamente.
- Sin autenticación de pares: OpenDrop no verifica los certificados TLS firmados por la raíz de Apple ni valida los registros de ID de Apple. Acepta automáticamente todos los archivos.
- Envío de un solo archivo: A diferencia de Apple AirDrop, OpenDrop no admite el envío de múltiples archivos a la vez.
- Modo solo contactos: OpenDrop solo funciona con dispositivos configurados en modo de descubrimiento "todos". El modo solo contactos requiere credenciales de Apple extraídas de macOS.
Antecedentes de investigación
OpenDrop es parte del proyecto Open Wireless Link, que tiene como objetivo comprender y documentar los protocolos inalámbricos propietarios de Apple. El equipo ha publicado varios artículos académicos:
- PrivateDrop: Un esquema de autenticación que preserva la privacidad para AirDrop (USENIX Security '21)
- A Billion Open Interfaces: Análisis de ataques a iOS y macOS a través de AWDL (USENIX Security '19)
Conclusión
OpenDrop es una herramienta poderosa para desarrolladores e investigadores que necesitan interactuar con el ecosistema Apple desde plataformas que no son Apple. Aunque tiene limitaciones debido a su naturaleza de investigación, proporciona una base sólida para comprender y extender la funcionalidad de AirDrop. Ya sea que estés automatizando transferencias de archivos, realizando investigaciones de seguridad o simplemente quieras enviar archivos desde Linux a un iPhone, vale la pena explorar OpenDrop.
Para más información, visita el repositorio de GitHub.
Fuente
seemoo-lab/opendrop: Una implementación abierta de Apple AirDrop escrita en Python