Herramientas

A continuación encontrarás las herramientas que utilizaremos para explorar, analizar y probar aplicaciones iOS. Cada una cumple un rol específico en nuestras auditorías y nos ayudará a entender mejor cómo interactúan las apps con el sistema.

3uTools

Sideloadly

AltServer

itunes

iMazing

Frida

Objection

MobSF

palera1n

bootra1n

Dopamine

Grapefruit

3uTools

3uTools es una herramienta todo-en-uno para dispositivos iOS que nos permite gestionar, personalizar y realizar diversas operaciones en iPhones, iPads y iPods.

Funciones principales

  1. Gestión de dispositivos
    • Transferencia de archivos entre el dispositivo y la computadora.
    • Administración de fotos, música, aplicaciones y contactos.
  2. Flasheo y Jailbreak
    • Instalar versiones específicas de iOS mediante flasheo.
    • Apoyo en el proceso de jailbreak con compatibilidad para varias versiones.
  3. Información y diagnóstico
    • Detalles técnicos del dispositivo (modelo, capacidad, estado de batería, etc.).
    • Verificaciones de estado, como el bloqueo por iCloud.
  4. Herramientas adicionales
    • Respaldo y restauración de datos.
    • Limpieza del sistema para liberar espacio.
    • Conversión de tonos y formatos multimedia.

3uTools es muy popular por su facilidad de uso y compatibilidad con muchas versiones de iOS. Aunque no está diseñada específicamente para pentesting, resulta muy útil para administrar y preparar dispositivos para nuestras pruebas.

{69EDC6BC-9EB7-44B6-AF5E-7456168DC2C3}.png

{11F3353D-A57A-4D2A-ACDF-1E7C1547CD61}.png

{16A3E728-E64E-41E3-AD03-40B5EE015B4D}.png

Sideloadly

Sideloadly es una herramienta que nos permite instalar aplicaciones IPA en dispositivos iOS de forma manual, sin necesidad de publicarlas en la App Store. Es ampliamente utilizada en entornos de pruebas, desarrollo y análisis de aplicaciones, especialmente cuando trabajamos con apps de laboratorio o modificadas.

Funciones principales

  1. Instalación de aplicaciones IPA
    • Instala archivos .ipa directamente en iPhone y iPad.
    • Compatible con dispositivos con y sin jailbreak.
  2. Firma de aplicaciones iOS
    • Firma aplicaciones utilizando un Apple ID (gratuito o de desarrollador).
    • Soporta certificados de desarrollo y perfiles de aprovisionamiento.
  3. Compatibilidad multiplataforma
    • Funciona en Windows y macOS.
    • Compatible con múltiples versiones de iOS.
  4. Soporte para aplicaciones modificadas
    • Permite instalar aplicaciones alteradas para pruebas y laboratorios.
    • Útil para ejecutar apps instrumentadas o con parches.
  5. Opciones avanzadas
    • Configuración de identificadores de bundle personalizados.
    • Soporte para extensiones y frameworks integrados.

Casos de uso en pentesting

  • 📱 Despliegue de aplicaciones vulnerables para laboratorios (como DVIA).
  • 🏢 Instalación de aplicaciones internas sin pasar por la App Store.
  • 🧪 Ejecución de aplicaciones instrumentadas con herramientas como Frida.
  • ⚙️ Pruebas rápidas en dispositivos físicos.

Ventajas

  • Interfaz gráfica sencilla.
  • No requiere conocimientos avanzados de desarrollo iOS.
  • Funciona con o sin jailbreak.
  • Ideal para entornos de laboratorio y pruebas controladas.

Sideloadly no es una herramienta de pentesting por sí misma, pero es fundamental para instalar aplicaciones de prueba o modificadas que posteriormente analizaremos con herramientas como Frida u Objection. En nuestro caso, descargaremos la versión para Windows y la utilizaremos para desplegar nuestras aplicaciones de laboratorio.

image.png

image.png

image.png

image.png

AltServer

AltServer es la aplicación de escritorio necesaria para instalar AltStore en dispositivos iOS. Nos permite firmar e instalar aplicaciones IPA utilizando nuestro Apple ID, funcionando como un método alternativo a la App Store para desplegar aplicaciones en iPhone o iPad.

Es especialmente útil en entornos de pruebas donde necesitamos instalar herramientas o aplicaciones de laboratorio sin realizar jailbreak.


Funciones principales

  1. Instalación de AltStore
    • Permite instalar la aplicación AltStore en el dispositivo iOS.
    • Actúa como puente entre el ordenador y el iPhone/iPad.
  2. Firma de aplicaciones
    • Firma aplicaciones usando un Apple ID.
    • Permite renovar certificados de forma periódica.
  3. Instalación de archivos IPA
    • Despliegue de aplicaciones personalizadas o de laboratorio.
    • Compatible con dispositivos sin jailbreak.
  4. Sincronización por Wi-Fi
    • Puede funcionar mediante sincronización inalámbrica con iTunes habilitado.

Casos de uso en pentesting

  • Instalación de aplicaciones de laboratorio sin jailbreak.
  • Despliegue de herramientas de análisis móvil.
  • Renovación de firmas en entornos de prueba.

Ventajas

  • Método confiable para instalar apps fuera de la App Store.
  • Compatible con Windows y macOS.
  • No requiere jailbreak.

AltServer, al igual que Sideloadly, no es una herramienta de explotación, pero es clave en nuestra fase de preparación del entorno, ya que nos permite instalar y mantener activas aplicaciones necesarias para nuestras pruebas.

image.png

image.png

image.png

iTunes

iTunes es la aplicación oficial de Apple para gestionar dispositivos iOS desde una computadora. Nos permite sincronizar contenido, realizar respaldos, restaurar sistemas y administrar aplicaciones en iPhone, iPad o iPod Touch.

Aunque iTunes no está diseñado específicamente para pentesting, es una herramienta fundamental para preparar dispositivos antes de realizar pruebas, asegurando que estén correctamente respaldados y actualizados.


Funciones principales

  1. Respaldo y restauración de dispositivos
    • Crear copias de seguridad completas de iPhones y iPads.
    • Restaurar el dispositivo a su estado original o desde un respaldo previo.
  2. Gestión de contenido multimedia
    • Sincronizar música, videos, fotos y otros archivos entre la computadora y el dispositivo.
    • Organizar bibliotecas de medios y listas de reproducción.
  3. Actualización de iOS
    • Instalar actualizaciones oficiales del sistema operativo.
    • Recuperar el dispositivo en caso de problemas o fallos del sistema.
  4. Gestión de aplicaciones
    • Instalar, eliminar o actualizar aplicaciones descargadas.
    • Configurar y mantener dispositivos preparados para pruebas.

Casos de uso en pentesting

  • Preparar un dispositivo de laboratorio para pruebas de seguridad.
  • Realizar respaldos antes de instalar aplicaciones modificadas o ejecutar jailbreak.
  • Restaurar rápidamente un dispositivo a un estado seguro tras pruebas.

Ventajas

  • Herramienta oficial de Apple, confiable y compatible con todos los dispositivos iOS.
  • Facilita la preparación y mantenimiento de entornos de prueba.
  • Esencial para respaldos y restauraciones seguras antes de cualquier análisis o experimentación.

{285C6276-2054-45D5-9FF0-3492ED30CCA5}.png

{D44AD32D-DFB4-4C36-BE8F-29F4D99039A4}.png

iMazing

iMazing es una herramienta avanzada de administración de dispositivos iOS que permite gestionar datos y realizar tareas más allá de las capacidades estándar de iTunes. Aunque no es una herramienta de pentesting por sí misma, resulta muy útil para preparar dispositivos, respaldar información y facilitar pruebas en entornos de laboratorio.


Funciones principales

  1. Respaldo y restauración avanzada
    • Crear copias de seguridad completas o selectivas de un dispositivo.
    • Restaurar aplicaciones, configuraciones o archivos específicos de manera individual.
  2. Gestión de aplicaciones y datos
    • Instalar o eliminar aplicaciones IPA sin necesidad de la App Store.
    • Acceder y exportar archivos de aplicaciones y datos de usuario desde el dispositivo.
  3. Transferencia de contenido
    • Mover música, fotos, videos y documentos entre el dispositivo y la computadora.
    • Importar y exportar información de manera segura y rápida.
  4. Administración de dispositivos múltiples
    • Conectar y gestionar varios dispositivos al mismo tiempo.
    • Ideal para laboratorios donde se manejan distintos iPhones o iPads.

Casos de uso en pentesting

  • Preparar dispositivos de laboratorio para pruebas de seguridad.
  • Respaldar y restaurar información antes y después de instalar aplicaciones de prueba o modificadas.
  • Extraer datos de apps para análisis sin comprometer el sistema principal del dispositivo.
  • Facilitar pruebas en múltiples dispositivos de manera organizada.

Ventajas

  • Interfaz intuitiva y fácil de usar.
  • Funciona en Windows y macOS.
  • Permite un control detallado sobre datos, aplicaciones y respaldos.
  • Complementa herramientas de pentesting, facilitando la preparación y mantenimiento de entornos de prueba.

image.png

{0DD1C306-E035-4831-92A6-086CF68DB702}.png

{1AC08D9A-9110-43DB-BFD5-78C5E3B664FC}.png

Frida

Frida es un framework de instrumentación dinámica que nos permite interactuar con aplicaciones en tiempo real. Es una de las herramientas más importantes en el pentesting de aplicaciones móviles, ya que posibilita modificar el comportamiento de una app mientras está en ejecución.

Con Frida podemos analizar, interceptar y alterar funciones internas de una aplicación sin necesidad de modificar directamente su código fuente.


Funciones principales

  1. Instrumentación dinámica
    • Inyectar scripts en procesos en ejecución.
    • Interactuar con métodos y clases de la aplicación en tiempo real.
  2. Hooking de funciones
    • Interceptar llamadas a funciones específicas.
    • Modificar parámetros de entrada y salida.
    • Registrar información sensible durante la ejecución.
  3. Bypass de controles de seguridad
    • Desactivar validaciones como detección de jailbreak.
    • Omitir verificaciones de certificados SSL (SSL Pinning).
    • Manipular validaciones lógicas internas.
  4. Análisis de comportamiento
    • Observar cómo la aplicación maneja datos sensibles.
    • Identificar puntos críticos donde se realizan validaciones.

Casos de uso en pentesting iOS

  • Bypass de mecanismos de seguridad implementados en la aplicación.
  • Análisis de funciones relacionadas con autenticación.
  • Intercepción y manipulación de datos antes de ser enviados al servidor.
  • Evaluación de almacenamiento y tratamiento de información sensible.

Ventajas

  • Permite análisis dinámico avanzado sin recompilar la aplicación.
  • Compatible con dispositivos con y sin jailbreak (con configuraciones específicas).
  • Soporta múltiples plataformas, incluyendo iOS, Android, Windows y macOS.
  • Se integra fácilmente con scripts personalizados en JavaScript o Python.

Frida es una herramienta clave en auditorías profesionales de aplicaciones móviles, ya que nos permite ir más allá del análisis estático y comprender el comportamiento real de una aplicación en ejecución. En nuestras pruebas, será fundamental para realizar bypass de controles y validar la robustez de los mecanismos de seguridad implementados.

Para poder usar Frida en nuestro equipo, primero necesitamos instalar el paquete frida-tools, que nos trae las herramientas de línea de comandos (frida, frida-ps, frida-trace, entre otras) que usaremos más adelante para interactuar con los dispositivos. La instalación es sencilla y se hace con Python3.

para la instalación debe ser con python3 pip3 install frida-tools

C:\Users>pip3 install frida-tools
Collecting frida-tools
  Downloading frida-tools-13.6.1.tar.gz (4.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6/4.6 MB 70.6 kB/s eta 0:00:00
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Requirement already satisfied: colorama<1.0.0,>=0.2.7 in c:\users\csiete\appdata\local\programs\python\python38-32\lib\site-packages (from frida-tools) (0.4.6)
Collecting frida<17.0.0,>=16.2.2 (from frida-tools)
  Downloading frida-16.6.4-cp37-abi3-win32.whl.metadata (2.3 kB)
Collecting prompt-toolkit<4.0.0,>=2.0.0 (from frida-tools)
  Downloading prompt_toolkit-3.0.50-py3-none-any.whl.metadata (6.6 kB)
Collecting pygments<3.0.0,>=2.0.2 (from frida-tools)
  Downloading pygments-2.19.1-py3-none-any.whl.metadata (2.5 kB)
Collecting websockets<14.0.0,>=13.0.0 (from frida-tools)
  Downloading websockets-13.1-cp38-cp38-win32.whl.metadata (7.0 kB)
Collecting typing_extensions (from frida<17.0.0,>=16.2.2->frida-tools)
  Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)
Collecting wcwidth (from prompt-toolkit<4.0.0,>=2.0.0->frida-tools)
  Downloading wcwidth-0.2.13-py2.py3-none-any.whl.metadata (14 kB)
Downloading frida-16.6.4-cp37-abi3-win32.whl (18.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.8/18.8 MB 136.0 kB/s eta 0:00:00
Downloading prompt_toolkit-3.0.50-py3-none-any.whl (387 kB)
Downloading pygments-2.19.1-py3-none-any.whl (1.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 856.1 kB/s eta 0:00:00
Downloading websockets-13.1-cp38-cp38-win32.whl (158 kB)
Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)
Downloading wcwidth-0.2.13-py2.py3-none-any.whl (34 kB)
Building wheels for collected packages: frida-tools
  Building wheel for frida-tools (pyproject.toml) ... done
  Created wheel for frida-tools: filename=frida_tools-13.6.1-py3-none-any.whl size=4638977 sha256=2d7c1866505bd5a41c4688d5a518c7157d5c7c4a80bec43fcbc27f8a238ca67d
  Stored in directory: c:\users\csiete\appdata\local\pip\cache\wheels\c6\4c\56\c468d5d1d4acc896f8c3ef1cd54a79573478c782c0c8bf34fc
Successfully built frida-tools
Installing collected packages: wcwidth, websockets, typing_extensions, pygments, prompt-toolkit, frida, frida-tools
Successfully installed frida-16.6.4 frida-tools-13.6.1 prompt-toolkit-3.0.50 pygments-2.19.1 typing_extensions-4.12.2 wcwidth-0.2.13 websockets-13.1

[notice] A new release of pip is available: 24.2 -> 24.3.1
[notice] To update, run: python.exe -m pip install --upgrade pip

C:\Users>

Una vez instalado, confirmamos que todo quedó bien y revisamos las opciones disponibles con el comando frida --help. Esto nos muestra todas las formas en que podemos conectarnos a un dispositivo o proceso.


D:\>frida --help
usage: frida [options] target

positional arguments:
  args                  extra arguments and/or target

optional arguments:
  -h, --help            show this help message and exit
  -D ID, --device ID    connect to device with the given ID
  -U, --usb             connect to USB device
  -R, --remote          connect to remote frida-server
  -H HOST, --host HOST  connect to remote frida-server on HOST
  --certificate CERTIFICATE
                        speak TLS with HOST, expecting CERTIFICATE
  --origin ORIGIN       connect to remote server with Origin header set to ORIGIN
  --token TOKEN         authenticate with HOST using TOKEN
  --keepalive-interval INTERVAL
                        set keepalive interval in seconds, or 0 to disable (defaults to -1 to auto-select based on
                        transport)
  --p2p                 establish a peer-to-peer connection with target
  --stun-server ADDRESS
                        set STUN server ADDRESS to use with --p2p
  --relay address,username,password,turn-{udp,tcp,tls}
                        add relay to use with --p2p
  -f TARGET, --file TARGET
                        spawn FILE
  -F, --attach-frontmost
                        attach to frontmost application
  -n NAME, --attach-name NAME
                        attach to NAME
  -N IDENTIFIER, --attach-identifier IDENTIFIER
                        attach to IDENTIFIER
  -p PID, --attach-pid PID
                        attach to PID
  -W PATTERN, --await PATTERN
                        await spawn matching PATTERN
  --stdio {inherit,pipe}
                        stdio behavior when spawning (defaults to inherit)
  --aux option          set aux option when spawning, such as uid=(int)42 (supported types are: string, bool, int)
  --realm {native,emulated}
                        realm to attach in
  --runtime {qjs,v8}    script runtime to use
  --debug               enable the Node.js compatible script debugger
  --squelch-crash       if enabled, will not dump crash report to console
  -O FILE, --options-file FILE
                        text file containing additional command line options
  --version             show program's version number and exit
  -l SCRIPT, --load SCRIPT
                        load SCRIPT
  -P PARAMETERS_JSON, --parameters PARAMETERS_JSON
                        parameters as JSON, same as Gadget
  -C USER_CMODULE, --cmodule USER_CMODULE
                        load CMODULE
  --toolchain {any,internal,external}
                        CModule toolchain to use when compiling from source code
  -c CODESHARE_URI, --codeshare CODESHARE_URI
                        load CODESHARE_URI
  -e CODE, --eval CODE  evaluate CODE
  -q                    quiet mode (no prompt) and quit after -l and -e
  -t TIMEOUT, --timeout TIMEOUT
                        seconds to wait before terminating in quiet mode
  --pause               leave main thread paused after spawning program
  -o LOGFILE, --output LOGFILE
                        output to log file
  --eternalize          eternalize the script before exit
  --exit-on-error       exit with code 1 after encountering any exception in the SCRIPT
  --kill-on-exit        kill the spawned program when Frida exits
  --auto-perform        wrap entered code with Java.perform
  --auto-reload         Enable auto reload of provided scripts and c module (on by default, will be required in the
                        future)
  --no-auto-reload      Disable auto reload of provided scripts and c module

De todas estas opciones, las que más vamos a usar en nuestros laboratorios de iOS son -U para conectarnos por USB al dispositivo, -f para hacer spawn de una aplicación desde cero, y -F para adjuntarnos al proceso que esté en primer plano. Con Frida ya instalado y funcionando, el siguiente paso es apoyarnos en Objection, que nos facilita mucho el trabajo con Frida sin tener que escribir scripts personalizados cada vez.

Objection

Objection es una herramienta de pentesting para aplicaciones móviles que se apoya en Frida para facilitar la instrumentación y explotación de apps iOS y Android. Está diseñada para que podamos realizar pruebas de seguridad sin necesidad de modificar la aplicación ni escribir scripts complejos desde cero.

Objection permite ejecutar comandos y realizar auditorías en tiempo real, ofreciendo un enfoque más accesible para tareas comunes de pentesting dinámico.


Funciones principales

  1. Análisis de seguridad en tiempo real
    • Inspeccionar y modificar la ejecución de la aplicación mientras está en uso.
    • Explorar funciones, clases y estructuras de datos de manera interactiva.
  2. Bypass de controles de seguridad
    • Omitir validaciones de jailbreak y detección de depuración.
    • Saltarse validaciones SSL y mecanismos de seguridad de red.
    • Modificar lógicas internas de la aplicación sin recompilarla.
  3. Exploración de almacenamiento y archivos
    • Acceder al sandbox de la aplicación y explorar bases de datos locales.
    • Inspeccionar preferencias, archivos de configuración y datos sensibles.
  4. Automatización de pruebas
    • Ejecutar comandos predefinidos para auditorías rápidas.
    • Generar reportes sobre hallazgos de vulnerabilidades.

Casos de uso en pentesting iOS

  • Validar la seguridad de aplicaciones y detectar bypass de mecanismos de protección.
  • Acceder y analizar datos almacenados localmente en el dispositivo.
  • Realizar pruebas de manipulación de funcionalidades críticas sin recompilar la app.
  • Evaluar la robustez de validaciones de red y almacenamiento.

Ventajas

  • Integra las capacidades de Frida de forma más amigable y práctica.
  • Permite auditorías dinámicas sin conocimientos avanzados de scripting.
  • Compatible con dispositivos con y sin jailbreak (con limitaciones según la configuración).
  • Ideal para laboratorios y pruebas controladas en entornos profesionales.

Objection es esencial en nuestro flujo de pentesting móvil porque simplifica muchas tareas complejas de instrumentación y nos permite concentrarnos en el análisis y explotación de vulnerabilidades sin perder tiempo en scripts manuales. Como Objection se apoya en Frida por debajo, es importante instalar primero frida-tools (como vimos en la sección anterior) antes de instalar Objection.

la instalación se realiza con el comando pip3 install objection

C:\Users>pip3 install objection
Collecting objection
  Downloading objection-1.11.0.tar.gz (327 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Requirement already satisfied: frida>=14.0.0 in c:\users\csiete\appdata\local\programs\python\python38-32\lib\site-packages (from objection) (16.6.4)
Requirement already satisfied: frida-tools>=6.0.0 in c:\users\csiete\appdata\local\programs\python\python38-32\lib\site-packages (from objection) (13.6.1)
Requirement already satisfied: prompt-toolkit<4.0.0,>=3.0.3 in c:\users\csiete\appdata\local\programs\python\python38-32\lib\site-packages (from objection) (3.0.50)
Collecting click (from objection)
  Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB)
Collecting tabulate (from objection)
  Downloading tabulate-0.9.0-py3-none-any.whl.metadata (34 kB)
Collecting semver<3,>=2 (from objection)
  Downloading semver-2.13.0-py2.py3-none-any.whl.metadata (5.0 kB)
Collecting delegator.py (from objection)
  Downloading delegator.py-0.1.1-py2.py3-none-any.whl.metadata (3.9 kB)
Requirement already satisfied: requests in c:\users\csiete\appdata\local\programs\python\python38-32\lib\site-packages (from objection) (2.32.3)
Collecting flask (from objection)
  Downloading flask-3.0.3-py3-none-any.whl.metadata (3.2 kB)
Requirement already satisfied: pygments in c:\users\csiete\appdata\local\programs\python\python38-32\lib\site-packages (from objection) (2.19.1)
Collecting litecli>=1.3.0 (from objection)
  Downloading litecli-1.13.2-py3-none-any.whl.metadata (2.4 kB)
Requirement already satisfied: typing_extensions in c:\users\csiete\appdata\local\programs\python\python38-32\lib\site-packages (from frida>=14.0.0->objection) (4.12.2)
Requirement already satisfied: colorama<1.0.0,>=0.2.7 in c:\users\csiete\appdata\local\programs\python\python38-32\lib\site-packages (from frida-tools>=6.0.0->objection) (0.4.6)
Requirement already satisfied: websockets<14.0.0,>=13.0.0 in c:\users\csiete\appdata\local\programs\python\python38-32\lib\site-packages (from frida-tools>=6.0.0->objection) (13.1)
Collecting cli-helpers>=2.2.1 (from cli-helpers[styles]>=2.2.1->litecli>=1.3.0->objection)
  Downloading cli_helpers-2.3.1-py3-none-any.whl.metadata (2.4 kB)
Collecting configobj>=5.0.5 (from litecli>=1.3.0->objection)
  Downloading configobj-5.0.9-py2.py3-none-any.whl.metadata (3.2 kB)
Collecting sqlparse>=0.4.4 (from litecli>=1.3.0->objection)
  Downloading sqlparse-0.5.3-py3-none-any.whl.metadata (3.9 kB)
Requirement already satisfied: wcwidth in c:\users\csiete\appdata\local\programs\python\python38-32\lib\site-packages (from prompt-toolkit<4.0.0,>=3.0.3->objection) (0.2.13)
Collecting pexpect>=4.1.0 (from delegator.py->objection)
  Downloading pexpect-4.9.0-py2.py3-none-any.whl.metadata (2.5 kB)
Collecting Werkzeug>=3.0.0 (from flask->objection)
  Downloading werkzeug-3.0.6-py3-none-any.whl.metadata (3.7 kB)
Collecting Jinja2>=3.1.2 (from flask->objection)
  Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)
Collecting itsdangerous>=2.1.2 (from flask->objection)
  Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB)
Collecting blinker>=1.6.2 (from flask->objection)
  Downloading blinker-1.8.2-py3-none-any.whl.metadata (1.6 kB)
Collecting importlib-metadata>=3.6.0 (from flask->objection)
  Downloading importlib_metadata-8.5.0-py3-none-any.whl.metadata (4.8 kB)
Requirement already satisfied: charset-normalizer<4,>=2 in c:\users\csiete\appdata\local\programs\python\python38-32\lib\site-packages (from requests->objection) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in c:\users\csiete\appdata\local\programs\python\python38-32\lib\site-packages (from requests->objection) (3.7)
Requirement already satisfied: urllib3<3,>=1.21.1 in c:\users\csiete\appdata\local\programs\python\python38-32\lib\site-packages (from requests->objection) (2.2.2)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\csiete\appdata\local\programs\python\python38-32\lib\site-packages (from requests->objection) (2024.7.4)
Collecting zipp>=3.20 (from importlib-metadata>=3.6.0->flask->objection)
  Downloading zipp-3.20.2-py3-none-any.whl.metadata (3.7 kB)
Collecting MarkupSafe>=2.0 (from Jinja2>=3.1.2->flask->objection)
  Downloading MarkupSafe-2.1.5-cp38-cp38-win32.whl.metadata (3.1 kB)
Collecting ptyprocess>=0.5 (from pexpect>=4.1.0->delegator.py->objection)
  Downloading ptyprocess-0.7.0-py2.py3-none-any.whl.metadata (1.3 kB)
Downloading litecli-1.13.2-py3-none-any.whl (47 kB)
Downloading click-8.1.8-py3-none-any.whl (98 kB)
Downloading semver-2.13.0-py2.py3-none-any.whl (12 kB)
Downloading delegator.py-0.1.1-py2.py3-none-any.whl (5.0 kB)
Downloading flask-3.0.3-py3-none-any.whl (101 kB)
Downloading tabulate-0.9.0-py3-none-any.whl (35 kB)
Downloading blinker-1.8.2-py3-none-any.whl (9.5 kB)
Downloading cli_helpers-2.3.1-py3-none-any.whl (19 kB)
Downloading configobj-5.0.9-py2.py3-none-any.whl (35 kB)
Downloading importlib_metadata-8.5.0-py3-none-any.whl (26 kB)
Downloading itsdangerous-2.2.0-py3-none-any.whl (16 kB)
Downloading jinja2-3.1.5-py3-none-any.whl (134 kB)
Downloading pexpect-4.9.0-py2.py3-none-any.whl (63 kB)
Downloading sqlparse-0.5.3-py3-none-any.whl (44 kB)
Downloading werkzeug-3.0.6-py3-none-any.whl (227 kB)
Downloading MarkupSafe-2.1.5-cp38-cp38-win32.whl (16 kB)
Downloading ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)
Downloading zipp-3.20.2-py3-none-any.whl (9.2 kB)
Building wheels for collected packages: objection
  Building wheel for objection (pyproject.toml) ... done
  Created wheel for objection: filename=objection-1.11.0-py3-none-any.whl size=384855 sha256=156a3338e36880bc10cf088da7e21d87f49c2c3b806d12b93d7ab1b0f305b714
  Stored in directory: c:\users\csiete\appdata\local\pip\cache\wheels\f9\4b\4c\995ebf1a690a7d76da9aa6ad9c6c595052a3b82dcdf01f4b3d
Successfully built objection
Installing collected packages: ptyprocess, zipp, tabulate, sqlparse, semver, pexpect, MarkupSafe, itsdangerous, configobj, click, blinker, Werkzeug, Jinja2, importlib-metadata, delegator.py, flask, cli-helpers, litecli, objection
Successfully installed Jinja2-3.1.5 MarkupSafe-2.1.5 Werkzeug-3.0.6 blinker-1.8.2 cli-helpers-2.3.1 click-8.1.8 configobj-5.0.9 delegator.py-0.1.1 flask-3.0.3 importlib-metadata-8.5.0 itsdangerous-2.2.0 litecli-1.13.2 objection-1.11.0 pexpect-4.9.0 ptyprocess-0.7.0 semver-2.13.0 sqlparse-0.5.3 tabulate-0.9.0 zipp-3.20.2

[notice] A new release of pip is available: 24.2 -> 24.3.1
[notice] To update, run: python.exe -m pip install --upgrade pip

C:\Users>

Una vez instalado, confirmamos que quedó bien ejecutando el comando objection (ojo con el nombre, es fácil escribirlo mal). Esto nos muestra el banner de la herramienta junto con todos los comandos disponibles.

D:\>objetion
"objetion" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.

D:\>objection
Checking for a newer version of objection...
Usage: objection [OPTIONS] COMMAND [ARGS]...

       _   _         _   _
   ___| |_|_|___ ___| |_|_|___ ___
  | . | . | | -_|  _|  _| | . |   |
  |___|___| |___|___|_| |_|___|_|_|
        |___|(object)inject(ion)

       Runtime Mobile Exploration
          by: @leonjza from @sensepost

  By default, communications will happen over USB, unless the --network option
  is provided.

Options:
  -N, --network            Connect using a network connection instead of USB.
  -h, --host TEXT          [default: 127.0.0.1]
  -p, --port INTEGER       [default: 27042]
  -ah, --api-host TEXT     [default: 127.0.0.1]
  -ap, --api-port INTEGER  [default: 8888]
  -g, --gadget TEXT        Name of the Frida Gadget/Process to connect to.
                           [default: Gadget]
  -S, --serial TEXT        A device serial to connect to.
  -d, --debug              Enable debug mode with verbose output. (Includes
                           agent source map in stack traces)
  --help                   Show this message and exit.

Commands:
  api          Start the objection API server in headless mode.
  device-type  Get information about an attached device.
  explore      Start the objection exploration REPL.
  patchapk     Patch an APK with the frida-gadget.so.
  patchipa     Patch an IPA with the FridaGadget dylib.
  run          Run a single objection command.
  signapk      Zipalign and sign an APK with the objection key.
  version      Prints the current version and exists.

De estos comandos, el que más vamos a usar en nuestros laboratorios es explore, que nos abre una sesión interactiva contra la app conectada (como ya vimos en la sección de JailBreak Detection). Los comandos patchipa y patchapk también son claves cuando necesitamos inyectar el Frida Gadget directamente en un IPA o APK, en dispositivos donde no tenemos jailbreak. Con Frida y Objection ya instalados, pasamos a MobSF para complementar el análisis dinámico con análisis estático automatizado.

MobSF (Mobile Security Framework)

MobSF es una herramienta automática de análisis de seguridad para aplicaciones móviles, compatible con iOS y Android. Es ampliamente utilizada en pentesting mobile, auditorías de seguridad y análisis de vulnerabilidades durante el desarrollo de apps.

MobSF combina análisis estático y dinámico, ofreciendo un enfoque integral para evaluar la seguridad de las aplicaciones sin necesidad de modificar el código.


Funciones principales

  1. Análisis estático (sin ejecutar la app)
    • Revisión de código fuente en Java, Kotlin, Swift u Objective-C.
    • Detección de secretos hardcoded como claves API, contraseñas o tokens.
    • Identificación de permisos peligrosos y APIs inseguras o deprecated.
  2. Análisis dinámico (requiere ejecutar la app)
    • Monitorización del tráfico de red.
    • Hooking de funciones usando Frida.
    • Registro de logs en tiempo real y captura de datos sensibles durante la ejecución.
  3. Análisis de binarios y paquetes
    • Archivos .apk de Android y .ipa de iOS.
    • Posibilidad de analizar código fuente directamente.
  4. Detección de mecanismos de protección
    • Obfuscación del código.
    • Detección de jailbreak/root.
    • Detección de emuladores.

Uso práctico en pentesting

  • MobSF se ejecuta como un servidor web local.
  • Se carga la aplicación a través de su interfaz web.
  • Genera un informe detallado con hallazgos de seguridad, incluyendo vulnerabilidades críticas, malas prácticas y riesgos potenciales.

Ventajas

  • Combina análisis estático y dinámico en una sola plataforma.
  • Permite identificar vulnerabilidades de manera rápida y sistemática.
  • Compatible con iOS y Android, ideal para laboratorios de pentesting móvil.
  • Facilita auditorías completas sin necesidad de modificar la aplicación.

Instalación:

Para instalar MobSF, primero se clona el repositorio oficial desde GitHub. Esto nos permite tener todos los archivos necesarios para ejecutar la herramienta en nuestro equipo.

con el comando git clone [https://github.com/MobSF/Mobile-Security-Framework-MobSF.git](https://github.com/MobSF/Mobile-Security-Framework-MobSF.git) nos clonamos el repositorio

┌──(rootangussMoody)-[/mnt/angussMoody/Scripts/Linux]
└─# git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF.git
Cloning into 'Mobile-Security-Framework-MobSF'...
remote: Enumerating objects: 21698, done.
remote: Counting objects: 100% (355/355), done.
remote: Compressing objects: 100% (217/217), done.
remote: Total 21698 (delta 261), reused 138 (delta 138), pack-reused 21343 (from 3)
Receiving objects: 100% (21698/21698), 1.45 GiB | 11.89 MiB/s, done.
Resolving deltas: 100% (11406/11406), done.
Updating files: 100% (509/509), done.

Luego es necesario otorgar permisos de ejecución al archivo de instalación setup.sh y luego ejecutar el script para iniciar la configuración de MobSF. Este proceso prepara todos los componentes y dependencias necesarios para que la aplicación funcione correctamente.con lo podems realizar con el comando chmod +x setup.sh

┌──(rootangussMoody)-[/mnt/angussMoody/Scripts/Linux/Mobile-Security-Framework-MobSF]
└─# chmod +x setup.sh 

y ejecutar la instalación con el comando ./setup.sh

┌──(rootangussMoody)-[/mnt/angussMoody/Scripts/Linux/Mobile-Security-Framework-MobSF]
└─# ./setup.sh

Si el método anterior no funciona, también se puede instalar MobSF utilizando Docker. Esto requiere tener instalado el cliente de Docker, que permite ejecutar contenedores de manera sencilla y aislada del sistema operativo principal.

si no tienes el cliente lo puedes instalar con el comando apt install docker-cli instala el cliente de Docker, que permite ejecutar comandos como docker run, docker build, etc.

┌──(rootangussMoody)-[/mnt/angussMoody]
└─# apt install docker-cli
Installing:                     
  docker-cli

Suggested packages:
  docker-doc

Summary:
  Upgrading: 0, Installing: 1, Removing: 0, Not Upgrading: 201
  Download size: 7121 kB
  Space needed: 30.0 MB / 33.0 GB available

Get:1 http://http.kali.org/kali kali-rolling/main amd64 docker-cli amd64 26.1.5+dfsg1-4+b1 [7121 kB]
Fetched 7121 kB in 1s (5497 kB/s)   
Selecting previously unselected package docker-cli.
(Reading database ... 440321 files and directories currently installed.)
Preparing to unpack .../docker-cli_26.1.5+dfsg1-4+b1_amd64.deb ...
Unpacking docker-cli (26.1.5+dfsg1-4+b1) ...
Setting up docker-cli (26.1.5+dfsg1-4+b1) ...
Processing triggers for kali-menu (2025.1.1) ...

Al iniciar MobSF a través de Docker, con el comando docker run -it --rm -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest con este comando se inicia la aplicación, pero si aparece algún error relacionado con los registros de Docker

┌──(rootangussMoody)-[/mnt/angussMoody]
└─# docker run -it --rm -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Error: short-name "opensecurity/mobile-security-framework-mobsf:latest" did not resolve to an alias and no unqualified-search registries are defined in "/etc/containers/registries.conf"

es necesario configurar el archivo de registros del cliente, se realizar este procedimiento: con un editor de texto abir el archivo registries.conf

┌──(rootangussMoody)-[/mnt/angussMoody]
└─# nano /etc/containers/registries.conf

y agregar el siguiente texto al archivo, guardamos los cambios y cerramos el archivo. La sección [registries.search] con registries = ['docker.io'] indica que, al buscar imágenes sin especificar un registro explícito, la herramienta (como Podman o Skopeo) usará docker.io por defecto. Esto permite que comandos como podman pull ubuntu obtengan la imagen desde Docker Hub automáticamente.

[registries.search]
registries = ['docker.io']

Y luego correr de nuevo el comando docker run -it --rm -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

┌──(rootangussMoody)-[/mnt/angussMoody]
└─# docker run -it --rm -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Resolving "opensecurity/mobile-security-framework-mobsf" using unqualified-search registries (/etc/containers/registries.conf)
Trying to pull docker.io/opensecurity/mobile-security-framework-mobsf:latest...
Getting image source signatures
Copying blob 78a40bee2114 done   | 
Copying blob af302e5c37e9 done   | 
Copying blob 499051ac08b3 done   | 
Copying blob 52a8eea45d12 done   | 
Copying blob bc54bb88b02b done   | 
Copying blob efb5260c7c09 done   | 
Copying blob b0429d429aed done   | 
Copying blob 8d6f8d6f067d done   | 
Copying blob c41e5353f9fb done   | 
Copying blob bd8b2b036e7b done   | 
Copying blob 745c8b655891 done   | 
Copying blob 117f49747e33 done   | 
Copying blob 7fbc27e420f7 done   | 
Copying config 7074474671 done   | 
Writing manifest to image destination
[INFO] 29/Jan/2025 23:17:27 - JADX is already installed at /home/mobsf/.MobSF/tools/jadx/jadx-1.5.0
[INFO] 29/Jan/2025 23:17:27 - Loading User config from: /home/mobsf/.MobSF/config.py
[INFO] 29/Jan/2025 23:17:30 - 
  __  __       _    ____  _____       _  _    _____ 
 |  \/  | ___ | |__/ ___||  ___|_   _| || |  |___ / 
 | |\/| |/ _ \| '_ \___ \| |_  \ \ / / || |_   |_ \ 
 | |  | | (_) | |_) |__) |  _|  \ V /|__   _| ___) |
 |_|  |_|\___/|_.__/____/|_|     \_/    |_|(_)____/ 

[INFO] 29/Jan/2025 23:17:30 - Author: Ajin Abraham | opensecurity.in
[INFO] 29/Jan/2025 23:17:30 - Mobile Security Framework v4.3.0
REST API Key: 3237d5442d90b6926e9837cf2db1cae76d779160016bd5b71879908e57503a63
Default Credentials: mobsf/mobsf
[INFO] 29/Jan/2025 23:17:30 - OS Environment: Linux (debian 12 bookworm) Linux-6.11.2-amd64-x86_64-with-glibc2.36
[INFO] 29/Jan/2025 23:17:30 - CPU Cores: 8, Threads: 8, RAM: 7.72 GB
[INFO] 29/Jan/2025 23:17:30 - MobSF Basic Environment Check
No changes detected
[INFO] 29/Jan/2025 23:17:30 - Checking for Update.
[INFO] 29/Jan/2025 23:17:31 - No updates available.
[INFO] 29/Jan/2025 23:17:32 - Loading User config from: /home/mobsf/.MobSF/config.py
[INFO] 29/Jan/2025 23:17:34 - 
  __  __       _    ____  _____       _  _    _____ 
 |  \/  | ___ | |__/ ___||  ___|_   _| || |  |___ / 
 | |\/| |/ _ \| '_ \___ \| |_  \ \ / / || |_   |_ \ 
 | |  | | (_) | |_) |__) |  _|  \ V /|__   _| ___) |
 |_|  |_|\___/|_.__/____/|_|     \_/    |_|(_)____/ 

[INFO] 29/Jan/2025 23:17:34 - Author: Ajin Abraham | opensecurity.in
[INFO] 29/Jan/2025 23:17:34 - Mobile Security Framework v4.3.0
REST API Key: 3237d5442d90b6926e9837cf2db1cae76d779160016bd5b71879908e57503a63
Default Credentials: mobsf/mobsf
[INFO] 29/Jan/2025 23:17:34 - OS Environment: Linux (debian 12 bookworm) Linux-6.11.2-amd64-x86_64-with-glibc2.36
[INFO] 29/Jan/2025 23:17:34 - CPU Cores: 8, Threads: 8, RAM: 7.72 GB
[INFO] 29/Jan/2025 23:17:34 - MobSF Basic Environment Check
Migrations for 'StaticAnalyzer':
  mobsf/StaticAnalyzer/migrations/0001_initial.py
    + Create model EnqueuedTask
    + Create model RecentScansDB
    + Create model StaticAnalyzerAndroid
    + Create model StaticAnalyzerIOS
    + Create model StaticAnalyzerWindows
    + Create model SuppressFindings
[INFO] 29/Jan/2025 23:17:34 - Checking for Update.
[INFO] 29/Jan/2025 23:17:35 - No updates available.
[INFO] 29/Jan/2025 23:17:36 - Loading User config from: /home/mobsf/.MobSF/config.py
[INFO] 29/Jan/2025 23:17:38 - 
  __  __       _    ____  _____       _  _    _____ 
 |  \/  | ___ | |__/ ___||  ___|_   _| || |  |___ / 
 | |\/| |/ _ \| '_ \___ \| |_  \ \ / / || |_   |_ \ 
 | |  | | (_) | |_) |__) |  _|  \ V /|__   _| ___) |
 |_|  |_|\___/|_.__/____/|_|     \_/    |_|(_)____/ 

[INFO] 29/Jan/2025 23:17:38 - Author: Ajin Abraham | opensecurity.in
[INFO] 29/Jan/2025 23:17:38 - Mobile Security Framework v4.3.0
REST API Key: 3237d5442d90b6926e9837cf2db1cae76d779160016bd5b71879908e57503a63
Default Credentials: mobsf/mobsf
[INFO] 29/Jan/2025 23:17:38 - OS Environment: Linux (debian 12 bookworm) Linux-6.11.2-amd64-x86_64-with-glibc2.36
[INFO] 29/Jan/2025 23:17:38 - CPU Cores: 8, Threads: 8, RAM: 7.72 GB
[INFO] 29/Jan/2025 23:17:38 - MobSF Basic Environment Check
Operations to perform:
  Apply all migrations: StaticAnalyzer, auth, contenttypes, django_q, sessions
Running migrations:
  Applying StaticAnalyzer.0001_initial... OK
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0001_initial... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying django_q.0001_initial... OK
  Applying django_q.0002_auto_20150630_1624... OK
  Applying django_q.0003_auto_20150708_1326... OK
  Applying django_q.0004_auto_20150710_1043... OK
  Applying django_q.0005_auto_20150718_1506... OK
  Applying django_q.0006_auto_20150805_1817... OK
  Applying django_q.0007_ormq... OK
  Applying django_q.0008_auto_20160224_1026... OK
  Applying django_q.0009_auto_20171009_0915... OK
  Applying django_q.0010_auto_20200610_0856... OK
  Applying django_q.0011_auto_20200628_1055... OK
  Applying django_q.0012_auto_20200702_1608... OK
  Applying django_q.0013_task_attempt_count... OK
  Applying django_q.0014_schedule_cluster... OK
  Applying django_q.0015_alter_schedule_schedule_type... OK
  Applying django_q.0016_schedule_intended_date_kwarg... OK
  Applying django_q.0017_task_cluster_alter... OK
  Applying django_q.0018_task_success_index... OK
  Applying sessions.0001_initial... OK
[INFO] 29/Jan/2025 23:17:44 - Checking for Update.
[INFO] 29/Jan/2025 23:17:44 - No updates available.
[INFO] 29/Jan/2025 23:17:45 - Loading User config from: /home/mobsf/.MobSF/config.py
[INFO] 29/Jan/2025 23:17:47 - 
  __  __       _    ____  _____       _  _    _____ 
 |  \/  | ___ | |__/ ___||  ___|_   _| || |  |___ / 
 | |\/| |/ _ \| '_ \___ \| |_  \ \ / / || |_   |_ \ 
 | |  | | (_) | |_) |__) |  _|  \ V /|__   _| ___) |
 |_|  |_|\___/|_.__/____/|_|     \_/    |_|(_)____/ 

[INFO] 29/Jan/2025 23:17:47 - Author: Ajin Abraham | opensecurity.in
[INFO] 29/Jan/2025 23:17:47 - Mobile Security Framework v4.3.0
REST API Key: 3237d5442d90b6926e9837cf2db1cae76d779160016bd5b71879908e57503a63
Default Credentials: mobsf/mobsf
[INFO] 29/Jan/2025 23:17:47 - OS Environment: Linux (debian 12 bookworm) Linux-6.11.2-amd64-x86_64-with-glibc2.36
[INFO] 29/Jan/2025 23:17:47 - CPU Cores: 8, Threads: 8, RAM: 7.72 GB
[INFO] 29/Jan/2025 23:17:47 - MobSF Basic Environment Check
Superuser created successfully.
[INFO] 29/Jan/2025 23:17:48 - Checking for Update.
[INFO] 29/Jan/2025 23:17:48 - No updates available.
[INFO] 29/Jan/2025 23:17:49 - Loading User config from: /home/mobsf/.MobSF/config.py
[INFO] 29/Jan/2025 23:17:51 - 

Una vez completada la instalación y la configuración, MobSF estará accesible desde un navegador web a través de la URL

http://127.0.0.1:8000/

, donde se podrá comenzar a cargar aplicaciones y generar análisis de seguridad de manera automática.

image.png

palera1n

Palera1n es una herramienta de jailbreak para dispositivos iOS basada en la vulnerabilidad checkm8, un exploit a nivel de bootrom que afecta a dispositivos con chips A7 hasta A11 (por ejemplo, desde iPhone 5s hasta iPhone X).

En este laboratorio se utiliza sobre:

  • iPhone 7 con iOS 15.7.3
  • iPhone 7 con iOS 15.8.5

Ambos dispositivos son compatibles al contar con chip A10, dentro del rango afectado por checkm8.


Características principales

  • Jailbreak basado en checkm8 (exploit de hardware no parcheable mediante actualización de iOS).
  • Compatible con iOS 15.x y 16.x (y algunas versiones específicas de iOS 17).
  • Utiliza un entorno ramdisk, ejecutándose desde modo DFU.
  • Requiere computadora (Linux o macOS) y conexión USB.
  • Permite instalar gestores de paquetes como Sileo o Zebra.
  • Es semi-tethered, lo que significa que requiere volver a ejecutarse desde la computadora tras cada reinicio del dispositivo.

¿Para qué se usa en pentesting?

Palera1n es fundamental en laboratorios de seguridad iOS porque permite:

  • Acceso completo al sistema de archivos.
  • Bypass de ciertas protecciones del sistema.
  • Instalación de herramientas como Frida directamente en el dispositivo.
  • Análisis dinámico avanzado de aplicaciones.
  • Pruebas sobre detección de jailbreak en aplicaciones móviles.

Sin jailbreak, muchas pruebas dinámicas profundas no serían posibles en dispositivos físicos.


Modalidades de jailbreak en Palera1n

Palera1n permite trabajar en dos modos: rootless y rootful, cada uno con implicaciones técnicas importantes.


Rootless jailbreak

  • No modifica directamente la partición principal del sistema.
  • Los cambios se realizan en un espacio separado (por ejemplo, /var/jb/).
  • Utiliza técnicas como bind mounts para inyectar modificaciones.
  • Es el modelo adoptado en versiones modernas de iOS (16 y 17).
  • Más estable y seguro para entornos de laboratorio.
  • Algunas herramientas deben estar adaptadas específicamente para rootless.

Este modo es el más recomendado actualmente para pruebas de seguridad en versiones recientes de iOS.


Rootful jailbreak

  • Modifica directamente la partición del sistema.
  • Permite acceso completo a rutas como /System, /usr, etc.
  • Similar al modelo tradicional de jailbreak en versiones antiguas.
  • Más riesgoso, ya que altera el sistema base.
  • Generalmente no compatible con iOS 16+ debido a nuevas protecciones de Apple.

Este modo es más potente, pero también más invasivo y menos compatible en versiones modernas.

La herramienta puede descargarse desde la sección oficial de releases del proyecto en GitHub: palera1n Para este laboratorio vamos a trabajar con la versión 2.0.2, que es estable y compatible con los dispositivos que estamos utilizando. Es importante tener en cuenta que, con el tiempo, pueden publicarse versiones más recientes con mejoras o cambios en el funcionamiento.

La idea es que aprendamos el proceso con una versión concreta y funcional. Más adelante, cuando aparezcan nuevas versiones, ya tendremos la base necesaria para entender qué cambia y cómo adaptarnos.

image.png

Bajamos y nos encontmos con el instalador

image.png

ahora vamos a descargar el paquete con el comando wget [https://github.com/palera1n/palera1n/releases/download/v2.0.2/palera1n_amd64.deb](https://github.com/palera1n/palera1n/releases/download/v2.0.2/palera1n_amd64.deb)

image.png

ahora con el comando dpkg -i palera1n_amd64.deb vamos a realizar la instalación, antes de estos nos podemos pasar al usuario root con el comando sudo su y ponemos la contraseña aunque también podriamos ejecutar directamente sudo dpkg -i palera1n_amd64.deb y poner la contraseña de root.

image.png

ahora podemos confirmar la instalación con el comando palera1n -h

image.png

Para realizar el jailbreak en modalidad rootless (la que vimos antes, más estable y recomendada para versiones recientes de iOS), ejecutamos el comando palera1n -l y seguimos las instrucciones que va mostrando la herramienta en pantalla.

image.png

Para la modalidad rootful el proceso requiere dos comandos. El primero es palera1n -f -c, que prepara el dispositivo en modo DFU y aplica los parches iniciales del jailbreak; seguimos las instrucciones que va mostrando la herramienta.

image.png

Una vez el equipo se reinicia, ejecutamos el segundo comando, palera1n -f, que completa el proceso de jailbreak rootful, y seguimos igualmente las instrucciones en pantalla.

image.png

Con este proceso, para el iPhone 7, se realizó sin ningún problema, pero para el iPhone 7 Plus, después de ejecutar el comando palera1n -f -c el dispositivo se quedó en una pantalla negra, es decir se quedó en pongoOS (el entorno intermedio que carga palera1n antes de aplicar el jailbreak final), señal de que el proceso rootful no logró completarse en ese dispositivo.

image.png

Se realiza un reinicio, para realizar esto se hace con Mantén presionados Power + Volumen abajo y esperar a que salga el logo de apple y el equipo se reinicia, cuando realiza este proceso, ejecutamos el comando palera1n -f y esperamos a realice el proceso y verificamos si aparece el palera1n aparece en el dispositivo.

image.png

Como en este dispositivo el modo rootful se quedó atascado en pongoOS, optamos por la alternativa que sí funcionó: un jailbreak rootless con el comando palera1n -f --rootless, repitiendo el proceso de instalación.

image.png

Una vez se reinicia el equipo, vemos que tenemos la aplicación palera1n en el dispositivo

image.png

ahora al abrir la aplicación vemos que tenemos a Sileo, vamos a realizar la instalación para confirmar el jailbreak

image.png

realizamos el procedimiento para instalarlo

image.png

image.png

una vez termina vemos la aplicación instalada en el dispositivo

image.png

Al ejecutar y observar que la aplicación Sileo abre y funciona correctamente, se evidencia que el dispositivo cuenta con jailbreak activo, ya que esta herramienta requiere parches a nivel de sistema y privilegios elevados que no están disponibles en un iOS estándar sin modificar.

image.png

image.png

Un error que se puede encontrar es que por ejemplo en el dispositivo Iphone SE con la versión 15.8 al momento de realizar el rootful, , el equipo se queda congelado en la pantalla de inicio (verbose mode) y no termina de arrancar.

IMG_3928.jpg

{81396D6B-C22E-45AA-BBD8-7F7E9679EB21}.png

bootra1n

bootra1n es una herramienta que te permite ejecutar un entorno Linux (Live Linux) desde una USB, con el propósito específico de usar herramientas como checkra1n para hacer jailbreak a dispositivos iOS.

¿Qué hace exactamente bootra1n?

  • Carga un sistema Linux temporalmente desde una USB (sin instalar nada en el disco).
  • Viene preconfigurado con checkra1n, un jailbreak semi-tethered basado en el exploit checkm8.
  • Permite hacer jailbreak a dispositivos compatibles sin necesidad de usar macOS o instalar Linux permanentemente.

¿Para qué se usa?

  • Ideal para usuarios de Windows que no tienen Linux y quieren hacer jailbreak con checkra1n.
  • Puedes conectar tu dispositivo iOS, iniciar bootra1n desde la USB, ejecutar checkra1n en modo CLI (terminal) y realizar el jailbreak.

Ventajas

  • No requiere instalación en disco.
  • Portátil y fácil de usar desde una USB.
  • Requiere solo conocimientos básicos de terminal.

Descargamos el archivo ISO de bootra1n desde la página de releases del proyecto.

image.png

ahora descarga rufus que es una herramienta gratuita para Windows que permite crear unidades USB booteables, como instaladores de sistemas operativos (Linux, Windows, etc.) a partir de archivos ISO. Es rápida, liviana y muy fácil de usar.

image.png

Conectamos una memoria USB, que tenga la capacidad para cargar el sistema y ejecutamos rufus, cargamos la ISO y demás opciones. una vez esté todo como se desea, se le da clic en empezar

image.png

Nos sale una advertencia que nos dice que la USB será formateada y se perderá cualquier información que se encuentre en ésta, damos clic en aceptar e inicia el proceso.

image.png

Una vez termina el proceso, Rufus mostrará el mensaje de PREPARADO, confirmando que la USB booteable quedó lista.

image.png

Así debe quedar la USB una vez termina el proceso. El sistema Live Linux que carga bootra1n pesa muy poco, por lo que todo el proceso es bastante rápido.

image.png

una vez iniciemos el sistema en el equipo, nos saldrá una pantalla como esta e ingresamos en la tercera opción.

image.png

Cuando termina de cargar nos pedirá unas credenciales, que son usuario: anon y contraseña: voidlinux

image.png

cuando se inicia la sesión ejecutamos el comando sudo checkra1n para iniciar la herramienta

image.png

y de esta manera se inicia la herramienta.

image.png

conectamos el dispositivo y debe salir la información de éste, cuando ya nos cargue de esa manera, debemos pasarnos con la tecla de derecha a la opción de start y dar enter

image.png

Eso nos cargará esta pantalla, nos dice el modo en que se va a poner el dispositivo, nos dice que será un proceso manual y nos explicará el proceso para realizar el jailbreak. el dispositivo se pondrá en modo recuperación y nos dice que demos clic cuando estemos listo.

image.png

una vez damos clic el disposivido queda de esta menera

image.png

y en la herramienta nos explica el proceso, para este equipo se debe apretar en simultanero el boton Top y el home, esto por 4 segundos y el home, un total de 10 segundos

image.png

Mientras se aplican los pasos del jailbreak, el equipo se pone en este estado intermedio.

image.png

Luego de un momento, el proceso de jailbreak continúa y el dispositivo se ve así.

image.png

Para terminar, se realiza un reinicio del dispositivo, y con esto el equipo queda con el jailbreak aplicado mediante checkra1n.

image.png

Dopamine

Dopamine es un jailbreak rootless para iOS 15 y 16, desarrollado por opa334, el mismo autor detrás de TrollStore. A diferencia de palera1n (que se basa en checkm8, un exploit a nivel de bootrom limitado a chips A7-A11 y de tipo semi-tethered, requiriendo reconexión a la computadora tras cada reinicio), Dopamine utiliza un exploit a nivel de kernel conocido como KFD, y es untethered una vez instalado: no necesita el cable ni la computadora para mantenerse activo después de reiniciar el dispositivo.

En este laboratorio se utiliza sobre un iPhone con iOS 16.7.16 — un dispositivo que ya está fuera del rango de checkm8, por lo que Dopamine es la opción correspondiente en este caso.

Puedes descargarla desde la sección oficial de releases del proyecto en GitHub: Dopamine. Para este laboratorio, con el iPhone en iOS 16.7.16, usamos la versión 2.5 Beta 3.

image.png

Como el IPA no viene firmado para instalación directa, lo cargamos con Sideloadly para firmarlo con un Apple ID, tal como vimos en la sección de Sideloadly.

image.png

Una vez termina el proceso de Sideloadly, Dopamine queda instalado en el dispositivo.

image.png

Al intentar abrir la aplicación por primera vez, iOS nos muestra que no pudo verificar al desarrollador. Esto es normal cuando instalamos apps firmadas con un Apple ID personal en lugar de un certificado de la App Store: el sistema todavía no confía en ese certificado.

image.png

Para solucionar esto, entramos a Configuración → General, que es donde iOS gestiona los perfiles y la confianza de los desarrolladores.

image.png

Dentro de General, vamos a Admón. de dispositivos y VPN, la sección donde se agrupan los perfiles de desarrollador instalados en el dispositivo.

image.png

Ahí encontramos la opción Verificar apps, y junto al nombre del desarrollador vemos que Dopamine aparece marcado como sin verificar.

image.png

Al tocar la opción, iOS nos pide confirmar que queremos verificar las apps de este desarrollador usando la conexión de red del dispositivo. Damos clic en Verificar.

image.png

Una vez completa la verificación, el estado cambia a Verificada, lo que confirma que el sistema ya confía en el certificado y podemos abrir la app con normalidad.

image.png

Ahora sí abrimos la aplicación de Dopamine. En la parte inferior encontramos el botón con el ícono de candado abierto, que dice Jailbreak, y es el que inicia todo el proceso.

image.png

Dopamine nos pide seleccionar los gestores de paquetes que queremos instalar junto con el jailbreak. Seleccionamos Sileo y Zebra, y damos clic en Continuar.

image.png

El proceso arranca y empezamos a ver los mensajes de Downloading kernel y buscando parches, mientras Dopamine descarga y aplica los parches necesarios para completar el jailbreak.

image.png

termina el proceso y se reinicia

Que Sileo abra y funcione correctamente confirma que el dispositivo ya tiene jailbreak activo. Con Dopamine instalado y probado

image.png

Grapefruit

Grapefruit es una herramienta con interfaz web que permite explorar, inyectar código y depurar aplicaciones iOS en tiempo real, todo utilizando Frida como motor principal. Funciona de forma local o remota y permite conectarte a dispositivos para interactuar con las apps instaladas.

Características destacadas:

  • Enumeración visual de apps instaladas en el dispositivo.
  • Inspección de clases, métodos y estructuras de cada app.
  • Permite inyectar código JavaScript directamente sobre apps activas.
  • Compatible con conexiones locales o remotas (ideal para análisis desde PC).
  • Diseñado para pentesters, investigadores y entusiastas.

Requisitos:

  • Node.js en la máquina host.
  • Un navegador web

la instalación es con el comando npm install -g igf

┌──(rootangussMoody)-[/mnt/angussMoody/iOS/Herramientas]
└─# npm install -g igf

added 174 packages in 42s

25 packages are looking for funding
  run `npm fund` for details
npm notice
npm notice New major version of npm available! 10.8.2 -> 11.1.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.1.0
npm notice To update run: npm install -g npm@11.1.0
npm notice

Una vez instalado, se confirma ésta instalación con el comando igf --help

┌──(rootangussMoody)-[/mnt/angussMoody/iOS/Herramientas]
└─# igf --help
Usage: igf [options]

Options:
  -h, --host <string>  hostname (default: "127.0.0.1")
  -p, --port <number>  port of the server side (default: 31337)
  --help               display help for command

una vez que ya esté instalado, se ejecuta con el comando igf

┌──(rootangussMoody)-[/mnt/angussMoody/iOS/Herramientas]
└─# igf
Grapefruit running on http://127.0.0.1:31337

Ahora para ejecutar el panel web, vamos a un navegador y vamos a la URL http://127.0.0.1:31337

{D1C6CEC5-371E-415F-AC56-A1DCC1B1C1D6}.png

Una vez se reinicia el equipo nos puede dar el siguiente error, el entorno de Node.js no estaba correctamente configurado en la terminal. Esto sucede cuando no se inicializa NVM (Node Version Manager), lo cual impide que se cargue la versión adecuada de Node.js y sus paquetes globales.

┌──(rootangussMoody)-[/home/angussmoody]
└─# igf
Command 'igf' not found, did you mean:
  command 'igv' from deb igv
  command 'i2f' from deb wcstools
Try: apt install <deb name>

Para evitar este error, se debe agregar la configuración de NVM al archivo .bashrc con las sigientes lineas

echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc
echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.bashrc
echo 'nvm use 20' >> ~/.bashrc

o si tienes .zshrc

echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.zshrc
echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.zshrc
echo 'nvm use 20' >> ~/.zshrc

y luego el comando source ~/.bashrc o el comando source ~/.zshrc segun sea el caso

┌──(rootangussMoody)-[/home/angussmoody]
└─# source /root/.bashrc
Now using node v20.18.3 (npm v10.8.2)