# 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 %}
## **Resumen de la Identificaci贸n y Acceso de Dispositivos iOS**
### **Identificaci贸n del UDID de un Dispositivo iOS**
Para identificar un dispositivo iOS de manera 煤nica, se utiliza una secuencia de 40 d铆gitos conocida como UDID. En macOS Catalina o versiones m谩s recientes, esto se puede encontrar en la **aplicaci贸n Finder**, ya que iTunes ya no est谩 presente. El dispositivo, una vez conectado por USB y seleccionado en Finder, revela su UDID entre otra informaci贸n cuando se hace clic en los detalles bajo su nombre.
Para versiones de macOS anteriores a Catalina, iTunes facilita el descubrimiento del UDID. Instrucciones detalladas se pueden encontrar [aqu铆](http://www.iclarified.com/52179/how-to-find-your-iphones-udid).
Las herramientas de l铆nea de comandos ofrecen m茅todos alternativos para recuperar el UDID:
* **Usando la herramienta I/O Registry Explorer `ioreg`:**
```bash
$ ioreg -p IOUSB -l | grep "USB Serial"
```
* **Usando `ideviceinstaller` para macOS (y 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:"
```
* **Empleando `instruments` para listar dispositivos:**
```bash
$ instruments -s devices
```
### **Accediendo al Shell del Dispositivo**
El **acceso SSH** se habilita al instalar el **paquete OpenSSH** despu茅s del jailbreak, permitiendo conexiones a trav茅s de `ssh root@`. Es crucial cambiar las contrase帽as predeterminadas (`alpine`) para los usuarios `root` y `mobile` para asegurar el dispositivo.
**SSH a trav茅s de USB** se vuelve necesario en ausencia de Wi-Fi, utilizando `iproxy` para mapear los puertos del dispositivo para conexiones SSH. Esta configuraci贸n permite el acceso SSH a trav茅s de USB ejecutando:
```bash
$ iproxy 2222 22
$ ssh -p 2222 root@localhost
```
**Las aplicaciones de shell en el dispositivo**, como NewTerm 2, facilitan la interacci贸n directa con el dispositivo, especialmente 煤til para la soluci贸n de problemas. **Las shells SSH inversas** tambi茅n se pueden establecer para el acceso remoto desde la computadora host.
### **Restablecimiento de Contrase帽as Olvidadas**
Para restablecer una contrase帽a olvidada a la predeterminada (`alpine`), es necesario editar el archivo `/private/etc/master.passwd`. Esto implica reemplazar el hash existente con el hash para `alpine` junto a las entradas de usuario `root` y `mobile`.
## **T茅cnicas de Transferencia de Datos**
### **Transferencia de Archivos de Datos de la Aplicaci贸n**
**Archivado y Recuperaci贸n a trav茅s de SSH y SCP:** Es sencillo archivar el directorio Data de la aplicaci贸n usando `tar` y luego transferirlo usando `scp`. El comando a continuaci贸n archiva el directorio Data en un archivo .tgz, que luego se extrae del 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 .
```
### **Herramientas de Interfaz Gr谩fica de Usuario**
**Usando iFunbox e iExplorer:** Estas herramientas GUI son 煤tiles para gestionar archivos en dispositivos iOS. Sin embargo, a partir de iOS 8.4, Apple restringi贸 el acceso de estas herramientas al sandbox de la aplicaci贸n a menos que el dispositivo est茅 jailbroken.
### **Usando Objection para la Gesti贸n de Archivos**
**Shell Interactiva con Objection:** Lanzar objection proporciona acceso al directorio Bundle de una aplicaci贸n. Desde aqu铆, puedes navegar al directorio Documents de la aplicaci贸n y gestionar archivos, incluyendo descargarlos y subirlos hacia y desde el dispositivo iOS.
```bash
objection --gadget com.apple.mobilesafari explorer
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
file download
```
## **Obtenci贸n y Extracci贸n de Aplicaciones**
### **Adquisici贸n del Archivo IPA**
**Enlace de Distribuci贸n Over-The-Air (OTA):** Las aplicaciones distribuidas para pruebas a trav茅s de OTA se pueden descargar utilizando la herramienta de descarga de activos de servicios ITMS, que se instala a trav茅s de npm y se utiliza para guardar el archivo 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
```
### **Extracci贸n del Binario de la Aplicaci贸n**
1. **Desde un IPA:** Descomprime el IPA para acceder al binario de la aplicaci贸n descifrado.
2. **Desde un Dispositivo Jailbroken:** Instala la aplicaci贸n y extrae el binario descifrado de la memoria.
### **Proceso de Descifrado**
**Descripci贸n General del Descifrado Manual:** Los binarios de aplicaciones de iOS est谩n cifrados por Apple utilizando FairPlay. Para realizar ingenier铆a inversa, se debe volcar el binario descifrado de la memoria. El proceso de descifrado implica verificar la bandera PIE, ajustar las banderas de memoria, identificar la secci贸n cifrada y luego volcar y reemplazar esta secci贸n con su forma descifrada.
**Verificaci贸n y Modificaci贸n de la Bandera PIE:**
```bash
otool -Vh Original_App
python change_macho_flags.py --no-pie Original_App
otool -Vh Hello_World
```
**Identificaci贸n de la Secci贸n Encriptada y Volcado de Memoria:**
Determine las direcciones de inicio y fin de la secci贸n encriptada utilizando `otool` y volcar la memoria desde el dispositivo con jailbreak usando gdb.
```bash
otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
dump memory dump.bin 0x8000 0x10a4000
```
**Sobrescribiendo la Secci贸n Encriptada:**
Reemplace la secci贸n encriptada en el binario original de la aplicaci贸n con el volcado desencriptado.
```bash
dd bs=1 seek= conv=notrunc if=dump.bin of=Original_App
```
**Finalizando la Desencriptaci贸n:** Modifica los metadatos del binario para indicar la ausencia de encriptaci贸n utilizando herramientas como **MachOView**, estableciendo `cryptid` en 0.
### **Desencriptaci贸n (Autom谩ticamente)**
#### **frida-ios-dump**
La herramienta [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) se emplea para **desencriptar y extraer aplicaciones autom谩ticamente** de dispositivos iOS. Inicialmente, se debe configurar `dump.py` para conectarse al dispositivo iOS, lo que se puede hacer a trav茅s de localhost en el puerto 2222 mediante **iproxy** o directamente a trav茅s de la direcci贸n IP del dispositivo y el puerto.
Las aplicaciones instaladas en el dispositivo se pueden listar con el comando:
```bash
$ python dump.py -l
```
Para volcar una aplicaci贸n espec铆fica, como Telegram, se utiliza el siguiente comando:
```bash
$ python3 dump.py -u "root" -p "" ph.telegra.Telegraph
```
Este comando inicia el volcado de la aplicaci贸n, lo que resulta en la creaci贸n de un archivo `Telegram.ipa` en el directorio actual. Este proceso es adecuado para dispositivos con jailbreak, ya que las aplicaciones no firmadas o falsamente firmadas pueden reinstalarse utilizando herramientas como [**ios-deploy**](https://github.com/ios-control/ios-deploy).
#### **flexdecrypt**
La herramienta [**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt), junto con su envoltura [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac), permite la extracci贸n de archivos IPA de aplicaciones instaladas. Los comandos de instalaci贸n para **flexdecrypt** en el dispositivo incluyen la descarga e instalaci贸n del paquete `.deb`. **flexdump** se puede usar para listar y volcar aplicaciones, como se muestra en los comandos a continuaci贸n:
```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), otra herramienta basada en Frida, requiere un dispositivo con jailbreak para la decryption de aplicaciones:
```bash
bagbak --raw Chrome
```
#### **r2flutch**
**r2flutch**, utilizando tanto radare como frida, sirve para la decryption y dumping de aplicaciones. M谩s informaci贸n se puede encontrar en su [**p谩gina de GitHub**](https://github.com/as0ler/r2flutch).
### **Instalaci贸n de Aplicaciones**
**Sideloading** se refiere a la instalaci贸n de aplicaciones fuera de la App Store oficial. Este proceso es manejado por el **installd daemon** y requiere que las aplicaciones est茅n firmadas con un certificado emitido por Apple. Los dispositivos con jailbreak pueden eludir esto a trav茅s de **AppSync**, permitiendo la instalaci贸n de paquetes IPA falsamente firmados.
#### **Herramientas de Sideloading**
- **Cydia Impactor**: Una herramienta para firmar e instalar archivos IPA en iOS y archivos APK en Android. Gu铆as y soluci贸n de problemas se pueden encontrar en [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/).
- **libimobiledevice**: Una biblioteca para Linux y macOS para comunicarse con dispositivos iOS. Se proporcionan comandos de instalaci贸n y ejemplos de uso para ideviceinstaller para instalar aplicaciones a trav茅s de USB.
- **ipainstaller**: Esta herramienta de l铆nea de comandos permite la instalaci贸n directa de aplicaciones en dispositivos iOS.
- **ios-deploy**: Para usuarios de macOS, ios-deploy instala aplicaciones de iOS desde la l铆nea de comandos. Descomprimir el IPA y usar la bandera `-m` para el lanzamiento directo de la aplicaci贸n son parte del proceso.
- **Xcode**: Utiliza Xcode para instalar aplicaciones navegando a **Window/Devices and Simulators** y a帽adiendo la aplicaci贸n a **Installed Apps**.
#### **Permitir la Instalaci贸n de Aplicaciones en Dispositivos que No Son iPad**
Para instalar aplicaciones espec铆ficas de iPad en dispositivos iPhone o iPod touch, el valor **UIDeviceFamily** en el archivo **Info.plist** debe cambiarse a **1**. Sin embargo, esta modificaci贸n requiere volver a firmar el archivo IPA debido a las verificaciones de validaci贸n de firma.
**Nota**: Este m茅todo puede fallar si la aplicaci贸n exige capacidades exclusivas de modelos de iPad m谩s nuevos mientras se utiliza un iPhone o iPod touch m谩s antiguo.
## Referencias
* [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 %}