* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
El UDID es una secuencia única de 40 dígitos, compuesta por letras y números, que se utiliza para identificar un dispositivo iOS. Puedes encontrar el UDID de tu dispositivo iOS en macOS Catalina en adelante en la aplicación **Finder**, ya que iTunes ya no está disponible en Catalina. Simplemente selecciona el dispositivo iOS conectado en Finder y **haz clic en la información debajo del nombre del dispositivo iOS** para iterar a través de ella. Además del UDID, puedes encontrar el número de serie, IMEI y otra información útil.
Si estás utilizando una versión de macOS anterior a Catalina, puedes encontrar el [UDID de tu dispositivo iOS a través de iTunes](http://www.iclarified.com/52179/how-to-find-your-iphones-udid), seleccionando tu dispositivo y haciendo clic en "Número de serie" en la pestaña de resumen. Al hacer clic en esto, iterarás a través de diferentes metadatos del dispositivo iOS, incluido su UDID.
También es posible obtener el UDID a través de varias herramientas de línea de comandos en macOS mientras el dispositivo está conectado a través de USB:
Para habilitar el acceso SSH a tu dispositivo iOS, puedes instalar el **paquete OpenSSH**. Una vez instalado, puedes acceder a tu dispositivo a través de SSH ejecutando `ssh root@<dirección_ip_del_dispositivo>`, lo que te permitirá iniciar sesión como usuario root:
> Recuerde cambiar la contraseña predeterminada para ambos usuarios `root` y `mobile`, ya que cualquier persona en la misma red puede encontrar la dirección IP de su dispositivo y conectarse a través de la contraseña predeterminada conocida, lo que les dará acceso de root a su dispositivo.
Durante una prueba de caja negra real, es posible que no haya una conexión Wi-Fi confiable disponible. En esta situación, puede usar usbmuxd para conectarse al servidor SSH de su dispositivo a través de USB.
El comando anterior mapea el puerto `22` del dispositivo iOS al puerto `2222` en localhost. También puedes [hacer que iproxy se ejecute automáticamente en segundo plano](https://iphonedevwiki.net/index.php/SSH\_Over\_USB) si no quieres ejecutar el binario cada vez que quieras hacer SSH a través de USB.
Con el siguiente comando en una nueva ventana de terminal, puedes conectarte al dispositivo:
> Pequeña nota sobre el USB de un iDevice: en un dispositivo iOS no se pueden realizar conexiones de datos después de 1 hora de estar bloqueado, a menos que lo desbloquee nuevamente debido al Modo Restringido de USB, que se introdujo con iOS 11.4.1
Si bien generalmente el uso de una **shell en el dispositivo** (emulador de terminal) puede resultar tedioso en comparación con una shell remota, puede resultar útil para la depuración en caso de, por ejemplo, problemas de red o para verificar alguna configuración. Por ejemplo, puedes instalar [NewTerm 2](https://repo.chariz.io/package/ws.hbang.newterm2/) a través de Cydia con este propósito (admite iOS 6.0 a 12.1.2 en el momento de escribir esto).
Además, hay algunos jailbreaks que deshabilitan explícitamente el SSH entrante _por razones de seguridad_. En esos casos, es muy conveniente tener una aplicación de shell en el dispositivo, que puedes usar para primero hacer SSH desde el dispositivo con una shell inversa, y luego conectarte desde tu computadora host a ella.
En la aplicación de shell en el dispositivo, ejecuta el siguiente comando y, cuando se te solicite, ingresa la contraseña del usuario `mstg` de la computadora host:
1. Edita el archivo `/private/etc/master.passwd` en tu dispositivo iOS con jailbreak utilizando una terminal en el dispositivo o aplicaciones como **Filza** o **iFile**.
Como ahora sabemos, los archivos de nuestra aplicación se almacenan en el directorio Data. Ahora puedes simplemente archivar el directorio Data con `tar` y extraerlo del dispositivo con `scp`:
[iFunbox](https://www.i-funbox.com/en/page-download.html) es una aplicación GUI que se puede utilizar para varias cosas (subir/bajar archivos entre ellas).\
Otra herramienta GUI para este propósito es [iExplorer](https://macroplant.com/iexplorer).
A partir de la versión 8.4 de iOS, Apple ha **restringido el acceso de los administradores de terceros al sandbox de la aplicación**, por lo que herramientas como iFunbox y iExplorer ya no muestran/recuperan archivos de las aplicaciones instaladas en el dispositivo si el dispositivo no está jailbroken.
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 el desarrollo, a veces se proporcionan aplicaciones a los probadores a través de la distribución por aire (OTA). En esa situación, recibirás un enlace itms-services, como el siguiente:
Puedes utilizar la herramienta [ITMS services asset downloader](https://www.npmjs.com/package/itms-services) para descargar el IPA desde una URL de distribución OTA. Instálala a través de npm:
Si tienes el IPA (probablemente incluyendo un binario de aplicación ya desencriptado), descomprímelo y estás listo para continuar. El binario de la aplicación se encuentra en el directorio principal del paquete (.app), por ejemplo, `Payload/Telegram X.app/Telegram X`. Consulta la siguiente subsección para obtener detalles sobre la extracción de las listas de propiedades.
> En el Finder de macOS, los directorios .app se abren haciendo clic derecho en ellos y seleccionando "Mostrar contenido del paquete". En la terminal, simplemente puedes usar `cd` para ingresar a ellos.
Si no tienes el IPA original, entonces necesitas un dispositivo con jailbreak donde **instalarás la aplicación** (por ejemplo, a través de la App Store). Una vez instalada, necesitas **extraer el binario de la aplicación de la memoria y reconstruir el archivo IPA**. Debido a la protección DRM, el archivo binario de la aplicación está encriptado cuando se almacena en el dispositivo iOS, por lo que simplemente extraerlo del paquete (ya sea a través de SSH o Objection) no será suficiente para ingeniería inversa (lee la siguiente sección).
A diferencia de una aplicación de Android, el binario de una aplicación de iOS **solo puede ser desensamblado** y no descompilado.\
Cuando una aplicación se envía a la App Store, Apple primero verifica la conducta de la aplicación y antes de lanzarla en la App Store, **Apple encripta el binario usando** [**FairPlay**](https://developer.apple.com/streaming/fps/). Por lo tanto, el binario descargado desde la App Store está encriptado, complicando las tareas de ingeniería inversa.
Para ejecutar el binario encriptado, el dispositivo necesita desencriptarlo en la memoria. Luego, es posible **volcar el binario desencriptado desde la memoria**.
Si está configurado, puedes usar el script [`change_macho_flags.py`](https://chromium.googlesource.com/chromium/src/+/49.0.2623.110/build/mac/change\_mach\_o\_flags.py) para eliminarlo con python2:
Ahora que la bandera PIE no está establecida, el sistema operativo cargará el programa en una **ubicación de inicio fija** cada vez. Para encontrar esta **ubicación**, puedes utilizar:
Con esta información, solo es necesario ejecutar la aplicación en el dispositivo con jailbreak, adjuntarse al proceso con gdb (`gdb -p <pid>`) y volcar la memoria:
¡Felicidades! Has descifrado la sección encriptada en dump.bin. Ahora **transfiere este volcado a tu computadora y sobrescribe la sección encriptada con la descifrada**:
Hay un paso más para completar. La aplicación todavía **indica** en sus metadatos que está **encriptada**, pero en realidad no lo está. Entonces, cuando se ejecuta, el dispositivo intentará desencriptar la sección que ya está desencriptada y fallará.
Sin embargo, puedes usar herramientas como [**MachOView**](https://sourceforge.net/projects/machoview/) para cambiar esta información. Solo abre el binario y establece el valor de **cryptid** en 0:
Puedes usar herramientas como [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) para **eliminar automáticamente la encriptación de una aplicación**.
Primero, asegúrate de que la configuración en `dump.py` de **Frida-ios-dump** esté establecida en localhost con el puerto 2222 cuando uses **iproxy**, o en la dirección IP real y el puerto del dispositivo desde el cual deseas volcar el binario.
Después de esto, se creará el archivo `Telegram.ipa` en tu directorio actual. Puedes validar el éxito del volcado eliminando la aplicación y reinstalándola (por ejemplo, usando [**ios-deploy**](https://github.com/ios-control/ios-deploy) `ios-deploy -b Telegram.ipa`). Ten en cuenta que esto solo funcionará en dispositivos con jailbreak, ya que de lo contrario la firma no será válida.
Para **obtener el archivo ipa** de una aplicación instalada, también puedes usar la herramienta [**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt) o un envoltorio de la herramienta llamado [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac)**.**\
En cualquier caso, deberás **instalar flexdecrypt en el dispositivo** ejecutando algo como:
[r2flutch](https://github.com/as0ler/r2flutch) es una herramienta que utiliza **radare** y **frida** para **descifrar** y **volcar aplicaciones de iOS**.
Cuando instalas una aplicación sin utilizar la App Store de Apple, esto se llama **sideloading**. Hay varias formas de hacer sideloading, que se describen a continuación. En el dispositivo iOS, el proceso de instalación real es manejado por el **daemon installd**, que descomprimirá e instalará la aplicación. Para integrar servicios de aplicaciones o ser instaladas en un dispositivo iOS, todas las **aplicaciones deben estar firmadas con un certificado emitido por Apple**. Esto significa que la aplicación solo se puede instalar después de una verificación exitosa de la firma del código. Sin embargo, en un teléfono con jailbreak, puedes **sortear esta característica de seguridad con** [**AppSync**](http://repo.hackyouriphone.org/appsyncunified), un paquete disponible en la tienda de Cydia. Contiene numerosas aplicaciones útiles que aprovechan los privilegios de root proporcionados por el jailbreak para ejecutar funcionalidades avanzadas. **AppSync es un ajuste que parchea installd**, permitiendo la instalación de paquetes IPA falsificados.
> Ten en cuenta que iTunes ya no está disponible en macOS Catalina. Si estás utilizando una versión anterior de macOS, iTunes todavía está disponible, pero desde iTunes 12.7 no es posible instalar aplicaciones.
[Cydia Impactor](http://www.cydiaimpactor.com) fue creado originalmente para hacer jailbreak a los iPhones, pero ha sido reescrito para firmar e instalar paquetes IPA en dispositivos iOS mediante sideloading (e incluso archivos APK en dispositivos Android). Cydia Impactor está disponible para Windows, macOS y Linux. Una [guía paso a paso y pasos de solución de problemas están disponibles en yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/).
En Linux y también en macOS, puedes utilizar [libimobiledevice](https://www.libimobiledevice.org), una biblioteca de protocolo de software multiplataforma y un conjunto de herramientas para la comunicación nativa con dispositivos iOS. Esto te permite instalar aplicaciones a través de una conexión USB ejecutando ideviceinstaller. La conexión se implementa con el demonio de multiplexación USB [usbmuxd](https://www.theiphonewiki.com/wiki/Usbmux), que proporciona un túnel TCP sobre USB.
Después de la instalación, tendrás disponibles varias nuevas herramientas de línea de comandos, como `ideviceinfo`, `ideviceinstaller` o `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.
# 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".
El IPA también se puede instalar directamente en el dispositivo iOS a través de la línea de comandos con [ipainstaller](https://github.com/autopear/ipainstaller). Después de copiar el archivo al dispositivo, por ejemplo, a través de scp, puedes ejecutar ipainstaller con el nombre de archivo del IPA:
En macOS también puedes usar la herramienta **ios-deploy** para instalar aplicaciones de iOS desde la línea de comandos. Deberás descomprimir tu IPA ya que ios-deploy utiliza los paquetes de aplicaciones para instalarlas.
Después de instalar la aplicación en el dispositivo iOS, simplemente puedes iniciarla agregando la bandera `-m`, lo cual iniciará la depuración directamente sin instalar la aplicación nuevamente.
A veces, una aplicación puede requerir ser utilizada en un dispositivo iPad. Si solo tienes dispositivos iPhone o iPod touch, puedes forzar a la aplicación a aceptar ser instalada y utilizada en este tipo de dispositivos. Puedes hacer esto cambiando el valor de la propiedad **UIDeviceFamily** al valor **1** en el archivo **Info.plist**.
Es importante tener en cuenta que cambiar este valor romperá la firma original del archivo IPA, por lo que es necesario volver a firmar el IPA después de la actualización para poder instalarlo en un dispositivo en el que la validación de la firma no haya sido desactivada.
Es posible que este bypass no funcione si la aplicación requiere capacidades específicas de los iPads modernos mientras que tu iPhone o iPod es un poco más antiguo.
Los valores posibles para la propiedad [UIDeviceFamily](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW11) se pueden encontrar en la documentación de Apple Developer.
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres que tu **empresa sea anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).