# iOS Basic Testing Operations {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %} ## **Resumo da Identificação e Acesso a Dispositivos iOS** ### **Identificando o UDID de um Dispositivo iOS** Para identificar um dispositivo iOS de forma única, utiliza-se uma sequência de 40 dígitos conhecida como UDID. No macOS Catalina ou versões mais recentes, isso pode ser encontrado no **aplicativo Finder**, já que o iTunes não está mais presente. O dispositivo, uma vez conectado via USB e selecionado no Finder, revela seu UDID entre outras informações quando os detalhes sob seu nome são clicados. Para versões do macOS anteriores ao Catalina, o iTunes facilita a descoberta do UDID. Instruções detalhadas podem ser encontradas [aqui](http://www.iclarified.com/52179/how-to-find-your-iphones-udid). Ferramentas de linha de comando oferecem métodos alternativos para recuperar o UDID: * **Usando a ferramenta I/O Registry Explorer `ioreg`:** ```bash $ ioreg -p IOUSB -l | grep "USB Serial" ``` * **Usando `ideviceinstaller` para macOS (e Linux):** ```bash $ brew install ideviceinstaller $ idevice_id -l ``` * **Utilizando `system_profiler`:** ```bash $ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:" ``` * **Usando `instruments` para listar dispositivos:** ```bash $ instruments -s devices ``` ### **Acessando o Shell do Dispositivo** O **acesso SSH** é habilitado instalando o **pacote OpenSSH** após o jailbreak, permitindo conexões via `ssh root@`. É crucial alterar as senhas padrão (`alpine`) para os usuários `root` e `mobile` para proteger o dispositivo. **SSH sobre USB** torna-se necessário na ausência de Wi-Fi, usando `iproxy` para mapear portas do dispositivo para conexões SSH. Essa configuração permite o acesso SSH através de USB executando: ```bash $ iproxy 2222 22 $ ssh -p 2222 root@localhost ``` **Aplicativos de shell no dispositivo**, como NewTerm 2, facilitam a interação direta com o dispositivo, especialmente útil para solução de problemas. **Shells SSH reversos** também podem ser estabelecidos para acesso remoto a partir do computador host. ### **Redefinindo Senhas Esquecidas** Para redefinir uma senha esquecida de volta ao padrão (`alpine`), é necessário editar o arquivo `/private/etc/master.passwd`. Isso envolve substituir o hash existente pelo hash para `alpine` ao lado das entradas de usuário `root` e `mobile`. ## **Técnicas de Transferência de Dados** ### **Transferindo Arquivos de Dados do App** **Arquivamento e Recuperação via SSH e SCP:** É simples arquivar o diretório Data do aplicativo usando `tar` e, em seguida, transferi-lo usando `scp`. O comando abaixo arquiva o diretório Data em um arquivo .tgz, que é então puxado do dispositivo: ```bash tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693 exit scp -P 2222 root@localhost:/tmp/data.tgz . ``` ### **Ferramentas de Interface Gráfica do Usuário** **Usando iFunbox e iExplorer:** Essas ferramentas GUI são úteis para gerenciar arquivos em dispositivos iOS. No entanto, a partir do iOS 8.4, a Apple restringiu o acesso dessas ferramentas ao sandbox da aplicação, a menos que o dispositivo esteja jailbroken. ### **Usando Objection para Gerenciamento de Arquivos** **Shell Interativo com Objection:** Iniciar o objection fornece acesso ao diretório Bundle de um aplicativo. A partir daqui, você pode navegar até o diretório Documents do aplicativo e gerenciar arquivos, incluindo baixar e enviar arquivos para e do dispositivo iOS. ```bash objection --gadget com.apple.mobilesafari explorer cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents file download ``` ## **Obtendo e Extraindo Aplicativos** ### **Adquirindo o Arquivo IPA** **Link de Distribuição Over-The-Air (OTA):** Aplicativos distribuídos para teste via OTA podem ser baixados usando a ferramenta de download de ativos dos serviços ITMS, que é instalada via npm e usada para salvar o arquivo IPA localmente. ```bash npm install -g itms-services itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa ``` ### **Extraindo o Binário do App** 1. **De um IPA:** Descompacte o IPA para acessar o binário do app descriptografado. 2. **De um Dispositivo Jailbroken:** Instale o app e extraia o binário descriptografado da memória. ### **Processo de Descriptografia** **Visão Geral da Descriptografia Manual:** Os binários de apps iOS são criptografados pela Apple usando FairPlay. Para fazer engenharia reversa, é necessário despejar o binário descriptografado da memória. O processo de descriptografia envolve verificar a flag PIE, ajustar as flags de memória, identificar a seção criptografada e, em seguida, despejar e substituir essa seção por sua forma descriptografada. **Verificando e Modificando a Flag PIE:** ```bash otool -Vh Original_App python change_macho_flags.py --no-pie Original_App otool -Vh Hello_World ``` **Identificando a Seção Criptografada e Despejando a Memória:** Determine os endereços de início e fim da seção criptografada usando `otool` e despeje a memória do dispositivo com jailbreak usando gdb. ```bash otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO dump memory dump.bin 0x8000 0x10a4000 ``` **Sobrescrevendo a Seção Criptografada:** Substitua a seção criptografada no binário original do aplicativo pelo despejo descriptografado. ```bash dd bs=1 seek= conv=notrunc if=dump.bin of=Original_App ``` **Finalizando a Descriptografia:** Modifique os metadados do binário para indicar a ausência de criptografia usando ferramentas como **MachOView**, definindo o `cryptid` como 0. ### **Descriptografia (Automaticamente)** #### **frida-ios-dump** A ferramenta [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) é empregada para **descriptografar e extrair aplicativos automaticamente** de dispositivos iOS. Inicialmente, deve-se configurar o `dump.py` para conectar ao dispositivo iOS, o que pode ser feito através do localhost na porta 2222 via **iproxy** ou diretamente pelo endereço IP do dispositivo e porta. Os aplicativos instalados no dispositivo podem ser listados com o comando: ```bash $ python dump.py -l ``` Para despejar um aplicativo específico, como o Telegram, o seguinte comando é usado: ```bash $ python3 dump.py -u "root" -p "" ph.telegra.Telegraph ``` Este comando inicia o dump do aplicativo, resultando na criação de um arquivo `Telegram.ipa` no diretório atual. Este processo é adequado para dispositivos com jailbreak, pois aplicativos não assinados ou falsamente assinados podem ser reinstalados usando ferramentas como [**ios-deploy**](https://github.com/ios-control/ios-deploy). #### **flexdecrypt** A ferramenta [**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt), junto com seu wrapper [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac), permite a extração de arquivos IPA de aplicativos instalados. Os comandos de instalação para **flexdecrypt** no dispositivo incluem o download e a instalação do pacote `.deb`. **flexdump** pode ser usado para listar e fazer dump de aplicativos, conforme mostrado nos comandos abaixo: ```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 flexdump dump Twitter.app ``` #### **bagbak** [**bagbak**](https://github.com/ChiChou/bagbak), outra ferramenta baseada em Frida, requer um dispositivo com jailbreak para a descriptografia de aplicativos: ```bash bagbak --raw Chrome ``` #### **r2flutch** **r2flutch**, utilizando tanto radare quanto frida, serve para descriptografar e despejar aplicativos. Mais informações podem ser encontradas na sua [**página do GitHub**](https://github.com/as0ler/r2flutch). ### **Instalando Aplicativos** **Sideloading** refere-se à instalação de aplicativos fora da App Store oficial. Este processo é gerenciado pelo **installd daemon** e requer que os aplicativos sejam assinados com um certificado emitido pela Apple. Dispositivos com jailbreak podem contornar isso através do **AppSync**, permitindo a instalação de pacotes IPA falsamente assinados. #### **Ferramentas de Sideloading** - **Cydia Impactor**: Uma ferramenta para assinar e instalar arquivos IPA no iOS e arquivos APK no Android. Guias e soluções de problemas podem ser encontrados em [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/). - **libimobiledevice**: Uma biblioteca para Linux e macOS para se comunicar com dispositivos iOS. Comandos de instalação e exemplos de uso para ideviceinstaller são fornecidos para instalar aplicativos via USB. - **ipainstaller**: Esta ferramenta de linha de comando permite a instalação direta de aplicativos em dispositivos iOS. - **ios-deploy**: Para usuários de macOS, ios-deploy instala aplicativos iOS a partir da linha de comando. Descompactar o IPA e usar a flag `-m` para lançamento direto do aplicativo fazem parte do processo. - **Xcode**: Utilize o Xcode para instalar aplicativos navegando até **Window/Devices and Simulators** e adicionando o aplicativo a **Installed Apps**. #### **Permitir Instalação de Aplicativos em Dispositivos que Não São iPad** Para instalar aplicativos específicos para iPad em dispositivos iPhone ou iPod touch, o valor **UIDeviceFamily** no arquivo **Info.plist** precisa ser alterado para **1**. Essa modificação, no entanto, requer a re-assinatura do arquivo IPA devido a verificações de validação de assinatura. **Nota**: Este método pode falhar se o aplicativo exigir capacidades exclusivas de modelos mais novos de iPad enquanto usa um iPhone ou iPod touch mais antigo. ## Referências * [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/) * [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/) * [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/) * [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/) * [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/) {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}