PyMobileDevice3
Trabajar con herramientas de desarrollador (iOS >= 17.0)
Acciones comúnmente utilizadas
Bibliotecas OpenSSL
dependencia de libusb
Descripción general
Instalación
Uso
Los bits y bytes (API de Python)
Contribuyendo
Información útil
Aviso de derechos de autor
pymobiledevice3
es una implementación pura de python3 para trabajar con iDevices (iPhone, etc.). Esto significa que esta herramienta es genérica tanto de arquitectura como de plataforma y está soportada y probada en:
ventanas
linux
macos
Las características principales incluyen:
Descubrimiento de dispositivos mediante bonjour
Reenvío de puerto TCP
Visualización de líneas de syslog (incluida la depuración)
Gestión de perfiles
Gestión de aplicaciones
Gestión del sistema de archivos (AFC)
Gestión de informes de fallos
Rastreo de redes (PCAP)
Actualización de firmware
Montaje de imágenes
Escucha y activación de notificaciones ( notify_post()
api)
Consultar y configurar opciones de SpringBoard
Automatización de funciones de WebInspector
Características de DeveloperDiskImage:
Tomando capturas de pantalla
Simular ubicaciones
Gestión de procesos
Olfateando mensajes de KDebug (capacidades de strace ++)
Monitoreo de procesos (me gusta top
)
Funciones de accesibilidad
Olfateando oslog que incluye syslog y señales
Respaldo
Puedes instalar desde PyPi:
python3 -m instalación de pip -U pymobiledevice3
O instale la última versión directamente desde las fuentes:
git clone [email protected]:doronz88/pymobiledevice3.gitcd pymobiledevice3 python3 -m pip instalar -U -e.
También puede instalar la función de autocompletar para todos los subcomandos disponibles agregando lo siguiente en su ~/.zshrc
:
# python-click<8.0eval "$(_PYMOBILEDEVICE3_COMPLETE=source_zsh pymobiledevice3)"# python-click>=8.0eval "$(_PYMOBILEDEVICE3_COMPLETE=zsh_source pymobiledevice3)"
Actualmente, se requiere explícitamente openssl si se usa en una versión anterior de iOS (<13).
En MacOS:
instalar cerveza openssl
En Linux:
sudo apto instalar openssl
Interactuar con el dispositivo en los modos de recuperación o DFU requiere la instalación de libusb
(necesario para manejar los subcomandos restore
).
Los pasos de instalación se diferencian según su plataforma exacta:
En MacOS:
# usando homebrewbrew instala libusb # usando MacPortssudo port instala libusb
En Linux:
# Debian/Ubuntusudo apt-get install libusb-1.0-0-dev# Fedorasudo dnf install libusb-devel# Arch Linuxsudo pacman -S libusb
En ventanas:
Siga el sitio web de libusb para descargar los binarios de la última versión:
https://libusb.info/
Los subcomandos CLI se dividen aproximadamente según la capa de protocolo utilizada para interactuar en el dispositivo. Por ejemplo, se podrá acceder a todas las funciones derivadas de DeveloperDiskImage desde el subcomando developer
. Esto también significa que todas las funciones que no estén disponibles no las necesitarán.
Este es el uso principal de CLI:
Usage: pymobiledevice3 [OPTIONS] COMMAND [ARGS]... Interact with a connected iDevice (iPhone, iPad, ...) For more information please look at: https://github.com/doronz88/pymobiledevice3 Options: -h, --help Show this message and exit. Commands: activation Perform iCloud activation/deactivation or query the current state afc Manage device multimedia files amfi Enable/Disable developer-mode or query its state apps Manage installed applications backup2 Backup/Restore options bonjour Browse devices over bonjour companion List paired "companion" devices crash Manage crash reports developer Perform developer operations (Requires enable of Developer-Mode) diagnostics Reboot/Shutdown device or access other diagnostics services lockdown Pair/Unpair device or access other lockdown services mounter Mount/Umount DeveloperDiskImage or query related info notification Post/Observe notifications pcap Sniff device traffic power-assertion Create a power assertion processes View process list using diagnosticsd API profile Managed installed profiles or install SSL certificates provision Manage installed provision profiles remote Create RemoteXPC tunnels restore Restore an IPSW or access device in recovery mode springboard Access device UI syslog Watch syslog messages usbmux List devices or forward a TCP port webinspector Access webinspector services version Query pymobiledevice3 version
NOTA: Actualmente, esto solo es oficialmente compatible con macOS y Windows (hasta iOS 17.3.1), pero es totalmente compatible con todas las plataformas a partir de iOS 17.4 usando el nuevo túnel de bloqueo. Para la interacción de Windows con iOS 17.0-17.3.1, deberá instalar los controladores adicionales (no los proporcionamos)
A partir de iOS 17.0, Apple introdujo el nuevo marco CoreDevice para funcionar con dispositivos iOS. Este marco se basa en el protocolo RemoteXPC. Para comunicarse con los servicios de desarrollador, primero deberá crear un túnel confiable en una de las dos formas:
Inicie un servidor de túnel llamado tunneld
para detectar dispositivos automáticamente y establecer conexiones.
Ejecute lo siguiente:
# si el dispositivo admite emparejamiento remoto, como instancias de Corellium o AppleTV, # primero deberá emparejarlos # los dispositivos iOS normales no requieren este paso python3 -m pymobiledevice3 par remoto # en Windows, use un shell privilegiado sudo python3 - m pymobiledevice3 túnel remoto
Crear túnel manualmente usando start-tunnel
Ejecute lo siguiente:
# si el dispositivo admite emparejamiento remoto, como instancias de Corellium o AppleTV, # primero deberá emparejarlos # los dispositivos iOS normales no requieren este paso python3 -m pymobiledevice3 par remoto # NOTA: en Windows, use un shell privilegiado para los siguientes comandos # a partir de iOS 17.4, puede usar el túnel de bloqueo mucho más rápido sudo python3 -m pymobiledevice3 lock start-tunnel # si necesita que este tipo de conexión sea también disponible a través de wifi, puede habilitarlopython3 -m pymobiledevice3 bloqueo de conexiones wifi en# en versiones anteriores de iOS use lo siguiente en su lugar# puede pasar `-t wifi` para forzar un túnel WiFisudo python3 -m pymobiledevice3 inicio-túnel remoto
Se le imprimirá el siguiente resultado que le proporcionará los detalles de conexión necesarios:
Interface: utun6 RSD Address: fd7b:e5b:6f53::1 RSD Port: 64337 Use the follow connection option: --rsd fd7b:e5b:6f53::1 64337
Este comando debe ejecutarse con altos privilegios ya que crea un nuevo dispositivo TUN/TAP, que es una operación con altos privilegios.
Ahora, (casi) todos los pymobiledevice3 aceptan una opción --rsd
/ --tunnel
adicional para conectarse al servicio a través del túnel. La opción --tunnel
específicamente, siempre se intenta implícitamente ante un error InvalidServiceError
para simplificar el trabajo con los servicios de desarrollador. Ahora puedes intentar ejecutar cualquiera de ellos de la siguiente manera:
# Acceso a los servicios DVT# La opción --tunnel puede aceptar una cadena vacía o un UDID para un dispositivo específico # El UDID puede tener el sufijo :PORT en caso de que se haga un túnel para servir en un puerto no predeterminado python3 -m pymobiledevice3 desarrollador dvt ls / --tunnel ''# O simplemente sin la opción `--tunnel`, asumiendo que el túnel se está ejecutandopython3 -m pymobiledevice3 desarrollador dvt ls /# O podríamos usar los detalles del túnel manualpython3 -m pymobiledevice3 desarrollador dvt ls / --rsd fd7b:e5b:6f53::1 64337# Y también podemos acceder a otros servicios de bloqueo "normales"python3 -m pymobiledevice3 syslog live - -túnel ''
Hay MUCHAS cosas que puedes hacer en el dispositivo usando pymobiledevice3
. Esto es sólo un TL;DR de algunas operaciones comunes:
# Listado de dispositivos conectadospymobiledevice3 usbmux list# Explorar dispositivos RemoteXPC usando bonjourpymobiledevice3 bonjour rsd# Ver todas las líneas de syslog (incluidos los mensajes de depuración)pymobiledevice3 syslog live# Filtrar solo los mensajes que contienen la palabra "SpringBoard"pymobiledevice3 syslog live -m SpringBoard# Reiniciar dispositivopymobiledevice3 diagnostics restart# Extraiga todos los informes de fallos de la extracción de fallos de devicepymobiledevice3 /ruta/a/crashes# Administrar el directorio de mediospymobiledevice3 afc shell# Enumerar todas las aplicaciones instaladas y sus detalleslista de aplicaciones pymobiledevice3# Enumerar la consulta solo un conjunto específico de aplicaciones del sistema operativo pymobiledevice3 consulta de aplicaciones BUNDLE_ID1 BUNDLE_ID2# Crear un túnel TCP desde su HOST al dispositivopymobiledevice3 usbmux forward HOST_PORT DEVICE_PORT# Crear una copia de seguridad completa del dispositivopymobiledevice3 backup2 backup --full DIRECTORIO# Restaurar una copia de seguridad determinadapymobiledevice3 backup2 restaurar DIRECTORIO# Realizar una actualización de software mediante un archivo IPSW determinado/url:pymobiledevice3 restaurar actualización -i /ruta/a/ipsw | url# Nota: Los siguientes subcomandos de webinspector requerirán que la función Web Inspector esté activada# Obtenga un shell de JavaScript interactivo en cualquier tabpymobiledevice3 webinspector js-shell# La lista de pestañas actualmente abiertas es el navegador del dispositivopymobiledevice3 webinspector open-tabs# Nota: Los siguientes subcomandos de webinspector También será necesario activar la función de automatización remota. Obtener un shell de JavaScript interactivo en el nuevo webinspector de automatización remota tabpymobiledevice3. js-shell --automation# Iniciar una sesión de automatización para ver una URL determinada URL de inicio de pymobiledevice3 webinspector# Obtener un shell similar a seleniopymobiledevice3 webinspector shell# Nota: El siguiente subcomando requerirá que DeveloperMode esté activado. Si su dispositivo no tiene un código PIN, puede encenderlo automáticamente usando el siguiente comandopymobiledevice3 amfi enable-developer-mode# Monte el DDI (DeveloperDiskImage)pymobiledevice3 mounter auto-mount# Nota: Los siguientes subcomandos asumen que ambos DeveloperMode son encendido y el DDI ha sido montado # Simular una ubicación `lat long` (iOS < 17.0) Conjunto de ubicación simulada para desarrolladores de pymobiledevice3 - lat long# Simular una ubicación `lat long` (iOS >= 17.0)pymobiledevice3 desarrollador dvt simular-ubicación set -- lat long# Reproducir un archivo .GPXpymobiledevice3 desarrollador dvt simular-ubicación reproducir ruta.gpx# Agregar ruido de tiempo aleatorio entre -500 y 500 ms en el tiempo entre dos puntos en el archivo GPXpymobiledevice3 desarrollador dvt simular-ubicación reproducir ruta.gpx 500# Borrar lo simulado ubicación:pymobiledevice3 desarrollador dvt simular-ubicación clear# Tomar una captura de pantalla del dispositivo:pymobiledevice3 desarrollador dvt captura de pantalla /path/to/screen.png# Ver lista detallada de procesos (incluidos ppid, uid, guid, sandboxed, etc.)pymobiledevice3 desarrollador dvt sysmon proceso single# Olfateando oslogpymobiledevice3 desarrollador dvt oslog# Matar un procesopymobiledevice3 desarrollador dvt kill PID# Listar archivos en un directorio determinado (sin chroot)pymobiledevice3 desarrollador dvt ls PATH# Iniciar una aplicación por su nombre de paquetepymobiledevice3 desarrollador dvt launch com.apple.mobilesafari# Olfatea todos los eventos de KDebug para obtener una salida similar a `strace`:pymobiledevice3 desarrollador dvt core- perfil-session parse-live# Huele todos los eventos de KDebug en un archivo para analizarlos más tarde con herramientas como [`pykdebugparser`](https://github.com/matan1008/pykdebugparser), `fs_usage` y así sucesivamente... pymobiledevice3 desarrollador dvt core-profile-session save FILENAME# Obtener información extendida del dispositivo (nombre del kernel, chipset, etc.) ...)pymobiledevice3 desarrollador dvt información-dispositivo# Monitorear el consumo de energía para un PID específicopymobiledevice3 desarrollador dvt energía PID1 PID2...
Para comprender los bits y bytes de la comunicación con lockdownd
, o si está dispuesto a aprender la API de Python, le recomendamos que consulte este artículo:
Comprender las capas del protocolo iDevice
Ver CONTRIBUIR.
Por favor vea misceláneos
La biblioteca usa WindowsSelectorEventLoopPolicy para asyncio en la plataforma Windows. Por favor vea la discusión miscelánea.
Este trabajo tiene licencia GPL 3.0 y se acredita a varios contribuyentes importantes:
Héctor Martín "marcan" [email protected]
Mathieu Renard
doronz [email protected]
matan1008 [email protected]
Guy Salton
netanelc305 [email protected]