> For the complete documentation index, see [llms.txt](https://books.spartan-cybersec.com/cppj/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://books.spartan-cybersec.com/cppj/os-for-juniors/android.md).

# Android

Android es uno de los sistemas operativos más utilizados en el mundo, diseñado principalmente para dispositivos móviles como smartphones y tablets. Desarrollado por Google, Android es un sistema operativo basado en el kernel de Linux, que ofrece una plataforma abierta para el desarrollo y la distribución de aplicaciones.

```
adb shell getprop ro.build.version.release
```

## <mark style="color:green;">**Estructura y Características de Android**</mark>

### <mark style="color:green;">**Estructura**</mark>

La arquitectura de Android se compone de varias capas, cada una con funciones específicas:

1. <mark style="color:green;">**Kernel de Linux**</mark><mark style="color:green;">:</mark> La base del sistema operativo Android es el kernel de Linux, que gestiona los recursos del hardware, incluyendo la memoria, los procesos y la red. Este kernel se ha modificado para satisfacer las necesidades de Android.
2. <mark style="color:green;">**Bibliotecas Nativas**</mark><mark style="color:green;">:</mark> Encima del kernel de Linux, Android utiliza un conjunto de bibliotecas nativas escritas en C/C++. Estas bibliotecas proporcionan muchas de las características básicas de Android, como gráficos 2D y 3D, base de datos SQLite y el motor de navegador WebKit.
3. <mark style="color:green;">**Android Runtime (ART)**</mark><mark style="color:green;">:</mark> ART es el entorno de ejecución de aplicaciones en Android. Todas las aplicaciones Android se ejecutan dentro de su propia instancia de ART, que traduce el bytecode de las aplicaciones a instrucciones del sistema operativo.
4. <mark style="color:green;">**Framework de Aplicaciones**</mark><mark style="color:green;">:</mark> Esta capa ofrece muchas clases y servicios que los desarrolladores pueden utilizar para crear aplicaciones Android. Incluye administradores de actividades, notificaciones, recursos, y contenido, así como servicios de mensajería.
5. <mark style="color:green;">**Aplicaciones del Sistema**</mark><mark style="color:green;">:</mark> En la parte superior de la arquitectura se encuentran las aplicaciones preinstaladas, como el navegador, el teléfono, los contactos y la cámara. Estas aplicaciones proporcionan funcionalidades básicas a los usuarios y sirven como ejemplos de buenas prácticas de desarrollo.

### <mark style="color:green;">**Características Principales**</mark>

* <mark style="color:green;">**Interfaz de Usuario Personalizable**</mark><mark style="color:green;">:</mark> Android permite a los fabricantes de dispositivos y a los usuarios personalizar la apariencia del sistema operativo.
* <mark style="color:green;">**Multitarea**</mark><mark style="color:green;">:</mark> Los usuarios pueden ejecutar múltiples aplicaciones al mismo tiempo.
* <mark style="color:green;">**Notificaciones**</mark><mark style="color:green;">:</mark> Sistema avanzado de notificaciones que permite a las aplicaciones informar a los usuarios de eventos importantes.
* <mark style="color:green;">**Soporte para múltiples pantallas y resoluciones**</mark><mark style="color:green;">:</mark> Android es compatible con una amplia variedad de dispositivos y tamaños de pantalla.
* <mark style="color:green;">**Seguridad**</mark><mark style="color:green;">:</mark> Incluye varias capas de seguridad para proteger los datos del usuario y la integridad del sistema.

### <mark style="color:green;">**Importancia de Uso en el Mercado**</mark>

Android domina una gran parte del mercado global de smartphones. Algunas razones de su popularidad incluyen:

* <mark style="color:green;">**Código Abierto**</mark><mark style="color:green;">:</mark> Android es un sistema operativo de código abierto, lo que permite a los fabricantes de dispositivos adaptarlo a sus necesidades específicas.
* <mark style="color:green;">**Variedad de Dispositivos**</mark><mark style="color:green;">:</mark> Existen dispositivos Android en todos los rangos de precio, desde modelos económicos hasta teléfonos de alta gama.
* <mark style="color:green;">**Ecosistema de Aplicaciones**</mark><mark style="color:green;">:</mark> Google Play Store ofrece millones de aplicaciones, lo que proporciona una amplia gama de opciones a los usuarios.
* <mark style="color:green;">**Actualizaciones Frecuentes**</mark><mark style="color:green;">:</mark> Google lanza actualizaciones periódicas que mejoran la seguridad y agregan nuevas características.

### <mark style="color:green;">**Archivos y Rutas Importantes**</mark>

En el contexto de Android, hay varios archivos y rutas que son cruciales tanto para el funcionamiento del sistema como para el desarrollo y la seguridad de aplicaciones:

* <mark style="color:green;">**/system**</mark><mark style="color:green;">:</mark> Contiene el sistema operativo Android y es de solo lectura. Incluye el kernel, bibliotecas, y las aplicaciones de sistema.
* <mark style="color:green;">**/data**</mark><mark style="color:green;">:</mark> Aquí se almacenan las aplicaciones instaladas por el usuario y sus datos. Cada aplicación tiene su propio directorio, accesible solo por esa aplicación.
* <mark style="color:green;">**/cache**</mark><mark style="color:green;">:</mark> Utilizado para almacenar datos temporales y caché del sistema y de las aplicaciones.
* <mark style="color:green;">**/sdcard**</mark><mark style="color:green;">:</mark> En dispositivos con almacenamiento externo, este directorio se utiliza para almacenar datos del usuario, como fotos, música y documentos.
* <mark style="color:green;">**AndroidManifest.xml**</mark><mark style="color:green;">:</mark> Este archivo en cada aplicación define componentes esenciales, permisos requeridos, y otras configuraciones importantes.
* <mark style="color:green;">**build.prop**</mark><mark style="color:green;">:</mark> Archivo de configuración del sistema que define propiedades del sistema, como la versión de Android y el modelo del dispositivo.

### <mark style="color:green;">**Funcionamiento de los Permisos**</mark>

Los permisos en Android son una parte fundamental de la seguridad del sistema operativo. Permiten a las aplicaciones acceder a recursos y datos protegidos, y están diseñados para proteger la privacidad y la seguridad del usuario.

#### **Tipos de Permisos**

1. <mark style="color:green;">**Permisos Normales**</mark><mark style="color:green;">:</mark> Permiten el acceso a datos y recursos de bajo riesgo, como el acceso a internet. Estos permisos se otorgan automáticamente sin necesidad de la aprobación del usuario.
2. <mark style="color:green;">**Permisos de Firma**</mark><mark style="color:green;">:</mark> Permiten el acceso a recursos compartidos entre aplicaciones firmadas con la misma clave de desarrollador.
3. <mark style="color:green;">**Permisos de Tiempo de Ejecución (Runtime Permissions)**</mark><mark style="color:green;">:</mark> Introducidos en Android 6.0 (Marshmallow), requieren la aprobación del usuario en tiempo de ejecución para acceder a recursos sensibles, como la ubicación, la cámara y los contactos.

### <mark style="color:green;">**Solicitud y Gestión de Permisos**</mark>

* <mark style="color:green;">**AndroidManifest.xml**</mark><mark style="color:green;">:</mark> Los permisos que una aplicación necesita deben declararse en este archivo. Por ejemplo, `<uses-permission android:name="android.permission.CAMERA" />`.
* <mark style="color:green;">**Solicitud en Tiempo de Ejecución**</mark><mark style="color:green;">:</mark> Para permisos de tiempo de ejecución, la aplicación debe solicitar el permiso en tiempo de ejecución utilizando `requestPermissions()`. El sistema mostrará un cuadro de diálogo al usuario para aprobar o denegar el permiso.
* <mark style="color:green;">**Revisión de Permisos**</mark><mark style="color:green;">:</mark> Los usuarios pueden revisar y gestionar los permisos otorgados a cada aplicación desde la configuración del dispositivo.

### <mark style="color:green;">**Importancia en el Pentesting**</mark>

En el pentesting, entender cómo funcionan los permisos es crucial para evaluar la seguridad de las aplicaciones. Los pentesters deben verificar:

* <mark style="color:green;">**Declaraciones de Permisos**</mark><mark style="color:green;">:</mark> Asegurarse de que las aplicaciones solo soliciten los permisos necesarios.
* <mark style="color:green;">**Uso de Permisos**</mark><mark style="color:green;">:</mark> Verificar cómo las aplicaciones utilizan los permisos y si manejan correctamente la solicitud y revocación de los mismos.
* <mark style="color:green;">**Exposición de Datos**</mark><mark style="color:green;">:</mark> Evaluar si las aplicaciones exponen datos sensibles a través de permisos mal gestionados.

## <mark style="color:green;">**Conclusión**</mark>

Android es un sistema operativo complejo y robusto que se utiliza en una amplia gama de dispositivos móviles. Su arquitectura modular, junto con su enfoque en la seguridad y personalización, lo ha convertido en la opción preferida para millones de usuarios y desarrolladores en todo el mundo. Para los pentesters, comprender en profundidad su estructura, características y manejo de permisos es esencial para realizar evaluaciones de seguridad efectivas y asegurar que las aplicaciones sean seguras y protegidas contra amenazas potenciales.
