PyMobileDevice3
Travailler avec des outils de développement (iOS >= 17.0)
Actions couramment utilisées
Bibliothèques OpenSSL
dépendance libusb
Aperçu
Installation
Usage
Les bits et octets (API Python)
Contribuer
Informations utiles
Avis de droit d'auteur
pymobiledevice3
est une implémentation purement python3 pour travailler avec des iDevices (iPhone, etc...). Cela signifie que cet outil est à la fois générique sur l'architecture et la plate-forme et qu'il est pris en charge et testé sur :
Fenêtres
Linux
macOS
Les principales fonctionnalités incluent :
Découverte de l'appareil pendant Bonjour
Redirection de port TCP
Affichage des lignes syslog (y compris le débogage)
Gestion des profils
Gestion des applications
Gestion du système de fichiers (AFC)
Gestion des rapports de crash
Reniflage de réseau (PCAP)
Mise à jour du micrologiciel
Montage d'images
Écoute et déclenchement des notifications (api notify_post()
)
Interrogation et définition des options SpringBoard
Automatisation des fonctionnalités de WebInspector
Fonctionnalités de DeveloperDiskImage :
Prendre des captures d'écran
Simuler des emplacements
Gestion des processus
Renifler les messages KDebug (capacités strace ++)
Surveillance des processus ( top
like)
Fonctionnalités d'accessibilité
Oslog reniflant qui comprend à la fois le syslog et les panneaux
Sauvegarde
Vous pouvez installer depuis PyPi :
python3 -m pip install -U pymobiledevice3
Ou installez la dernière version directement à partir des sources :
git clone [email protected]:doronz88/pymobiledevice3.gitcd pymobiledevice3 python3 -m pip install -U -e .
Vous pouvez également installer la saisie semi-automatique pour toutes les sous-commandes disponibles en ajoutant ce qui suit dans votre ~/.zshrc
:
# python-click<8.0eval "$(_PYMOBILEDEVICE3_COMPLETE=source_zsh pymobiledevice3)"# python-click>=8.0eval "$(_PYMOBILEDEVICE3_COMPLETE=zsh_source pymobiledevice3)"
Actuellement, openssl est explicitement requis si vous l'utilisez sur une ancienne version d'iOS (<13).
Sur macOS :
infuser installer openssl
Sous Linux :
sudo apt installer openssl
L'interaction avec l'appareil en modes Recovery ou DFU nécessite l'installation libusb
(nécessaire pour gérer les sous-commandes restore
).
Les étapes d'installation diffèrent en fonction de votre plate-forme exacte :
Sur macOS :
# en utilisant homebrewbrew, installez libusb# en utilisant le port MacPortssudo, installez libusb
Sous Linux :
# Debian/Ubuntusudo apt-get install libusb-1.0-0-dev# Fedorasudo dnf install libusb-devel# Arch Linuxsudo pacman -S libusb
Sous Windows :
Suivez le site Web libusb pour télécharger les derniers binaires :
https://libusb.info/
Les sous-commandes CLI sont grossièrement divisées en fonction de la couche de protocole utilisée pour interagir dans l'appareil. Par exemple, toutes les fonctionnalités dérivées de DeveloperDiskImage seront accessibles à partir de la sous-commande developer
. Cela signifie également que toutes les fonctionnalités qui n'existent pas n'en auront pas besoin.
Voici l'utilisation principale de la 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
REMARQUE : Actuellement, ceci n'est officiellement pris en charge que sur macOS et Windows (jusqu'à iOS 17.3.1), mais entièrement pris en charge sur toutes les plates-formes à partir d'iOS 17.4 en utilisant le nouveau tunnel de verrouillage. Pour l'interaction Windows avec iOS 17.0-17.3.1, vous devrez installer les pilotes supplémentaires (nous ne les fournissons pas)
À partir d'iOS 17.0, Apple a introduit le nouveau framework CoreDevice pour fonctionner avec les appareils iOS. Ce framework s'appuie sur le protocole RemoteXPC. Afin de communiquer avec les services de développement, vous devrez d'abord créer un tunnel de confiance sous l'une des deux formes :
Lancez un serveur tunnel nommé tunneld
pour détecter automatiquement les appareils et établir des connexions
Exécutez ce qui suit :
# si l'appareil prend en charge le couplage à distance, comme les instances Corellium ou les AppleTV, # vous devrez d'abord les coupler # les appareils iOS normaux ne nécessitent pas cette étape python3 -m pymobiledevice3 paire à distance # sous Windows, utilisez un shell privilégié sudo python3 - m pymobiledevice3 tunnelé à distance
Créer un tunnel manuellement à l'aide start-tunnel
Exécutez ce qui suit :
# si l'appareil prend en charge le couplage à distance, comme les instances Corellium ou les AppleTV,# vous devrez d'abord les coupler# les appareils iOS normaux ne nécessitent pas cette étape python3 -m pymobiledevice3 paire à distance# REMARQUE : sous Windows, utilisez un shell privilégié pour les commandes suivantes# à partir d'iOS 17.4, vous pouvez utiliser le tunnel de verrouillage beaucoup plus rapide sudo python3 -m pymobiledevice3 lockdown start-tunnel# si vous avez besoin que ce type de connexion soit également disponible via wifi, vous peut activer itpython3 -m pymobiledevice3 verrouillage des connexions wifi sur# sur les anciennes versions d'iOS, utilisez plutôt ce qui suit# vous pouvez passer `-t wifi` pour forcer un tunnel WiFi sudo python3 -m pymobiledevice3 tunnel de démarrage à distance
Le résultat suivant vous sera imprimé, vous fournissant les détails de connexion requis :
Interface: utun6 RSD Address: fd7b:e5b:6f53::1 RSD Port: 64337 Use the follow connection option: --rsd fd7b:e5b:6f53::1 64337
Cette commande doit être exécutée avec des privilèges élevés car elle crée un nouveau périphérique TUN/TAP qui est une opération à privilèges élevés.
Désormais, (presque) tous les pymobiledevice3 acceptent une option --rsd
/ --tunnel
supplémentaire pour se connecter au service via le tunnel. L'option --tunnel
en particulier est toujours tentée implicitement en cas d'erreur InvalidServiceError
pour simplifier le travail avec les services de développement. Vous pouvez maintenant essayer d'exécuter l'un d'entre eux comme suit :
# Accéder aux services DVT# L'option --tunnel peut accepter soit une chaîne vide, soit un UDID pour un périphérique spécifique # L'UDID peut être suffixé par :PORT en cas de tunnel en servant sur un port autre que celui par défaut python3 -m pymobiledevice3 développeur dvt ls / --tunnel ''# Ou simplement sans l'option `--tunnel`, en supposant que le tunneld exécute python3 -m pymobiledevice3 développeur dvt ls /# Ou nous pourrions utiliser les détails manuels du tunnelpython3 -m pymobiledevice3 développeur dvt ls / --rsd fd7b:e5b:6f53::1 64337# Et nous pouvons également accéder aux autres services de verrouillage "normaux"python3 -m pymobiledevice3 syslog live - -tunnel''
Vous pouvez faire BEAUCOUP sur l'appareil en utilisant pymobiledevice3
. Ceci est juste un TL;DR de quelques opérations courantes :
# Liste des appareils connectéspymobiledevice3 usbmux list# Parcourir les appareils RemoteXPC à l'aide de bonjourpymobiledevice3 bonjour rsd# Afficher toutes les lignes syslog (y compris les messages de débogage)pymobiledevice3 syslog live# Filtrer uniquement les messages contenant le mot "SpringBoard"pymobiledevice3 syslog live -m SpringBoard# Redémarrer l'appareilpymobiledevice3 diagnostics restart# Extrayez tous les rapports de crash de l'extraction de crash de devicepymobiledevice3 /path/to/crashes# Gérer le répertoire multimédiapymobiledevice3 afc shell# Répertorier toutes les applications installées et leurs détailspymobiledevice3 apps list# Répertorier la requête uniquement sur un ensemble spécifique d'applications ospymobiledevice3 apps query BUNDLE_ID1 BUNDLE_ID2# Créer un tunnel TCP de votre HOST vers le périphériquepymobiledevice3 usbmux forward HOST_PORT DEVICE_PORT# Créer une sauvegarde complète du périphériquepymobiledevice3 backup2 backup --full DIRECTORY# Restaurer une sauvegarde donnéepymobiledevice3 backup2 restaurer DIRECTORY# Effectuer une mise à jour du logiciel par un fichier/url IPSW donné:pymobiledevice3 restaurer la mise à jour -i /path/to/ipsw | url# Remarque : les sous-commandes webinspector suivantes nécessiteront que la fonctionnalité Web Inspector soit activée# Obtenez un shell JavaScript interactif sur n'importe quel tabpymobiledevice3 webinspector js-shell ouvert# La liste des onglets actuellement ouverts est le navigateur de l'appareilpymobiledevice3 webinspector open-tabs# Remarque : les sous-commandes webinspector suivantes il faudra également que la fonctionnalité d'automatisation à distance soit activée# Obtenez un shell JavaScript interactif sur le nouveau webinspector tabpymobiledevice3 d'automatisation à distance js-shell --automation# Lancer une session d'automatisation pour afficher une URL donnéeURL de lancement de pymobiledevice3 webinspector# Obtenir un shell de type séléniumpymobiledevice3 webinspector shell# Remarque : la sous-commande suivante nécessitera que DeveloperMode soit activé. Si votre appareil n'a pas de code PIN, vous pouvez l'allumer automatiquement à l'aide de la commande suivantepymobiledevice3 amfi activate-developer-mode# Monter le DDI (DeveloperDiskImage)pymobiledevice3 mounter auto-mount# Remarque : les sous-commandes suivantes supposent que DeveloperMode est à la fois allumé et le DDI a été monté # Simuler un emplacement « lat long » (iOS < 17.0)pymobiledevice3 développeur simuler-emplacement défini -- lat long# Simuler un emplacement « lat long » (iOS >= 17.0)pymobiledevice3 développeur dvt simulation-location set -- lat long# Lire un fichier .GPXpymobiledevice3 développeur dvt simuler-emplacement jouer route.gpx# Ajouter un bruit de synchronisation aléatoire entre -500 et 500 ms sur le temps entre deux points dans le fichier GPXpymobiledevice3 développeur dvt simulation-location play route.gpx 500# Effacer la simulation location:pymobiledevice3 développeur dvt simuler-emplacement clair# Prendre une capture d'écran de l'appareil:pymobiledevice3 développeur dvt capture d'écran /path/to/screen.png# Afficher la liste détaillée des processus (y compris ppid, uid, guid, sandbox, etc...)pymobiledevice3 développeur dvt sysmon process single# Renifler oslogpymobiledevice3 développeur dvt oslog# Tuer un processuspymobiledevice3 développeur dvt kill PID# Liste des fichiers dans un fichier donné répertoire (non chrooté)pymobiledevice3 développeur dvt ls PATH# Lancer une application par son nom de bundlepymobiledevice3 développeur dvt launch com.apple.mobilesafari# Renifler tous les événements KDebug pour obtenir une sortie de type `strace`: pymobiledevice3 développeur dvt core-profile-session parse-live# Renifler tous les événements KDebug dans un fichier pour les analyser ultérieurement avec des outils tels que [`pykdebugparser`](https://github.com/matan1008/pykdebugparser), `fs_usage` et ainsi de suite... pymobiledevice3 développeur dvt core-profile-session save FILENAME# Obtenir des informations étendues sur l'appareil (nom du noyau, chipset, etc. ...)pymobiledevice3 développeur dvt périphérique-informations# Surveiller la consommation d'énergie pour un PID spécifiquepymobiledevice3 développeur dvt énergie PID1 PID2...
Pour comprendre les bits et octets de la communication avec lockdownd
, ou si vous souhaitez apprendre l'API Python, il vous est conseillé de jeter un œil à cet article :
Comprendre les couches de protocole iDevice
Voir CONTRIBUTION.
S'il vous plaît voir divers
La bibliothèque utilise WindowsSelectorEventLoopPolicy pour asyncio sur la plate-forme Windows. S'il vous plaît voir la discussion divers
Ce travail est sous licence GPL 3.0 et est crédité à plusieurs contributeurs majeurs :
Hector Martin "marcan" [email protected]
Mathieu Renard
doronz [email protected]
matan1008 [email protected]
Guy Salton
netanelc305 [email protected]