mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-24 20:13:37 +00:00
412 lines
25 KiB
Markdown
412 lines
25 KiB
Markdown
# Operações Básicas de Teste no iOS
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras formas de apoiar o HackTricks:
|
|
|
|
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
|
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
|
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) no github.
|
|
|
|
</details>
|
|
|
|
## Obtendo o UDID de um dispositivo iOS
|
|
|
|
{% hint style="info" %}
|
|
Realize estas ações com o dispositivo **conectado** ao computador via **USB** e com o **dispositivo** **desbloqueado**.
|
|
{% endhint %}
|
|
|
|
O UDID é uma sequência única de 40 dígitos de 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**, já que o iTunes não está mais disponível no Catalina. Basta selecionar o dispositivo iOS conectado no Finder e **clicar na informação abaixo do nome do dispositivo iOS** para percorrer por ela. 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, 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 aba de resumo. Ao clicar nisso, você percorrerá diferentes metadados do dispositivo iOS, incluindo seu UDID.
|
|
|
|
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:
|
|
|
|
* 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"
|
|
```
|
|
* Usando [ideviceinstaller](https://github.com/libimobiledevice/ideviceinstaller) (também disponível no Linux):
|
|
|
|
```bash
|
|
$ brew install ideviceinstaller
|
|
$ idevice_id -l
|
|
316f01bd160932d2bf2f95f1f142bc29b1c62dbc
|
|
```
|
|
* 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
|
|
```
|
|
* Usando instruments:
|
|
|
|
```bash
|
|
$ instruments -s devices
|
|
```
|
|
|
|
## Acessando o Shell do Dispositivo
|
|
|
|
Após realizar o jailbreak do dispositivo, você deve ter instalado um 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#
|
|
```
|
|
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 conectar-se através da senha padrão bem conhecida, o que lhes dará acesso root ao seu dispositivo.
|
|
|
|
### **Conectar a um Dispositivo via SSH por USB**
|
|
|
|
Durante um teste de caixa preta real, 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.
|
|
|
|
Conecte o macOS a um dispositivo iOS instalando e iniciando o iproxy:
|
|
```bash
|
|
$ brew install libimobiledevice
|
|
$ iproxy 2222 22
|
|
waiting for connection
|
|
```
|
|
O comando acima mapeia a porta `22` no 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 usar SSH via USB.
|
|
|
|
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 nota sobre USB de um iDevice: em um dispositivo iOS, você não pode mais fazer conexões de dados após 1 hora em estado 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 depuração em caso de, por exemplo, problemas de rede ou verificar alguma configuração. 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 desta escrita).
|
|
|
|
Além disso, existem alguns jailbreaks que explicitamente desabilitam 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 partir do seu computador host a ele.
|
|
|
|
Abrir um shell reverso via SSH pode ser feito executando o comando `ssh -R <remote_port>:localhost:22 <username>@<host_computer_ip>`.
|
|
|
|
No aplicativo shell no dispositivo, execute o seguinte comando e, quando solicitado, insira a senha do usuário `mstg` do computador host:
|
|
```bash
|
|
ssh -R 2222:localhost:22 mstg@192.168.197.235
|
|
```
|
|
No computador host, execute o seguinte comando e, quando solicitado, insira 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`**:
|
|
|
|
1. Edite o arquivo `/private/etc/master.passwd` no 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
|
|
```
|
|
3. Altere `xxxxxxxxx` para `/smx7MYTQIi2M` (que é a senha hash `alpine`)
|
|
4. Salve e saia
|
|
|
|
## Transferência de Dados
|
|
|
|
### Copiando Arquivos de Dados de Aplicativos via SSH e SCP
|
|
|
|
Como sabemos agora, arquivos do nosso aplicativo são armazenados no diretório Data. Você pode agora simplesmente arquivar o diretório Data com `tar` e puxá-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 iFunbox
|
|
|
|
[**iFunbox**](https://www.i-funbox.com/en/page-download.html) é uma aplicação GUI que pode ser usada para várias coisas (entre elas, fazer upload e download de arquivos).\
|
|
Outra ferramenta GUI para esse propósito é [**iExplorer**](https://macroplant.com/iexplorer).
|
|
|
|
{% hint style="info" %}
|
|
A partir da versão 8.4 do iOS, a Apple **restringiu o acesso dos gerenciadores de terceiros ao sandbox de aplicativos**, então ferramentas como iFunbox e iExplorer não exibem/recuperam mais arquivos de aplicativos instalados no dispositivo, a menos que o dispositivo tenha passado por jailbreak.
|
|
{% endhint %}
|
|
|
|
### Usando Objection
|
|
|
|
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
|
|
```
|
|
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 <filename>`, 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 <local_file_path>`.
|
|
|
|
## Obtendo e Extraindo Apps
|
|
|
|
### Obtendo o Arquivo IPA de um Link de Distribuição OTA
|
|
|
|
Durante o desenvolvimento, apps são às vezes fornecidos para testadores via 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-a via npm:
|
|
```bash
|
|
$ npm install -g itms-services
|
|
```
|
|
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 Binário do App
|
|
|
|
1. **De um IPA**:
|
|
|
|
Se você tem o IPA (provavelmente incluindo um binário do app já descriptografado), descompacte-o e você está pronto para começar. O binário do app está localizado no diretório principal do pacote (.app), por exemplo, `Payload/Telegram X.app/Telegram X`. Veja a subseção seguinte para detalhes sobre a extração das listas de propriedades.
|
|
|
|
> No Finder do macOS, 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 `cd` para entrar neles.
|
|
2. De um **dispositivo com Jailbreak**:
|
|
|
|
Se você não tem o IPA original, então você precisa de um dispositivo com Jailbreak onde você irá **instalar o app** (por exemplo, via App Store). Uma vez instalado, você precisa **extrair o binário do app da memória e reconstruir o arquivo IPA**. Por causa do DRM, o arquivo binário do app é criptografado quando está armazenado no dispositivo iOS, então simplesmente puxá-lo do Bundle (seja através de SSH ou Objection) não será suficiente para engenharia reversa (leia a próxima seção).
|
|
|
|
### Descriptografia (Manual)
|
|
|
|
Ao contrário de um Aplicativo Android, o binário de um app iOS **só pode ser desmontado** e não descompilado.\
|
|
Quando um aplicativo é enviado para a app store, a Apple primeiro verifica a conduta do app e antes de liberá-lo para a app-store, **a Apple criptografa o binário usando** [**FairPlay**](https://developer.apple.com/streaming/fps/). Então o binário baixado da app store é criptografado complicando as tarefas de engenharia reversa.
|
|
|
|
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. Então, é possível **despejar o binário descriptografado da memória**.
|
|
|
|
Primeiro, verifique se o binário foi compilado com a flag PIE (Código Independente de Posição):
|
|
```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
|
|
```
|
|
Se estiver configurado, 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 OS carregará o programa em um **local de início fixo** todas as vezes. Para encontrar este **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 o intervalo de memória que precisa ser despejado:
|
|
```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 inicial do conteúdo criptografado e **`cryptsize`** indica o tamanho do conteúdo criptografado.
|
|
|
|
Assim, o `endereço inicial` para o dump será `vmaddr + cryptoff` e o `endereço final` será `endereço inicial + cryptsize`\
|
|
Neste caso: `start_address = 0x4000 + 0x4000 = 0x8000` \_\_ e `end_address = 0x8000 + 0x109c000 = 0x10a4000`
|
|
|
|
Com essa informação, basta executar a aplicação 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ê descriptografou a seção criptografada em dump.bin. Agora **transfira este 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
|
|
```
|
|
Há mais um passo a completar. A aplicação ainda está **indicando** em seus metadados que está **criptografada**, mas **não está**. Então, quando executada, o dispositivo tentará descriptografar a seção já descriptografada e vai falhar.
|
|
No entanto, você pode usar ferramentas como [**MachOView**](https://sourceforge.net/projects/machoview/) para alterar essa informação. Basta abrir o binário e definir o **cryptid** para 0:
|
|
|
|
![](<../../.gitbook/assets/image (470).png>)
|
|
|
|
### Descriptografia (Automática)
|
|
|
|
#### frida-ios-dump
|
|
|
|
Você pode usar ferramentas como [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) para **remover automaticamente a criptografia de um app**.
|
|
|
|
Primeiro, certifique-se de que a configuração no **Frida-ios-dump** `dump.py` esteja definida para localhost com a porta 2222 quando usar **iproxy**, ou para o endereço IP real e porta do dispositivo de onde você deseja extrair o binário.
|
|
|
|
Agora você pode usar a ferramenta com segurança para **enumerar** os **apps** **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 **dump** **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"
|
|
```
|
|
Após isso, 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`). Note que isso só funcionará em dispositivos com jailbreak, pois caso contrário a assinatura não será válida.
|
|
|
|
#### flexdecrypt
|
|
|
|
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)**.**\
|
|
De qualquer forma, você precisará **instalar o flexdecrypt no dispositivo** executando algo como:
|
|
```markup
|
|
wget https://github.com/JohnCoates/flexdecrypt/releases/download/1.1/flexdecrypt.deb
|
|
dpkg -i flexdecrypt.deb
|
|
rm flexdecrypt.deb
|
|
```
|
|
e para usar o **flexdump**:
|
|
```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 decryptor de App baseado em frida. Requer 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 utiliza **radare** e **frida** para **decifrar** e **extrair apps ios**.
|
|
|
|
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 sideloading, descritas abaixo. No dispositivo iOS, o processo de instalação é então gerenciado pelo **daemon installd**, que irá **desempacotar** 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. No entanto, em um telefone com jailbreak, você pode **contornar esse recurso de segurança com** [**AppSync**](http://repo.hackyouriphone.org/appsyncunified), um pacote disponível na loja Cydia. Ele contém inúmeras aplicações úteis que aproveitam os privilégios de root fornecidos pelo jailbreak para executar funcionalidades avançadas. **AppSync é um tweak que corrige o installd**, permitindo a instalação de pacotes IPA com assinatura falsa.
|
|
|
|
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
|
|
|
|
[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é arquivos APK em dispositivos Android). 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
|
|
|
|
No Linux e também no macOS, você pode alternativamente usar [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 instalar aplicativos por 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 libimobiledevice estará disponível no gerenciador de pacotes do seu Linux. No macOS, você pode instalar libimobiledevice via brew:
|
|
```bash
|
|
$ brew install libimobiledevice
|
|
$ brew install ideviceinstaller
|
|
```
|
|
Após a instalação, você terá várias novas ferramentas 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
|
|
|
|
O IPA também pode ser instalado diretamente no dispositivo iOS via linha de comando com [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 IPA, pois o ios-deploy usa os pacotes de aplicativos para instalar apps.
|
|
```bash
|
|
$ unzip Name.ipa
|
|
$ ios-deploy --bundle 'Payload/Name.app' -W -d -v
|
|
```
|
|
Após a instalação do app no dispositivo iOS, você pode simplesmente iniciá-lo adicionando a flag `-m`, que iniciará o debug diretamente sem instalar o app novamente.
|
|
```bash
|
|
$ ios-deploy --bundle 'Payload/Name.app' -W -d -v -m
|
|
```
|
|
#### Xcode
|
|
|
|
É possível também usar a IDE Xcode para instalar apps iOS seguindo os passos abaixo:
|
|
|
|
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 Instalação de Aplicativos em Dispositivo que Não seja iPad
|
|
|
|
Às vezes, um aplicativo pode exigir ser usado em um dispositivo iPad. Se você possui apenas dispositivos iPhone ou iPod touch, então pode forçar o aplicativo a aceitar ser instalado e usado nesses tipos de dispositivos. Você pode fazer isso alterando 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 notar que alterar esse valor quebrará a assinatura original do arquivo IPA, então você precisará assinar novamente o IPA, após a atualização, para poder instalá-lo em um dispositivo no qual a validação de assinatura não tenha sido desativada.
|
|
|
|
Esse bypass pode não funcionar se o aplicativo exigir capacidades específicas para iPads modernos enquanto seu iPhone ou iPod for um pouco mais antigo.
|
|
|
|
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 da Apple Developer.
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras formas de apoiar o HackTricks:
|
|
|
|
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
|
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
|
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|