iOS Basic Testing Operations

Support HackTricks

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.

Ferramentas de linha de comando oferecem métodos alternativos para recuperar o UDID:

  • Usando a ferramenta I/O Registry Explorer ioreg:

$ ioreg -p IOUSB -l | grep "USB Serial"
  • Usando ideviceinstaller para macOS (e Linux):

$ brew install ideviceinstaller
$ idevice_id -l
  • Utilizando system_profiler:

$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
  • Usando instruments para listar dispositivos:

$ 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@<device_ip_address>. É crucial alterar as senhas padrão (alpine) para os usuários root e mobile para proteger o dispositivo.

SSH via 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:

$ 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:

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 do aplicativo, 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.

objection --gadget com.apple.mobilesafari explorer
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
file download <filename>

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.

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:

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.

otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
dump memory dump.bin 0x8000 0x10a4000

Substituindo a Seção Criptografada:

Substitua a seção criptografada no binário original do aplicativo pelo despejo descriptografado.

dd bs=1 seek=<starting_address> 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 é utilizada para descriptografar e extrair aplicativos automaticamente de dispositivos iOS. Inicialmente, é necessário configurar o dump.py para se 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:

$ python dump.py -l

Para despejar um aplicativo específico, como o Telegram, o seguinte comando é usado:

$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph

Este comando inicia o despejo 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.

flexdecrypt

A ferramenta flexdecrypt, junto com seu wrapper flexdump, 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 despejar aplicativos, conforme mostrado nos comandos abaixo:

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, outra ferramenta baseada em Frida, requer um dispositivo com jailbreak para a descriptografia de aplicativos:

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.

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 encontradas em yalujailbreak.net.

  • 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. No entanto, essa modificação requer a re-assinatura do arquivo IPA devido às 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

Support HackTricks

Last updated