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 nas informações abaixo do nome do dispositivo iOS** para iterar por ele. Além do UDID, você pode encontrar o número de série, IMEI e outras informações úteis.
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 guia Resumo. Ao clicar nisso, você iterará por diferentes metadados do dispositivo iOS, incluindo seu UDID.
Para habilitar o acesso SSH ao seu dispositivo iOS, você pode instalar o **pacote OpenSSH**. Depois de instalado, você pode acessar seu dispositivo via ssh executando `ssh root@<device_ip_address>`, que fará login como usuário root:
> Lembre-se de alterar a senha padrão para ambos os usuários `root` e `mobile`, pois qualquer pessoa na mesma rede pode encontrar o endereço IP do seu dispositivo e se conectar via senha padrão conhecida, o que lhes dará acesso root ao seu dispositivo.
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.
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.
> 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 em um estado bloqueado, a menos que você o desbloqueie novamente devido ao Modo Restrito USB, que foi introduzido com o iOS 11.4.1.
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, 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 fim (ele suporta iOS 6.0 a 12.1.2 no momento em que este texto foi escrito).
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.
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**
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 puxá-lo do dispositivo com `scp`:
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.
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
Durante o desenvolvimento, os aplicativos são às vezes fornecidos aos testadores por meio de distribuição over-the-air (OTA). Nessa situação, você receberá um link itms-services, como o seguinte:
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:
Se você tiver o IPA (provavelmente incluindo um binário de aplicativo já descriptografado), descompacte-o e estará pronto para começar. O binário do aplicativo está localizado no diretório do pacote principal (.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 do mouse e selecionando "Mostrar conteúdo do pacote". No terminal, você pode simplesmente `cd` para eles.
Se você não tiver o IPA original, precisará de um dispositivo com jailbreak onde 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 puxá-lo do Bundle (por meio de SSH ou Objection) não será suficiente para engenharia reversa (leia a próxima seção).
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 à App Store, a Apple primeiro verifica 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.
Para executar o binário criptografado, o dispositivo precisa descriptografá-lo na memória. Em seguida, é possível **despejar o binário descriptografado da memória**.
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:
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 este **local**, você pode usar:
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:
Parabéns! Você descriptografou a seção criptografada em dump.bin. Agora **transfira este dump para o seu computador e sobrescreva a seção criptografada com a seção descriptografada**:
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á foi descriptografada e falhará.\
No entanto, você pode usar ferramentas como o [**MachOView**](https://sourceforge.net/projects/machoview/) para alterar essas informações. Basta abrir o binário e definir o **cryptid** como 0:
Você pode usar ferramentas como o [**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 despejar o binário.
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 o [**ios-deploy**](https://github.com/ios-control/ios-deploy) `ios-deploy -b Telegram.ipa`). Note que isso só funcionará em dispositivos com jailbreak, caso contrário, a assinatura não será válida.
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:
Quando você instala um aplicativo sem usar a App Store da Apple, isso é chamado de **sideloading**. Existem várias maneiras de fazer sideloading, que são descritas abaixo. No dispositivo iOS, o processo real de instalação é 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 **contornar 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.
> 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 estará disponível, mas desde o iTunes 12.7 não é possível instalar aplicativos.
[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/).
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.
# 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".
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:
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, já que o ios-deploy usa os pacotes de aplicativos para instalar aplicativos.
Depois que o aplicativo é instalado no dispositivo iOS, você pode simplesmente iniciá-lo adicionando a flag `-m`, que iniciará a depuração diretamente sem instalar o aplicativo novamente.
Às vezes, um aplicativo pode exigir o uso em um dispositivo iPad. Se você só tiver dispositivos iPhone ou iPod touch, poderá forçar a instalação e o uso do aplicativo nesses tipos de dispositivos. Você pode fazer isso alterando o valor da propriedade **UIDeviceFamily** para o valor **1** no arquivo **Info.plist**.
É importante observar que a alteração desse valor irá 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 tenha sido desativada.
Essa técnica de bypass pode não funcionar se o aplicativo requer recursos específicos de iPads modernos enquanto seu iPhone ou iPod é um pouco mais antigo.
Os possíveis valores 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.
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer 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)
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do 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 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.