Hola, mis buenos amigos de Hackplayers, su amigo stux de nuevo por estos lares solo que esta vez no será ninguna máquina boot2root, en esta ocasión vengo aportar un pequeño post sobre algo que es muy de moda y que me gusta mucho, me refiero a lo que es el hacking de aplicaciones móviles en este caso orientado en android.
Es común encontrar aplicaciones móviles cuando estamos llevando a cabo una auditoría de seguridad o haciendo programas de recompensas por errores, así que decidí crear este pequeño post donde veremos unos conceptos básicos que debemos tener en cuenta antes de poder iniciar a reventar cosas, no comais ansias.
Las aplicaciones Android se dividen ampliamente en tres tipos en función de cómo se desarrollan:
1. Nativas
2. Hibridas
3. Aplicaciones basadas en web
Nativas: Son aquellas aplicaciones desarrolladas única y exclusivamente para sistemas operativos móviles, ya sea Android o IOS. En Android se utiliza el lenguaje de programación Java o kotlin, mientras que en IOS se hace uso de Swift o Objective-C. Estos lenguajes de programación son los oficiales de los respectivos sistemas operativos.
Híbridas: Estas aplicaciones utilizan tecnologías como HTML, CSS y JavaScript, todas ellas vinculadas y procesadas a través de frameworks como Apache Córdova, Ionic, entre otras.
Web: Una aplicación web móvil, es exactamente lo que dice que es, una aplicación desarrollada con tecnologías web como JavaScript o HTML5 para proporcionar capacidades de interacción, navegación o personalización. Se ejecutan en el explorador web de un dispositivo móvil y se representan solicitando páginas web desde el servidor back-end.
Estructura fundamental de las aplicaciones Android
Cada aplicación que descargamos e instalamos desde Play Store o cualquier otra fuente tiene la extensión .apk. Estos archivos APK son archivos comprimidos, que contienen otros archivos y carpetas que discutiremos en un momento.
AndroidManifest.xml: el archivo de manifiesto en formato XML binario.
classes.dex: código de aplicación compilado en el formato dex.
resources.arsc: archivo que contiene recursos de aplicación precompilados, en XML binario.
res/: carpeta que contiene recursos no compilados en resources.arsc
assets/: carpeta opcional que contiene activos de aplicaciones, que AssetManager puede recuperar.
lib/: carpeta opcional que contiene código compilado, es decir, bibliotecas de código nativas.
META-INF/: carpeta que contiene el MANIFEST. MF, que almacena metadatos sobre el contenido del JAR. que a veces se almacenará en una carpeta llamada original. La firma del APK también se almacena en esta carpeta.
Cada archivo APK incluye un archivo AndroidManifest.xml que declara el nombre del paquete de la aplicación, los componentes de la versión y otros metadatos. Detalle completo del archivo de especificaciones del manifiesto de Android se puede ver aquí. A continuación, se muestran solo algunos atributos comunes que se pueden identificar en AndroidManifest.
La aplicación apk que esta incluye un archivo .dex, que contiene código de bytes binario Dalvik. Smali es un lenguaje ensamblador que se ejecuta en la JVM (Java Virtual Machine) de Android.
Ejemplo código smali:
Sintaxis Smali – Tipos
En el código de bytes de dalvik, los registros son siempre de 32 bits y pueden contener cualquier tipo de valor. 2 registros se utilizan para contener tipos de 64 bits (largo y doble). Para más información sobre registros smali visitar la siguiente wiki
Ubicación de almacenamiento de archivos APK dentro de nuestro dispositivo móvil
Dependiendo de quién instaló la aplicación y qué opciones adicionales se proporcionan durante la instalación, hay diferentes ubicaciones de almacenamiento en los dispositivos Android.
/data/app/. Las aplicaciones instaladas por el usuario se colocarán en esta ubicación.
/system/app/. Las aplicaciones que vienen con la imagen del sistema se colocarán bajo esta ubicación.
/data/app-private/. Las aplicaciones que requieren una protección de copia especial en el dispositivo suelen estar bajo esta carpeta.
Con esto damos por terminada la primera parte de esta serie post sobre Android hacking, en el próximo estaremos montando nuestro laboratorio con las diferentes herramientas que podemos utilizar para las pruebas de seguridad para hacking de aplicaciones Android.
Saludos.
Es común encontrar aplicaciones móviles cuando estamos llevando a cabo una auditoría de seguridad o haciendo programas de recompensas por errores, así que decidí crear este pequeño post donde veremos unos conceptos básicos que debemos tener en cuenta antes de poder iniciar a reventar cosas, no comais ansias.
Las aplicaciones Android se dividen ampliamente en tres tipos en función de cómo se desarrollan:
1. Nativas
2. Hibridas
3. Aplicaciones basadas en web
Nativas: Son aquellas aplicaciones desarrolladas única y exclusivamente para sistemas operativos móviles, ya sea Android o IOS. En Android se utiliza el lenguaje de programación Java o kotlin, mientras que en IOS se hace uso de Swift o Objective-C. Estos lenguajes de programación son los oficiales de los respectivos sistemas operativos.
Híbridas: Estas aplicaciones utilizan tecnologías como HTML, CSS y JavaScript, todas ellas vinculadas y procesadas a través de frameworks como Apache Córdova, Ionic, entre otras.
Web: Una aplicación web móvil, es exactamente lo que dice que es, una aplicación desarrollada con tecnologías web como JavaScript o HTML5 para proporcionar capacidades de interacción, navegación o personalización. Se ejecutan en el explorador web de un dispositivo móvil y se representan solicitando páginas web desde el servidor back-end.
Estructura fundamental de las aplicaciones Android
Cada aplicación que descargamos e instalamos desde Play Store o cualquier otra fuente tiene la extensión .apk. Estos archivos APK son archivos comprimidos, que contienen otros archivos y carpetas que discutiremos en un momento.
Imagen 1. Estructura de una aplicación Android |
AndroidManifest.xml: el archivo de manifiesto en formato XML binario.
classes.dex: código de aplicación compilado en el formato dex.
resources.arsc: archivo que contiene recursos de aplicación precompilados, en XML binario.
res/: carpeta que contiene recursos no compilados en resources.arsc
assets/: carpeta opcional que contiene activos de aplicaciones, que AssetManager puede recuperar.
lib/: carpeta opcional que contiene código compilado, es decir, bibliotecas de código nativas.
META-INF/: carpeta que contiene el MANIFEST. MF, que almacena metadatos sobre el contenido del JAR. que a veces se almacenará en una carpeta llamada original. La firma del APK también se almacena en esta carpeta.
Cada archivo APK incluye un archivo AndroidManifest.xml que declara el nombre del paquete de la aplicación, los componentes de la versión y otros metadatos. Detalle completo del archivo de especificaciones del manifiesto de Android se puede ver aquí. A continuación, se muestran solo algunos atributos comunes que se pueden identificar en AndroidManifest.
Attributes
|
Notes
|
Manifest
tag
|
contiene
el modo de instalación de Android, el nombre del paquete, las
versiones de compilación
|
Permissions
|
permiso
personalizado y nivel de protección
|
uses-permissions
|
solicita
un permiso que debe concederse para que funcione, la lista
completa de permisos api puede hacer referencia aquí.
|
uses-feature
|
Declara
una única característica de hardware o software que utiliza la
aplicación.
|
Application
|
La
declaración de la solicitud contendrá toda la actividad
|
Activity
|
Declara
una actividad que implementa parte de la interfaz de usuario
visual de la aplicación.
|
intent-filter
|
Especifica
los tipos de intenciones a los que puede responder una actividad,
servicio o receptor de difusión.
|
service
|
Declara
un servicio como uno de los componentes de la aplicación.
|
receiver
|
Los
receptores de difusión permiten que las aplicaciones reciban
intenciones que son emitidas por el sistema o por otras
aplicaciones, incluso cuando otros componentes de la aplicación
no se están ejecutando.
|
provider
|
Declara
un componente de proveedor de contenido. Un proveedor de
contenido es una subclase de ContentProvider que proporciona
acceso estructurado a los datos administrados por la aplicación.
|
La aplicación apk que esta incluye un archivo .dex, que contiene código de bytes binario Dalvik. Smali es un lenguaje ensamblador que se ejecuta en la JVM (Java Virtual Machine) de Android.
Ejemplo código smali:
Sintaxis Smali – Tipos
En el código de bytes de dalvik, los registros son siempre de 32 bits y pueden contener cualquier tipo de valor. 2 registros se utilizan para contener tipos de 64 bits (largo y doble). Para más información sobre registros smali visitar la siguiente wiki
Ubicación de almacenamiento de archivos APK dentro de nuestro dispositivo móvil
Dependiendo de quién instaló la aplicación y qué opciones adicionales se proporcionan durante la instalación, hay diferentes ubicaciones de almacenamiento en los dispositivos Android.
/data/app/. Las aplicaciones instaladas por el usuario se colocarán en esta ubicación.
/system/app/. Las aplicaciones que vienen con la imagen del sistema se colocarán bajo esta ubicación.
/data/app-private/. Las aplicaciones que requieren una protección de copia especial en el dispositivo suelen estar bajo esta carpeta.
Con esto damos por terminada la primera parte de esta serie post sobre Android hacking, en el próximo estaremos montando nuestro laboratorio con las diferentes herramientas que podemos utilizar para las pruebas de seguridad para hacking de aplicaciones Android.
Saludos.
Contribución gracias a César Calderón
Comentarios
Publicar un comentario