hacktricks/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md

410 lines
26 KiB
Markdown
Raw Normal View History

# Operações Básicas de Teste no iOS
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Obtendo o UDID de um dispositivo iOS
{% hint style="info" %}
Realize estas ações tendo o dispositivo **conectado** ao computador via **USB** e tendo o **dispositivo** **desbloqueado**.
{% endhint %}
O UDID é uma sequência única de 40 dígitos, composta por letras e números, para identificar um dispositivo iOS. Você pode encontrar o UDID do seu dispositivo iOS no macOS Catalina em diante no aplicativo **Finder**, pois o iTunes não está mais disponível no Catalina. Basta selecionar o dispositivo iOS conectado no Finder e **clicar nas informações abaixo do nome do dispositivo iOS** para percorrer as informações. Além do UDID, você pode encontrar o número de série, IMEI e outras informações úteis.
![](<../../.gitbook/assets/image (471).png>)
Se você estiver usando uma versão do macOS anterior ao Catalina, você pode encontrar o [UDID do seu dispositivo iOS via iTunes](http://www.iclarified.com/52179/how-to-find-your-iphones-udid), selecionando seu dispositivo e clicando em "Número de Série" na guia Resumo. Ao clicar nisso, você percorrerá metadados diferentes do dispositivo iOS, incluindo seu UDID.
2023-06-06 18:56:34 +00:00
Também é possível obter o UDID por meio de várias ferramentas de linha de comando no macOS enquanto o dispositivo está conectado via USB:
2023-06-06 18:56:34 +00:00
* Usando a ferramenta [I/O Registry Explorer](https://developer.apple.com/library/archive/documentation/DeviceDrivers/Conceptual/IOKitFundamentals/TheRegistry/TheRegistry.html) `ioreg`:
```bash
$ ioreg -p IOUSB -l | grep "USB Serial"
| "USB Serial Number" = "9e8ada44246cee813e2f8c1407520bf2f84849ec"
```
2023-06-06 18:56:34 +00:00
* Usando [ideviceinstaller](https://github.com/libimobiledevice/ideviceinstaller) (também disponível no Linux):
```bash
$ brew install ideviceinstaller
$ idevice_id -l
316f01bd160932d2bf2f95f1f142bc29b1c62dbc
```
2023-06-06 18:56:34 +00:00
* Usando o system\_profiler:
```bash
$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
2019-09-08 10:18:03.920 system_profiler[13251:1050356] SPUSBDevice: IOCreatePlugInInterfaceForService failed 0xe00002be
Serial Number: 64655621de6ef5e56a874d63f1e1bdd14f7103b1
```
2023-06-06 18:56:34 +00:00
* Usando instruments:
```bash
$ instruments -s devices
```
## Acessando o Shell do Dispositivo
Após fazer o jailbreak no dispositivo, você deve ter instalado algum novo gerenciador de aplicativos como o **Cydia**.
### SSH
Para habilitar o acesso SSH ao seu dispositivo iOS, você pode instalar o **pacote OpenSSH**. Uma vez instalado, você pode acessar seu dispositivo via ssh executando `ssh root@<endereço_ip_do_dispositivo>`, o que fará o login como usuário root:
```bash
$ ssh root@192.168.197.234
root@192.168.197.234's password:
iPhone:~ root#
```
2023-06-06 18:56:34 +00:00
Ao acessar seu dispositivo iOS via SSH, considere o seguinte:
* Os **usuários padrão são `root` e `mobile`**.
* A senha padrão para ambos é **`alpine`**.
> Lembre-se de alterar a senha padrão para os usuários `root` e `mobile`, pois qualquer pessoa na mesma rede pode encontrar o endereço IP do seu dispositivo e se conectar usando a senha padrão conhecida, o que lhes dará acesso root ao seu dispositivo.
### **Conectar a um dispositivo via SSH por USB**
2023-06-06 18:56:34 +00:00
Durante um teste real de caixa preta, uma conexão Wi-Fi confiável pode não estar disponível. Nessa situação, você pode usar o usbmuxd para se conectar ao servidor SSH do seu dispositivo via USB.
2023-06-06 18:56:34 +00:00
Conecte o macOS a um dispositivo iOS instalando e iniciando o iproxy:
```bash
$ brew install libimobiledevice
$ iproxy 2222 22
waiting for connection
```
2023-06-06 18:56:34 +00:00
O comando acima mapeia a porta `22` do dispositivo iOS para a porta `2222` no localhost. Você também pode [fazer o iproxy rodar automaticamente em segundo plano](https://iphonedevwiki.net/index.php/SSH\_Over\_USB) se não quiser executar o binário toda vez que quiser fazer SSH via USB.
2023-06-06 18:56:34 +00:00
Com o seguinte comando em uma nova janela do terminal, você pode se conectar ao dispositivo:
```bash
$ ssh -p 2222 root@localhost
root@localhost's password:
iPhone:~ root#
```
> Pequena observação sobre o USB de um iDevice: em um dispositivo iOS, você não pode fazer conexões de dados após 1 hora de estar bloqueado, a menos que o desbloqueie novamente devido ao Modo Restrito USB, que foi introduzido com o iOS 11.4.1.
### Aplicativo Shell no Dispositivo
Embora geralmente usar um **shell no dispositivo** (emulador de terminal) possa ser muito tedioso em comparação com um shell remoto, pode ser útil para depurar em caso de problemas de rede, por exemplo, ou verificar algumas configurações. Por exemplo, você pode instalar o [NewTerm 2](https://repo.chariz.io/package/ws.hbang.newterm2/) via Cydia para esse propósito (ele suporta iOS 6.0 a 12.1.2 no momento em que este texto foi escrito).
2023-06-06 18:56:34 +00:00
Além disso, existem alguns jailbreaks que desabilitam explicitamente o SSH de entrada _por motivos de segurança_. Nesses casos, é muito conveniente ter um aplicativo shell no dispositivo, que você pode usar para primeiro fazer SSH para fora do dispositivo com um shell reverso e, em seguida, conectar-se a ele a partir do seu computador host.
2023-06-06 18:56:34 +00:00
Abrir um shell reverso via SSH pode ser feito executando o comando `ssh -R <remote_port>:localhost:22 <username>@<host_computer_ip>`.
2023-06-06 18:56:34 +00:00
No aplicativo shell no dispositivo, execute o seguinte comando e, quando solicitado, digite a senha do usuário `mstg` do computador host:
```bash
ssh -R 2222:localhost:22 mstg@192.168.197.235
```
No seu computador host, execute o seguinte comando e, quando solicitado, digite a senha do usuário `root` do dispositivo iOS:
```bash
$ ssh -p 2222 root@localhost
```
### **Senha Esquecida**
Se você esquecer sua senha e quiser redefini-la para o padrão **`alpine`**:
2023-06-06 18:56:34 +00:00
1. Edite o arquivo `/private/etc/master.passwd` em seu dispositivo iOS com jailbreak usando um **terminal** no dispositivo ou usando aplicativos como **Filza** ou **iFile**
2. Encontre as linhas:
```bash
root:xxxxxxxxx:0:0::0:0:System Administrator:/var/root:/bin/sh
mobile:xxxxxxxxx:501:501::0:0:Mobile User:/var/mobile:/bin/sh
```
2023-06-06 18:56:34 +00:00
3. Altere `xxxxxxxxx` para `/smx7MYTQIi2M` (que é a senha criptografada `alpine`)
4. Salve e saia
## Transferência de Dados
### Copiando Arquivos de Dados do Aplicativo via SSH e SCP
Como sabemos agora, os arquivos do nosso aplicativo são armazenados no diretório Data. Agora você pode simplesmente arquivar o diretório Data com `tar` e transferi-lo do dispositivo com `scp`:
```bash
iPhone:~ root# tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
iPhone:~ root# exit
$ scp -P 2222 root@localhost:/tmp/data.tgz .
```
### Usando o iFunbox
O **iFunbox** é um aplicativo de interface gráfica que pode ser usado para várias coisas (incluindo o upload/download de arquivos).\
Outra ferramenta de interface gráfica para esse propósito é o **iExplorer**.
2021-05-15 12:48:28 +00:00
{% hint style="info" %}
A partir da versão 8.4 do iOS, a Apple restringiu o acesso de gerenciadores de terceiros ao sandbox do aplicativo, então ferramentas como o iFunbox e o iExplorer não exibem/recuperam mais arquivos de aplicativos instalados no dispositivo se o dispositivo não estiver com jailbreak.
2021-05-15 12:48:28 +00:00
{% endhint %}
### Usando o Objection
2023-06-06 18:56:34 +00:00
Quando você inicia o Objection (`objection --gadget com.apple.mobilesafari explorer`), você encontrará o prompt dentro do diretório Bundle.
```bash
org.owasp.MSTG on (iPhone: 10.3.3) [usb] # pwd print
Current directory: /var/containers/Bundle/Application/DABF849D-493E-464C-B66B-B8B6C53A4E76/org.owasp.MSTG.app
```
2023-06-06 18:56:34 +00:00
Use o comando `env` para obter os diretórios do aplicativo e navegue até o diretório Documents.
```bash
org.owasp.MSTG on (iPhone: 10.3.3) [usb] # cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
/var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
```
Com o comando `file download <nome_do_arquivo>`, você pode baixar um arquivo do dispositivo iOS para o seu computador host e analisá-lo posteriormente.
```bash
org.owasp.MSTG on (iPhone: 10.3.3) [usb] # file download .com.apple.mobile_container_manager.metadata.plist
Downloading /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/.com.apple.mobile_container_manager.metadata.plist to .com.apple.mobile_container_manager.metadata.plist
Streaming file from device...
Writing bytes to destination...
Successfully downloaded /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/.com.apple.mobile_container_manager.metadata.plist to .com.apple.mobile_container_manager.metadata.plist
```
Você também pode fazer upload de arquivos para o dispositivo iOS com `file upload <caminho_do_arquivo_local>`.
## Obtendo e Extraindo Aplicativos
### Obtendo o Arquivo IPA de um Link de Distribuição OTA
Durante o desenvolvimento, os aplicativos às vezes são fornecidos aos testadores por meio de distribuição over-the-air (OTA). Nessa situação, você receberá um link itms-services, como o seguinte:
```
itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist
```
Você pode usar a ferramenta [ITMS services asset downloader](https://www.npmjs.com/package/itms-services) para baixar o IPA de uma URL de distribuição OTA. Instale-o via npm:
```bash
$ npm install -g itms-services
```
2023-06-06 18:56:34 +00:00
Salve o arquivo IPA localmente com o seguinte comando:
```bash
# itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa
```
### Aquisição do Aplicativo Binário
2023-06-06 18:56:34 +00:00
1. **A partir de um IPA**:
Se você tiver o IPA (provavelmente incluindo um binário de aplicativo já descriptografado), descompacte-o e você estará pronto para prosseguir. O binário do aplicativo está localizado no diretório principal do pacote (.app), por exemplo, `Payload/Telegram X.app/Telegram X`. Consulte a subseção a seguir para obter detalhes sobre a extração das listas de propriedades.
> No Finder do macOS, os diretórios .app são abertos clicando com o botão direito e selecionando "Mostrar Conteúdo do Pacote". No terminal, você pode simplesmente usar o comando `cd` para acessá-los.
2. De um **dispositivo com jailbreak**:
Se você não tiver o IPA original, será necessário um dispositivo com jailbreak onde você irá **instalar o aplicativo** (por exemplo, via App Store). Depois de instalado, você precisa **extrair o binário do aplicativo da memória e reconstruir o arquivo IPA**. Devido ao DRM, o arquivo binário do aplicativo é criptografado quando armazenado no dispositivo iOS, portanto, simplesmente copiá-lo do pacote (seja por SSH ou Objection) não será suficiente para engenharia reversa (leia a próxima seção).
### Descriptografia (Manual)
2023-06-06 18:56:34 +00:00
Ao contrário de um aplicativo Android, o binário de um aplicativo iOS **só pode ser desmontado** e não descompilado.\
Quando um aplicativo é enviado para a App Store, a Apple verifica primeiro a conduta do aplicativo e, antes de lançá-lo na App Store, **a Apple criptografa o binário usando** [**FairPlay**](https://developer.apple.com/streaming/fps/). Portanto, o download do binário da App Store é criptografado, complicando as tarefas de engenharia reversa.
2023-06-06 18:56:34 +00:00
No entanto, observe que existem outros **softwares de terceiros que podem ser usados para ofuscar** os binários resultantes.
Para executar o binário criptografado, o dispositivo precisa descriptografá-lo na memória. Em seguida, é possível **extrair o binário descriptografado da memória**.
Primeiro, verifique se o binário foi compilado com a flag PIE (Position Independent Code):
```bash
otool -Vh Original_App #Check the last word of the last line of this code
Home:
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC_64 X86_64 ALL 0x00 EXECUTE 47 6080 NOUNDEFS DYLDLINK TWOLEVEL PIE
```
2023-06-06 18:56:34 +00:00
Se estiver definido, você pode usar o script [`change_macho_flags.py`](https://chromium.googlesource.com/chromium/src/+/49.0.2623.110/build/mac/change\_mach\_o\_flags.py) para removê-lo com python2:
```bash
python change_mach_o_flags.py --no-pie Original_App
otool -Vh Hello_World
Hello_World:
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC ARM V7 0x00 EXECUTE 22 2356 NOUNDEFS DYLDLINK TWOLEVEL MH_NO_HEAP_EXECUTION
```
Agora que a flag PIE não está definida, o sistema operacional carregará o programa em um **local de início fixo** toda vez. Para encontrar esse **local**, você pode usar:
```bash
otool -l Original_App | grep -A 3 LC_SEGMENT | grep -A 1 __TEXT
segname __TEXT
vmaddr 0x00004000
```
Então, é necessário extrair a faixa de memória que precisa ser despejada:
```bash
otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
cmd LC_ENCRYPTION_INFO
cmdsize 20
cryptoff 16384
cryptsize 17416192
cryptid 0
```
O valor de **`cryptoff`** indica o endereço de início do conteúdo criptografado e o **`cryptsize`** indica o tamanho do conteúdo criptografado.
Portanto, o `endereço de início` para despejar será `vmaddr + cryptoff` e o `endereço final` será o `endereço de início + cryptsize`.\
Neste caso: `endereço_inicial = 0x4000 + 0x4000 = 0x8000` \_\_ e `endereço_final = 0x8000 + 0x109c000 = 0x10a4000`
2023-06-06 18:56:34 +00:00
Com essas informações, é necessário apenas executar o aplicativo no dispositivo com jailbreak, anexar ao processo com gdb (`gdb -p <pid>`) e despejar a memória:
```bash
dump memory dump.bin 0x8000 0x10a4000
```
Parabéns! Você conseguiu descriptografar a seção criptografada em dump.bin. Agora **transfira esse dump para o seu computador e substitua a seção criptografada pela descriptografada**:
```bash
dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App
```
Existe mais um passo a ser concluído. O aplicativo ainda está **indicando** em seus metadados que está **criptografado**, mas na verdade não está. Então, quando executado, o dispositivo tentará descriptografar a seção que já está descriptografada e falhará.\
No entanto, você pode usar ferramentas como [**MachOView**](https://sourceforge.net/projects/machoview/) para alterar essas informações. Basta abrir o binário e definir o **cryptid** como 0:
![](<../../.gitbook/assets/image (470).png>)
### Descriptografia (Automaticamente)
#### frida-ios-dump
2021-07-19 10:18:19 +00:00
Você pode usar ferramentas como [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) para **remover automaticamente a criptografia de um aplicativo**.
Primeiro, certifique-se de que a configuração no arquivo `dump.py` do **Frida-ios-dump** esteja definida como localhost com a porta 2222 ao usar o **iproxy**, ou para o endereço IP real e a porta do dispositivo do qual você deseja fazer o dump do binário.
Agora você pode usar com segurança a ferramenta para **enumerar** os **aplicativos instalados**:
```bash
$ python dump.py -l
PID Name Identifier
---- --------------- -------------------------------------
860 Cydia com.saurik.Cydia
1130 Settings com.apple.Preferences
685 Mail com.apple.mobilemail
834 Telegram ph.telegra.Telegraph
- Stocks com.apple.stocks
...
```
e você pode **extrair** **um** dos binários listados:
```bash
$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph
Start the target app ph.telegra.Telegraph
Dumping Telegram to /var/folders/qw/gz47_8_n6xx1c_lwq7pq5k040000gn/T
[frida-ios-dump]: HockeySDK.framework has been loaded.
[frida-ios-dump]: Load Postbox.framework success.
[frida-ios-dump]: libswiftContacts.dylib has been dlopen.
...
start dump /private/var/containers/Bundle/Application/14002D30-B113-4FDF-BD25-1BF740383149/Telegram.app/Frameworks/libswiftsimd.dylib
libswiftsimd.dylib.fid: 100%|██████████| 343k/343k [00:00<00:00, 1.54MB/s]
start dump /private/var/containers/Bundle/Application/14002D30-B113-4FDF-BD25-1BF740383149/Telegram.app/Frameworks/libswiftCoreData.dylib
libswiftCoreData.dylib.fid: 100%|██████████| 82.5k/82.5k [00:00<00:00, 477kB/s]
5.m4a: 80.9MB [00:14, 5.85MB/s]
0.00B [00:00, ?B/s]Generating "Telegram.ipa"
```
Depois disso, o arquivo `Telegram.ipa` será criado no seu diretório atual. Você pode validar o sucesso do dump removendo o aplicativo e reinstalando-o (por exemplo, usando [**ios-deploy**](https://github.com/ios-control/ios-deploy) `ios-deploy -b Telegram.ipa`). Observe que isso só funcionará em dispositivos com jailbreak, caso contrário, a assinatura não será válida.
#### flexdecrypt
2021-07-19 10:18:19 +00:00
2023-06-06 18:56:34 +00:00
Para **obter o arquivo ipa** de um aplicativo instalado, você também pode usar a ferramenta [**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt) ou um wrapper da ferramenta chamado [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac)**.**\
Em qualquer caso, você precisará **instalar o flexdecrypt no dispositivo** executando algo como:
2021-07-19 10:18:19 +00:00
```markup
wget https://github.com/JohnCoates/flexdecrypt/releases/download/1.1/flexdecrypt.deb
dpkg -i flexdecrypt.deb
rm flexdecrypt.deb
```
e para usar **flexdump**:
2021-07-19 10:18:19 +00:00
```bash
apt install zip unzip
wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump
flexdump list #List apps
flexdump dump Twitter.app #Create .ipa file from app
```
#### bagbak
Mais um descriptografador de aplicativos baseado em Frida. Requer um dispositivo iOS com jailbreak e [frida.re](https://www.frida.re/)
```bash
bagbak --raw Chrome
```
#### r2flutch
[r2flutch](https://github.com/as0ler/r2flutch) é uma ferramenta que usa o **radare** e o **frida** para **descriptografar** e **dump ios apps**.
2023-06-06 18:56:34 +00:00
Veja o **github** para mais informações.
## Instalando Apps
Quando você instala um aplicativo sem usar a App Store da Apple, isso é chamado de **sideloading**. Existem várias maneiras de fazer o sideloading, que são descritas abaixo. No dispositivo iOS, o processo de instalação real é então tratado pelo **daemon installd**, que irá **descompactar** e **instalar** o aplicativo. Para integrar serviços de aplicativos ou ser instalado em um dispositivo iOS, todos os **aplicativos devem ser assinados com um certificado emitido pela Apple**. Isso significa que o aplicativo só pode ser instalado após a verificação bem-sucedida da assinatura do código. Em um telefone com jailbreak, no entanto, você pode **burlar esse recurso de segurança com** [**AppSync**](http://repo.hackyouriphone.org/appsyncunified), um pacote disponível na loja Cydia. Ele contém inúmeros aplicativos úteis que aproveitam os privilégios de root fornecidos pelo jailbreak para executar funcionalidades avançadas. **AppSync é um ajuste que corrige o installd**, permitindo a instalação de pacotes IPA falsamente assinados.
2023-06-06 18:56:34 +00:00
Existem diferentes métodos para instalar um pacote IPA em um dispositivo iOS, que são descritos em detalhes abaixo.
> Observe que o iTunes não está mais disponível no macOS Catalina. Se você estiver usando uma versão mais antiga do macOS, o iTunes ainda está disponível, mas desde o iTunes 12.7 não é possível instalar aplicativos.
#### Cydia Impactor
2023-06-06 18:56:34 +00:00
[Cydia Impactor](http://www.cydiaimpactor.com) foi originalmente criado para fazer jailbreak em iPhones, mas foi reescrito para assinar e instalar pacotes IPA em dispositivos iOS via sideloading (e até mesmo arquivos APK em dispositivos Android). O Cydia Impactor está disponível para Windows, macOS e Linux. Um [guia passo a passo e etapas de solução de problemas estão disponíveis em yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/).
#### libimobiledevice
2023-06-06 18:56:34 +00:00
No Linux e também no macOS, você pode usar alternativamente o [libimobiledevice](https://www.libimobiledevice.org), uma biblioteca de protocolo de software multiplataforma e um conjunto de ferramentas para comunicação nativa com dispositivos iOS. Isso permite que você instale aplicativos por meio de uma conexão USB executando o ideviceinstaller. A conexão é implementada com o daemon de multiplexação USB [usbmuxd](https://www.theiphonewiki.com/wiki/Usbmux), que fornece um túnel TCP sobre USB.
O pacote para o libimobiledevice estará disponível no gerenciador de pacotes do seu Linux. No macOS, você pode instalar o libimobiledevice via brew:
```bash
$ brew install libimobiledevice
$ brew install ideviceinstaller
```
Após a instalação, você terá vários novos utilitários de linha de comando disponíveis, como `ideviceinfo`, `ideviceinstaller` ou `idevicedebug`.
```bash
# The following command will show detailed information about the iOS device connected via USB.
$ ideviceinfo
# The following command will install the IPA to your iOS device.
$ ideviceinstaller -i iGoat-Swift_v1.0-frida-codesigned.ipa
...
Install: Complete
# The following command will start the app in debug mode, by providing the bundle name. The bundle name can be found in the previous command after "Installing".
$ idevicedebug -d run OWASP.iGoat-Swift
```
#### ipainstaller
2023-06-06 18:56:34 +00:00
O IPA também pode ser instalado diretamente no dispositivo iOS via linha de comando com o [ipainstaller](https://github.com/autopear/ipainstaller). Após copiar o arquivo para o dispositivo, por exemplo, via scp, você pode executar o ipainstaller com o nome do arquivo IPA:
```bash
$ ipainstaller App_name.ipa
```
#### ios-deploy
No macOS, você também pode usar a ferramenta **ios-deploy** para instalar aplicativos iOS a partir da linha de comando. Você precisará descompactar seu arquivo IPA, já que o ios-deploy usa os pacotes de aplicativos para instalar os apps.
```bash
$ unzip Name.ipa
$ ios-deploy --bundle 'Payload/Name.app' -W -d -v
```
Depois que o aplicativo for instalado no dispositivo iOS, você pode simplesmente iniciá-lo adicionando a opção `-m`, que iniciará a depuração diretamente sem instalar o aplicativo novamente.
```bash
$ ios-deploy --bundle 'Payload/Name.app' -W -d -v -m
```
#### Xcode
2023-06-06 18:56:34 +00:00
Também é possível usar o IDE Xcode para instalar aplicativos iOS seguindo os seguintes passos:
2023-06-06 18:56:34 +00:00
1. Inicie o Xcode
2. Selecione **Window/Devices and Simulators**
3. Selecione o dispositivo iOS conectado e clique no sinal de **+** em **Installed Apps**.
#### Permitir a instalação do aplicativo em um dispositivo que não seja um iPad
Às vezes, um aplicativo pode exigir o uso em um dispositivo iPad. Se você só tiver dispositivos iPhone ou iPod touch, é possível forçar a instalação e o uso do aplicativo nesses tipos de dispositivos. Para fazer isso, altere o valor da propriedade **UIDeviceFamily** para o valor **1** no arquivo **Info.plist**.
```markup
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
</array>
</dict>
</plist>
```
É importante observar que alterar esse valor quebrará a assinatura original do arquivo IPA, portanto, você precisa re-assinar o IPA, após a atualização, para instalá-lo em um dispositivo no qual a validação da assinatura não foi desativada.
Essa bypass pode não funcionar se o aplicativo requer recursos específicos para iPads modernos, enquanto seu iPhone ou iPod é um pouco mais antigo.
2022-04-28 16:01:33 +00:00
Os valores possíveis para a propriedade [UIDeviceFamily](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW11) podem ser encontrados na documentação do desenvolvedor da Apple.
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
* Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>