A finales del mes pasado tuvimos el placer de presentaros nuestro primer crackme para sistemas Android. A continuación a mostraremos la solución al reto pero, cómo de momento sólo ha sido superado por unas pocas personas, vamos a dividir el solucionario en dos partes: la primera introduciendo unos conceptos básicos y preparando un emulador para probar la aplicación, y la segunda que publicaremos un poco más tarde y que contendrá la ingeniería inversa del apk del reto.
¡Esperamos que con este primer post os animéis todos los que todavía no lo habéis hecho! };)
Introducción
Lo primero que tenemos que tener claro antes de jugar con nuestro apk es el proceso de desarrollo de una aplicación Android. El lenguaje de programación de sus aplicaciones es Java y la gran diferencia es que el sistema de Google utiliza una máquina virtual llamada Dalvik, que se encarga de optimizar el bytecode compilado para su ejecución en teléfonos inteligentes o smartphones, es decir, sistemas con recursos más limitados.
A propósito de la relación entre Java y Android os recomiendo echar un vistazo a este excelente artículo de RevistaLiNUX.net. En él, podréis observar que Dalvik principalmente es una máquina basada en registros y no en pila, lo cual le permite utilizar una cantidad baja de memoria, y está diseñada para ejecutar cada aplicación aislada una máquina virtual diferente.
Resumiendo el proceso, Android primero compilará una clase escrita en Java y generará un fichero .class con el bytecode. Luego a su vez, el bytecode será transformado en el formato binario propio de la máquina Dalvik: .dex (Dalvik EXecutable):
Finalmente el fichero .dex será empaquetado en un único paquete .apk (Android application package) junto con resources, assets y el fichero manifest.
Si descomprimimos el paquete apk del reto lo veremos claramente:
Preparando el entorno
Es evidente que lo primero que necesitamos es un entorno de Java funcionando en nuestro equipo. Al menos JRE (Java Runtime Environment), aunque es recomendable JDK (Java Development Kit) porque incluye un jarsigner.
Una vez instalado procederemos a comprobar que java está incluido en la variable PATH y funcionando:
A continuación necesitamos el SDK de Android que contiene, entre otras herramientas, ADB (Android Debug Bridge) que nos permitirá mover ficheros, instalar aplicaciones o conectarnos al shell o intérprete de comandos de un teléfono (necesitaremos el driver USB) o un emulador (el SDK también incluye emuladores de Android).
Para instalarlo primero debemos descargarlo desde http://developer.android.com/sdk/index.html y seguir las instrucciones.
En Windows, básicamente sólo hay que instalar el ejecutable o descomprimir el zip:
Y añadir al menos una plataforma y los componentes mediante el SDK y AVD Manager (SDK Manager.exe):
Como nota adicional, os recomendamos instalar Eclipse con el plugin ADT (Android Development Tools) para realizar pruebas y disponer de un entorno de desarrollo muy versátil.
Una vez instalado el SDK de Android y para probar el crackme del reto, procederemos también a levantar un emulador virtual con la versión Froyo actual (Android 2.2).
A continuación veréis que el proceso de creación es muy sencillo:
1.- En ‘Virtual devices’ del Manager pulsaremos el botón ‘New’:
2.- Posteriormente seleccionaremos el nombre del emulador, el tipo de plataforma (target), el tamaño de la SD Card virtual, el tema y el hardware emulado:
3.- Finalmente pulsaremos el botón ‘start’ para que arranque el emulador:
Ahora que ya tenemos el emulador levantando, procederemos a instalar el paquete del crackme mediante ADB. Su instalación también es muy sencilla: descargamos el apk y ejecutamos lo siguiente:
Después de la instalación del apk, podremos ver el icono del crackme en el menú de aplicaciones:
Haremos clic en el icono y entraremos en la pantalla principal del crackme:
Ya está, ahora sólo falta averiguar el usuario y la contraseña... ¡el verdadero desafío!
Solución al reto del crackme#1 para Android
- Parte 1 de 2
- Parte 2 de 2
¡Esperamos que con este primer post os animéis todos los que todavía no lo habéis hecho! };)
Introducción
Lo primero que tenemos que tener claro antes de jugar con nuestro apk es el proceso de desarrollo de una aplicación Android. El lenguaje de programación de sus aplicaciones es Java y la gran diferencia es que el sistema de Google utiliza una máquina virtual llamada Dalvik, que se encarga de optimizar el bytecode compilado para su ejecución en teléfonos inteligentes o smartphones, es decir, sistemas con recursos más limitados.
A propósito de la relación entre Java y Android os recomiendo echar un vistazo a este excelente artículo de RevistaLiNUX.net. En él, podréis observar que Dalvik principalmente es una máquina basada en registros y no en pila, lo cual le permite utilizar una cantidad baja de memoria, y está diseñada para ejecutar cada aplicación aislada una máquina virtual diferente.
Resumiendo el proceso, Android primero compilará una clase escrita en Java y generará un fichero .class con el bytecode. Luego a su vez, el bytecode será transformado en el formato binario propio de la máquina Dalvik: .dex (Dalvik EXecutable):
Finalmente el fichero .dex será empaquetado en un único paquete .apk (Android application package) junto con resources, assets y el fichero manifest.
Si descomprimimos el paquete apk del reto lo veremos claramente:
Preparando el entorno
Es evidente que lo primero que necesitamos es un entorno de Java funcionando en nuestro equipo. Al menos JRE (Java Runtime Environment), aunque es recomendable JDK (Java Development Kit) porque incluye un jarsigner.
Una vez instalado procederemos a comprobar que java está incluido en la variable PATH y funcionando:
C:\Users\vmotos>java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)
A continuación necesitamos el SDK de Android que contiene, entre otras herramientas, ADB (Android Debug Bridge) que nos permitirá mover ficheros, instalar aplicaciones o conectarnos al shell o intérprete de comandos de un teléfono (necesitaremos el driver USB) o un emulador (el SDK también incluye emuladores de Android).
Para instalarlo primero debemos descargarlo desde http://developer.android.com/sdk/index.html y seguir las instrucciones.
En Windows, básicamente sólo hay que instalar el ejecutable o descomprimir el zip:
Y añadir al menos una plataforma y los componentes mediante el SDK y AVD Manager (SDK Manager.exe):
Como nota adicional, os recomendamos instalar Eclipse con el plugin ADT (Android Development Tools) para realizar pruebas y disponer de un entorno de desarrollo muy versátil.
Una vez instalado el SDK de Android y para probar el crackme del reto, procederemos también a levantar un emulador virtual con la versión Froyo actual (Android 2.2).
A continuación veréis que el proceso de creación es muy sencillo:
1.- En ‘Virtual devices’ del Manager pulsaremos el botón ‘New’:
2.- Posteriormente seleccionaremos el nombre del emulador, el tipo de plataforma (target), el tamaño de la SD Card virtual, el tema y el hardware emulado:
3.- Finalmente pulsaremos el botón ‘start’ para que arranque el emulador:
Ahora que ya tenemos el emulador levantando, procederemos a instalar el paquete del crackme mediante ADB. Su instalación también es muy sencilla: descargamos el apk y ejecutamos lo siguiente:
D:\android-sdk-windows\platform-tools>adb.exe devices
List of devices attached
emulator-5554 device
D:\android-sdk-windows\platform-tools>adb.exe install crackme1hpys.apk
112 KB/s (11836 bytes in 0.102s)
pkg: /data/local/tmp/crackme1hpys.apk
Success
Después de la instalación del apk, podremos ver el icono del crackme en el menú de aplicaciones:
Haremos clic en el icono y entraremos en la pantalla principal del crackme:
Ya está, ahora sólo falta averiguar el usuario y la contraseña... ¡el verdadero desafío!
Solución al reto del crackme#1 para Android
- Parte 1 de 2
- Parte 2 de 2
Es la primera vez que posteo en vuestro blog y sólo es para decirles que me encanta y me tiene enganchadisimo. Saludos y hasta pronto.
ResponderEliminarMuchas gracias y excelente nick, creo que todos somos o deberíamos ser eternos aprendices!
ResponderEliminarGracias por la información, una pregunta ¿Como se llama el artículo que mencionas en la parte de arriba?
ResponderEliminarhola @chuche,
ResponderEliminarya no está el artículo, parace que el dominio Revistalinux.net ha "volado" :(