Introducción al reversing de aplicaciones en android
Gracias por leer esta introducción.
Antes de nada, aclarar que aremos una pequeña introducción, si bien ya sabes programar
en android mucho mejor, si no, no te preocupes, no es necesario saber programar, pero si
sabes lo básico te sera mas fácil entenderlo todo bien.
Herramientas:
Java JDK: Es primordial para que todo funcione correctamente. Pagina Oficial.
Android Studio: Realmente no es necesario, teniendo el sdk y java jdk instalado
en el equipo es suficiente, en este caso yo ya lo tengo instalo y por comodidad te
aconsejo que también lo instales, instalar Android Studio.
AdvancedApkTool: En los recursos del tute. ( Ojo, se considera como virus)
JD-GUI: Aplicación para visualizar el código java, recursos del tute.
dex2jar: Aplicación para convertir el ByteCode Dalvik a java, recursos del tute.
Supongo que todos ya sabemos lo que es android, verdad ?, a un así, una pequeña
introducción no viene nada mal.
Primero hay que entender, ¿ que es un apk ? Un apk es una archivo de recursos y
ejecutables de una aplicación de android.
( Es un archivo comprimido con la extensión de .apk, si cambiamos la extensión de .apk
a .zip/rar podremos visualizar el contenido )
Estructura de una app:
• AndroidManifest.xml/ ( Serializado / comprimido )
• classes.dex/ Dalvik ejecutable ( ByteCode )
• res/ Todos los recursos de la app ( img / layout / etc)
• lib/ Librerías de la app ( libgame.so / etc )
• META-INF/ ( Firma de la aplicación )
• resources.arsc ( Recursos compilados )
Lo mas importante es el ejecutable Dalvik, los recursos de la aplicación como imágenes / archivos
de sonido / layout / etc, estos están dentro de la carpeta res, el archivo AndroidManifest.xml es
un vinculo entre los dos, ( ejecutable / res) proporciona información adicional al sistema
operativo, como permisos, etc y el directorio lib contiene librerías nativas.
Existen varios métodos de hacerle ingieneria inversa a este tipo de aplicaciones, normalmente se
utiliza ApkTool, MultiTool, etc, y un sin fin de herramientas que hay para descomprimir el apk.
Ahora si intentamos mirar el AndroidManifest.xml para ver que permisos utiliza / activity / etc
veremos que esta serializado / comprimido y no podemos ver nada:
Utilizaremos AdvancedApkTool, es necesario instalar primero el framework-res.apk para que todo
funcione correctamente. Estará en la carpeta 2-In/framework-res.apk ( una vez instalado se puede
borrar de la carpeta 2-In) , y su nueva ubicación sera 1-BDFreak/Frameworks/1.apk
Luego el proceso es, como el apk esta en la carpeta 2-In, abrir el programa, elegir la opción de 2,
elegir el apk y te preguntara si estas seguro le das a y, y empezara el proceso para descompilar el
apk.
Quedara algo como esto en la carpeta 3-Out/
Ahora si podemos visualizar bien en AndroidManifest.xml
En este caso como es una aplicación que hecho yo para este tute, ya se que no tiene permisos
como internet, contactos, cámara, etc, solo sabemos que contendrá una activity panel.
Bien, pasemos a configurar algunas cosas, para crear nuestro pequeño laboratorio para android,
existen sistemas operativos con herramientas dedicadas para android, es posible que veamos
alguna mas adelante, para esta introducción usaremos el sdk de android para descargar las Apis
de google y alguna otra cosas mas, con estas Apis que descargamos podemos levantar emuladores
para probar las mismas aplicaciones.
Una vez descargado e instalado android studio, en mi caso utilizando Win 10, me a instalado el sdk
de android en esta dirección.
Perfecto, ahora abrimos el SDK Manager.exe para descargar lo necesario.
Yo para esta practica e descargado la Api 21 que es Android 5.0.1 Lollipop
Descargamos la imagen de intel, esta la imagen de x86 / x64 según tu pc, con esta imagen la
velocidad del emulador es bastante considerable respecto a la de ARM. Como el 80% mas rápido.
Para ello necesitamos descargar los extras, para esta practica no seria necesario descargarlo todo,
pero para evitar futuros errores os aconsejo que instales todos los extras. ( algunas son utilidades
para Usb / Debugging / etc )
Este ultimo es bastante aconsejable, este es un acelerador para emuladores de x86 y como
nosotros utilizamos la imagen de intel x86 así que nos ira genial.
Hora ya podemos hacer un emulador en android, pasemos a configurarlo.
Tenemos que ejecutar el AVD Manager.exe y este es el Android Virtual Device (AVD) Manager
para gestionar los emuladores que vallamos creando.
Pasemos a crear un nuevo emulador.
En Memory Options: RAM/ asignan la que ustedes puedan, dependiendo de la pc que tengan, es
aconsejable mínimo 1000 para que mas o menos se puede utilizar bien.
Pues todo listo, le damos a ok y ya nos debe de aparecer la maquina lista para darle a start.
Elegimos la opción de Skin with dynamic hardware controls, esto a la hora de darle start y levantar
el emulador nos preguntara si queremos escalar el emulador a la scala del dispositivo real. Que
estará la opción disponible en Device: el elegido en este caso es un Nexus 4.7
Todo genial!, ahora solo tenemos que soltar encima del emulador el apk que esta en los recursos
del tute, tute_01.apk
Una vez ya instalada, ya podremos abrirla y veremos la pantalla de login.
Como vemos en la captura, e probado con un usuario: Bym24v y una constraseña: 123456 y abajo
nos sale un Texto diciendo Login Error!, lógicamente ya sabemos que la contraseña y el usuario no
es el correcto. Es el error que esperábamos :)
Vallamos viendo algo de código de esta aplicación, cuando cambiemos la extensión de .apk a
.zip/.rar podemos visualizar el archivo classes.dex, es el que necesitamos para convertirlo a java
mediante la aplicación dex2jar.jar
Ahora cojemos el classes.dex y lo llevamos a la carpeta donde tenemos el dex2jar y abrimos una
consola de comandos ( CMD ) y ejecutamos este comando. ( dex2jar classes.dex ) nos generara un
archivo nuevo llamado classes_dex2jar.jar
De momento todo bien, ahora cojemos el nuevo classes_dex2jar.jar y lo abrimos con JD-GUI
Abrimos el MainActivity.class y podemos visualizar un código muy similar al original.
JD-GUI:
Código original:
Como podemos observar en el str1 y str2 se guarda lo que se introduce por UserName.getText() y
Password.getText() que son los Inputs que hay en la interfaz de login, compara si el usuario es
igual a admin y el password también, así que bueno no tenemos que ni parchear nada, por que ya
sabemos el usuario y la constraseña.
Hacemos login:
También le podemos echar un vistazo en IDA pro, soltamos el archivo classes.dex y buscamos en
Functions MainActivity$1_onClick@VL
o por strings
Bueno, como pequeña introducción al reversing de aplicaciones en android creo que andamos
bien, tampoco quiero agobiar con tanta información en la introducción, en el siguiente tute,
veremos herramientas que vienen con el sdk, como ADB / Fastboot / etc son herramientas
bastante útiles.
Un gran saludo a la comunidad de CrackLatinos.
Salu2 @Bym24v