PyMobileDevice3
Trabalhando com ferramentas de desenvolvedor (iOS >= 17.0)
Ações comumente usadas
Bibliotecas OpenSSL
dependência libusb
Visão geral
Instalação
Uso
Os bits e bytes (API Python)
Contribuindo
Informações úteis
Aviso de direitos autorais
pymobiledevice3
é uma implementação python3 pura para trabalhar com iDevices (iPhone, etc...). Isso significa que esta ferramenta é genérica de arquitetura e plataforma e é suportada e testada em:
Windows
Linux
macOS
Os principais recursos incluem:
Descoberta de dispositivos durante o bonjour
Encaminhamento de porta TCP
Visualizando linhas de syslog (incluindo depuração)
Gerenciamento de perfil
Gerenciamento de aplicativos
Gerenciamento do sistema de arquivos (AFC)
Gerenciamento de relatórios de falhas
Sniffing de rede (PCAP)
Atualização de firmware
Montagem de imagens
Escuta e acionamento de notificações ( notify_post()
api)
Consultando e configurando opções do SpringBoard
Automatizando recursos do WebInspector
Recursos do DeveloperDiskImage:
Tirando capturas de tela
Simular locais
Gestão de processos
Cheirando mensagens do KDebug ( strace capacidades++)
Monitoramento de processos ( top
like)
Recursos de acessibilidade
Sniffing oslog que inclui syslog e sinalização
Backup
Você pode instalar a partir do PyPi:
python3 -m pip instalar -U pymobiledevice3
Ou instale a versão mais recente diretamente das fontes:
git clone [email protected]:doronz88/pymobiledevice3.gitcd pymobiledevice3 python3 -m pip instalar -U -e.
Você também pode instalar o preenchimento automático para todos os subcomandos disponíveis adicionando o seguinte ao seu ~/.zshrc
:
# python-click<8.0eval "$(_PYMOBILEDEVICE3_COMPLETE=source_zsh pymobiledevice3)"# python-click>=8.0eval "$(_PYMOBILEDEVICE3_COMPLETE=zsh_source pymobiledevice3)"
Atualmente, o openssl é explicitamente necessário se for usado em versões mais antigas do iOS (<13).
No macOS:
preparar instalar o openssl
No Linux:
sudo apt instalar o openssl
Interagir com o dispositivo nos modos Recovery ou DFU requer a instalação libusb
(necessário para lidar com os subcomandos restore
).
As etapas de instalação são diferenciadas dependendo da sua plataforma exata:
No macOS:
# usando homebrewbrew install libusb# usando MacPortssudo port install libusb
No Linux:
# Debian/Ubuntusudo apt-get install libusb-1.0-0-dev# Fedorasudo dnf install libusb-devel# Arch Linuxsudo pacman -S libusb
Nas janelas:
Seguindo o site da libusb para baixar os binários de versão mais recentes:
https://libusb.info/
Os subcomandos CLI são divididos aproximadamente pela camada de protocolo usada para interagir no dispositivo. Por exemplo, todos os recursos derivados do DeveloperDiskImage estarão acessíveis no subcomando developer
. Isso também significa que todos os recursos que não existem não exigirão isso.
Este é o principal uso da 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: Atualmente, isso só é oficialmente compatível com macOS e Windows (até iOS 17.3.1), mas é totalmente compatível com todas as plataformas a partir do iOS 17.4 usando o novo túnel de bloqueio. Para interação do Windows com iOS 17.0-17.3.1, você precisará instalar os drivers adicionais (não os fornecemos)
A partir do iOS 17.0, a Apple introduziu a nova estrutura CoreDevice para funcionar com dispositivos iOS. Esta estrutura depende do protocolo RemoteXPC. Para se comunicar com os serviços do desenvolvedor, você precisará primeiro criar um túnel confiável em uma das duas formas:
Inicie um servidor de túnel denominado tunneld
para detectar dispositivos automaticamente e estabelecer conexões
Execute o seguinte:
# se o dispositivo suportar emparelhamento remoto, como instâncias Corellium ou AppleTVs,# você precisará primeiro emparelhá-los# dispositivos iOS normais não exigem esta etapa python3 -m par remoto pymobiledevice3# no Windows, use um shell privilegiado sudo python3 - m pymobiledevice3 túnel remoto
Crie um túnel manualmente usando start-tunnel
Execute o seguinte:
# se o dispositivo suportar emparelhamento remoto, como instâncias Corellium ou AppleTVs,# você precisará primeiro emparelhá-los# dispositivos iOS normais não exigem esta etapa python3 -m pymobiledevice3 par remoto# NOTA: no Windows, use um shell privilegiado para os seguintes comandos# a partir do iOS 17.4 você pode usar o túnel de bloqueio muito mais rápidosudo python3 -m pymobiledevice3 bloqueio start-tunnel# se precisar que esse tipo de conexão também esteja disponível via wifi, você pode habilite itpython3 -m pymobiledevice3 bloqueio conexões wifi ativadas# na versão mais antiga do iOS, use o seguinte# você pode passar `-t wifi` para forçar um túnel WiFisudo python3 -m pymobiledevice3 remote start-tunnel
Você receberá a seguinte saída, fornecendo os detalhes de conexão necessários:
Interface: utun6 RSD Address: fd7b:e5b:6f53::1 RSD Port: 64337 Use the follow connection option: --rsd fd7b:e5b:6f53::1 64337
Este comando deve ser executado com privilégios elevados, pois cria um novo dispositivo TUN/TAP que é uma operação de alto privilégio.
Agora, (quase) todos os pymobiledevice3 aceitam uma opção adicional --rsd
/ --tunnel
para conectar-se ao serviço através do túnel. A opção --tunnel
especificamente é sempre tentada implicitamente após um erro InvalidServiceError
para simplificar o trabalho com serviços de desenvolvedor. Agora você pode tentar executar qualquer um deles da seguinte maneira:
# Acessando os serviços DVT# A opção --tunnel pode aceitar uma string vazia ou um UDID para um dispositivo específico # O UDID pode ter o sufixo :PORT no caso de tunelamento para servir em uma porta não padrão python3 -m pymobiledevice3 desenvolvedor dvt ls / --tunnel ''# Ou simplesmente sem a opção `--tunnel`, assumindo que o túnel esteja em execuçãopython3 -m pymobiledevice3 desenvolvedor dvt ls /# Ou poderíamos usar o túnel manualdetailspython3 -m pymobiledevice3 developer dvt ls / --rsd fd7b:e5b:6f53::1 64337# E também podemos acessar outros serviços de bloqueio "normais"python3 -m pymobiledevice3 syslog live --tunnel ' '
Há MUITO que você pode fazer no dispositivo usando pymobiledevice3
. Este é apenas um TL;DR de algumas operações comuns:
# Listando dispositivos conectadospymobiledevice3 lista usbmux# Navegue pelos dispositivos RemoteXPC usando bonjourpymobiledevice3 bonjour rsd# Veja todas as linhas de syslog (incluindo mensagens de depuração)pymobiledevice3 syslog live# Filtre apenas mensagens contendo a palavra "SpringBoard"pymobiledevice3 syslog live -m SpringBoard# Reinicialize o diagnóstico do devicepymobiledevice3# Extraia todos os relatórios de falhas do pull de falhas do devicepymobiledevice3 /path/to/crashes# Gerencie o diretório de mídiapymobiledevice3 afc shell# Liste todos os aplicativos instalados e seus detalhespymobiledevice3 apps list# Liste a consulta apenas um conjunto específico os appspymobiledevice3 apps query BUNDLE_ID1 BUNDLE_ID2# Crie um túnel TCP do seu HOST para o dispositivopymobiledevice3 usbmux forward HOST_PORT DEVICE_PORT# Crie um backup completo do backup2 backup2 do devicepymobiledevice3 --full DIRETÓRIO# Restaurar um determinado backuppymobiledevice3 backup2 restaurar DIRETÓRIO# Executar uma atualização de software por um determinado arquivo IPSW/url:pymobiledevice3 restaurar atualização -i /caminho/para/ipsw | url# Nota: Os seguintes subcomandos do webinspector exigirão que o recurso Web Inspector esteja ativado# Obtenha o shell JavaScript interativo em qualquer tabpymobiledevice3 aberto webinspector js-shell# A lista de guias atualmente abertas é o navegador do dispositivopymobiledevice3 webinspector opens-tabs# Nota: Os seguintes subcomandos do webinspector exigirá também que o recurso de automação remota esteja ativado# Obtenha o shell JavaScript interativo na nova automação remota tabpymobiledevice3 webinspector js-shell --automation# Inicia uma sessão de automação para visualizar um determinado URLpymobiledevice3 webinspector launch URL# Obtenha um shellpymobiledevice3 webinspector shell# Nota: O subcomando a seguir exigirá que o DeveloperMode esteja ativado. Se o seu dispositivo não tiver um código PIN, você pode ativá-lo automaticamente usando o seguinte comandopymobiledevice3 amfi enable-developer-mode# Monte o DDI (DeveloperDiskImage)pymobiledevice3 mounter auto-mount# Observação: os subcomandos a seguir assumem que DeveloperMode é ativado e o DDI foi montado# Simular um local `lat long` (iOS < 17.0)pymobiledevice3 desenvolvedor simular-location set -- lat long# Simule uma localização `lat long` (iOS >= 17.0)pymobiledevice3 desenvolvedor dvt conjunto de simulação de localização - lat long# Reproduza um arquivo .GPXpymobiledevice3 desenvolvedor dvt simula-localização play route.gpx# Adicione ruído de tempo aleatório entre -500 e 500ms em o tempo entre dois pontos no GPX filepymobiledevice3 desenvolvedor dvt simula-localização play route.gpx 500# Limpe o simulado location:pymobiledevice3 desenvolvedor dvt simula-location clear# Fazendo uma captura de tela do dispositivo:pymobiledevice3 desenvolvedor dvt screenshot /path/to/screen.png# Veja a lista detalhada de processos (incluindo ppid, uid, guid, sandbox, etc...)pymobiledevice3 desenvolvedor dvt sysmon process single# Sniffing oslogpymobiledevice3 desenvolvedor dvt oslog# Eliminar um processpymobiledevice3 desenvolvedor dvt kill PID# Listar arquivos em um determinado diretório (sem chroot)pymobiledevice3 desenvolvedor dvt ls PATH# Inicie um aplicativo pelo nome do pacotepymobiledevice3 desenvolvedor dvt launch com.apple.mobilesafari# Fareje todos os eventos do KDebug para obter uma saída semelhante a `strace`:pymobiledevice3 desenvolvedor dvt core-profile -session parse-live# Detecta todos os eventos do KDebug em um arquivo para análise posterior com ferramentas como [`pykdebugparser`](https://github.com/matan1008/pykdebugparser), `fs_usage` e assim por diante...pymobiledevice3 desenvolvedor dvt core-profile-session save FILENAME# Obtenha informações estendidas do dispositivo (nome do kernel, chipset, etc. ...)pymobiledevice3 desenvolvedor dvt device-information# Monitore o consumo de energia para um PID específicopymobiledevice3 desenvolvedor dvt energy PID1 PID2...
Para entender os bits e bytes da comunicação com lockdownd
, ou se você deseja aprender a API python, é aconselhável dar uma olhada neste artigo:
Compreendendo as camadas do protocolo iDevice
Consulte CONTRIBUINDO.
Por favor, veja diversos
A biblioteca usa WindowsSelectorEventLoopPolicy para assíncrono na plataforma Windows. Por favor, veja a discussão diversa
Este trabalho está licenciado sob GPL 3.0 e é creditado a vários contribuidores importantes:
Hector Martin "marcan" [email protected]
Mathieu Renard
doronz [email protected]
matan1008 [email protected]
Guy Salton
netanelc305 [email protected]