Teoría Básica
Introducción a iOS
iOS es el sistema operativo móvil desarrollado por Apple, diseñado específicamente para dispositivos como el iPhone, iPad y iPod Touch. Se ha caracterizado por su enfoque en la seguridad, el rendimiento y una experiencia de usuario fluida e intuitiva. Este sistema operativo se basa en una arquitectura en capas que permite a los desarrolladores interactuar con el hardware y los servicios del dispositivo de forma controlada, manteniendo la estabilidad y la protección del sistema.
Arquitectura de iOS
1. Core OS (Sistema Operativo Básico)
Esta capa se encuentra directamente sobre el hardware del dispositivo y es la base más baja en la arquitectura de iOS. Proporciona funciones de bajo nivel esenciales para el funcionamiento de todo el sistema. Entre sus servicios se incluyen:
- Administración de memoria
- Manejo del sistema de archivos
- Manejo de procesos e hilos (threads)
- Acceso a redes de bajo nivel
- Conexión con accesorios externos (como dispositivos Bluetooth, sensores, etc.)
Es como el “corazón” técnico del sistema operativo.
2. Core Services (Servicios Básicos)
Esta capa está justo encima del Core OS y ofrece una abstracción, es decir, una manera más sencilla y estructurada de acceder a las funciones que provee el Core OS. Aquí se encuentran servicios fundamentales del sistema como:
- Manejo de contactos
- Manejo de archivos y bases de datos
- Geolocalización
- Preferencias del usuario
- Notificaciones y acceso a redes
Es una capa de servicios fundamentales que usan muchas aplicaciones del sistema y del usuario.
3. Media Layer (Capa de Medios)
Esta capa se encarga de todo lo relacionado con la parte multimedia del dispositivo. Permite a las aplicaciones trabajar con:
- Imágenes y fotos
- Reproducción y grabación de audio
- Reproducción y edición de video
- Gráficos, animaciones y efectos visuales
- Renderizado 2D y 3D (por ejemplo, para videojuegos)
Gracias a esta capa, las apps pueden mostrar interfaces ricas en contenido visual y sonoro.
4. Cocoa Touch
Es la capa superior del stack de iOS y está pensada especialmente para los desarrolladores. Proporciona un conjunto de bibliotecas y herramientas para crear las interfaces y funcionalidades de las aplicaciones. Incluye:
- Controles de interfaz de usuario (botones, listas, menús, etc.)
- Manejo de gestos táctiles (toques, deslizamientos, pellizcos, etc.)
- Manejo de eventos
- Navegación entre pantallas
- Soporte para MVC (Modelo-Vista-Controlador)
Es la capa que permite crear las experiencias de usuario que ves en tu iPhone o iPad.
jailbreak
El jailbreak es un proceso mediante el cual se eliminan las restricciones impuestas por Apple sobre los dispositivos iOS, permitiendo al usuario tener un control total sobre el sistema operativo. Esto incluye la posibilidad de instalar aplicaciones no autorizadas por la App Store, personalizar el sistema y acceder a archivos del sistema que normalmente están bloqueados.
Además, existen diferentes métodos de jailbreak según la versión de iOS. Una herramienta útil para verificar si tu dispositivo se puede liberar es Canijailbreak.com, la cual recomienda herramientas adecuadas según la versión de tu sistema.
El jailbreak puede realizarse desde sistemas operativos Windows, Mac o Linux.
Tipos de Jailbreak
Jailbreak Untethered (No Atado)
- Es un jailbreak permanente.
- El dispositivo permanece liberado incluso después de reiniciarlo.
- No requiere asistencia externa para mantener el estado de jailbreak.
Jailbreak Tethered (Atado)
- Es un jailbreak temporal.
- Al reiniciar el dispositivo, este vuelve a su estado original sin jailbreak.
- Para volver a aplicar el jailbreak, se necesita un ordenador.
Jailbreak Semi-Tethered
- El dispositivo puede encenderse por sí solo después de un reinicio.
- Sin embargo, el sistema vuelve a un estado sin modificaciones (sin kernel parcheado).
- Se necesita un ordenador para volver a habilitar las funciones de jailbreak.
Jailbreak Semi-Untethered
- Similar al untethered, el dispositivo puede reiniciarse normalmente.
- Tras el reinicio, vuelve al estado sin jailbreak.
- La diferencia: se puede reaplicar el jailbreak desde una aplicación instalada en el mismo dispositivo, sin necesidad de usar un ordenador.
Ejemplos:
- 🔌 Tethered: Se apaga tu iPhone ➜ No lo puedes prender hasta que lo conectes a una PC con la herramienta de jailbreak.
- 🧷 Semi-Tethered: Se apaga ➜ Se prende solo, pero sin el jailbreak activo. Necesitas la PC solo para reactivarlo.
- 📱 Semi-Untethered: Se apaga ➜ Se prende solo, y puedes reactivar el jailbreak desde una app en el mismo dispositivo, sin PC.
- 🔓 Untethered: Se apaga ➜ Se prende solo y el jailbreak sigue activo.
¿Qué es Rootful?
- Rootful significa que el jailbreak tiene acceso completo al sistema de archivos de iOS, incluida la partición raíz (
/), donde se encuentra el sistema operativo.
¿Qué es Rootless?
- Rootless significa que el jailbreak no puede acceder a la partición raíz del sistema.
- Solo puede modificar áreas seguras como /var, que es donde se almacena la mayoría de los datos del usuario.
📁 Estructura de un archivo IPA
Un archivo IPA (iOS App Store Package) es el formato utilizado por Apple para distribuir e instalar aplicaciones en dispositivos que usan el sistema operativo iOS, como el iPhone y el iPad
Para poder analizar la estructura interna de un archivo IPA (el formato de las aplicaciones de iOS), primero debemos cambiar la extensión del archivo de .ipa a .zip. Luego, descomprimimos el archivo, y obtendremos varios elementos importantes:
Componentes principales dentro de un IPA:
-
App binary (Binario de la app):
Es el archivo ejecutable que contiene el código fuente compilado de la aplicación. Este código ya no es legible directamente por humanos.
-
Info.plist:
Archivo de configuración que contiene información importante como:
- El ID del paquete (Bundle ID),
- El número de versión,
- El nombre que se muestra en el dispositivo,
- Entre otros datos de la aplicación.
-
Frameworks:
Carpeta que contiene las librerías dinámicas (código compartido) que la aplicación usa durante su ejecución.
-
embedded.mobileprovision:
Archivo que contiene los certificados y permisos de distribución de la aplicación. Es esencial para que iOS valide si la app está firmada correctamente y puede ejecutarse.
📱 Estructura del Sandbox en aplicaciones iOS
Cuando una aplicación es instalada en un dispositivo iOS, Apple utiliza un sistema de aislamiento llamado “sandbox”. Este mecanismo permite que cada aplicación tenga su propio entorno separado donde puede crear bases de datos locales y almacenar información, evitando así interferencias con otras aplicaciones. De esta forma, iOS asigna un espacio exclusivo a cada app, protegiendo la integridad y seguridad del sistema.
Tipos de sandboxes en dispositivos iOS
En un dispositivo iOS, existen tres tipos principales de directorios sandbox donde se almacenan archivos relacionados con las aplicaciones:
1 Directorio de aplicaciones preinstaladas — /var/Application
Este directorio contiene los archivos de las aplicaciones que vienen preinstaladas por defecto en el dispositivo, como Safari o Mensajes.
2. Bundle Directory — /var/containers/Bundle/Application
También conocido como contenedor del paquete IPA, aquí se encuentran todos los archivos que vienen incluidos con una aplicación descargada desde la App Store o desde otras fuentes.
Los archivos en este directorio no cambian mientras se mantenga la misma versión de la aplicación.
3. Data Directory — /var/mobile/Containers/Data/Application
Este directorio es conocido como el contenedor de almacenamiento de datos locales. Aquí se guardan los archivos que la aplicación necesita conservar, como datos en caché, configuraciones del usuario o información para uso sin conexión.
Es decir, contiene los datos generados y utilizados mientras la app está instalada y en uso.