En anteriores artículos ya estuvimos trasteando y desensamblando aplicaciones en Android en esta vamos a ir un paso mas halla usando los famosos CrackMe. Es imprescindible que para entender algo del «klingon» del articulo y conocer las herramientas antes se visionen los artículos: https://elbinario.net/2017/03/20/destripando-aplicaciones-en-android-primera-parte https://elbinario.net/2017/04/03/destripando-aplicaciones-en-android-final
Descargando Crackme
Para este articulo vamos a utilizar el CrackMe para android que podéis descargar de https://github.com/reoky/android-crackme-challenge, hay varios yo he escogido el numero 5
Instalando con adb Procedemos a instalarlo en el teléfono via adb(Nota es importante que se lean los artículos indicados anteriormente para tener instaladas las herramientas que vamos a usar)
adb install crackme-five.apk
Ejecutando la app
Si ejecutamos la app veremos que nos pide que contestemos a una pregunta, si contestamos erróneamente nos muestra un mensaje de error.
Desensamblando la app
Para desensamblar el apk vamos a usar dex2jar, que podéis bajar de https://sourceforge.net/projects/dex2jar/ una vez descomprimido solo necesita permiso de ejecucion para todos los scripts.
chmod +x *
Una vez aplicados los permisos lo ejecutamos
/d2j-dex2jar.sh /root/crackme-five.apk
Cuando termine la ejecucion veremos que nos deja un archivo con extension .jar en el directorio desde donde ejecutamos dex2jar.
Ahora para descompilar el archivo jar, usamos un editor gui como jadx https://github.com/skylot/jadx y le indicamos el archivo completo jar y lo vamos desgranando tal que así.
Si buscamos el string «answer» en el buscador nos indica un resultado(parece que estamos cerca)
Si miramos el resultado nos encontramos con una lista de strings y un ID(no parece que esta sea la respuesta correcta, fail :(
¿Sera posible que el string correcto no este en el código? después de una buen vistazo a todo el código, parece que así es.
Para asegurar que el string no esta en el codigo vamos a hacer una prueba con radare, del que ya hablamos en otros artículos.
Para ello necesitamos obtener el archivo classes.dex como vimos en los artículos indicados al principio, para ello lo mas sencillo es renombrar nuestro apk a zip y descomprimirlo.
cp crackme-five.apk crackme-five.zip
unzip crackme-five.apk
Ahora lanzamos radare para buscar strings, como vimos en el articulo sobre radare.
radare2 classes.dex
Puff hay demasiados strings, lo mejor es utilizar otra herramienta de radare para buscar strings concretos o volcarlos todos a otro archivo, para ello usamos rabin2
rabin2 -izq classes.dex |grep "answer"
Parece que ha encontrado un string, por la que vamos a acceder a acceder a ese offset desde radare
Umm no parece que esto nos ayude de mucho, lo que esta claro es que el string no esta en el código(podríamos saltarnos la protección desde radare jugando con los op en ensamblador pero eso ya lo vimos con gdb, tal vez en otro articulo
¿donde estará?
Si recordamos el articulo https://elbinario.net/2017/04/03/destripando-aplicaciones-en-android-final/ al inicio del mismo se nos indicaba que había una carpeta donde estaban los recursos de la aplicación no compiladas en la carpeta /res así que como tenemos descomprimido nuestro apk buscamos dicha carpeta. y navegando por ella encontramos varios ficheros xml, pero al abrirlos nos encontramos este panorama
Esto es porque al utilizar unzip ha descomprimido los ficheros sin convertirlos y asi no son legibles, para ello necesitamos usar apktool como vimos en otros artículos, antes de lanzar el comando tenemos que borrar el directorio anterior que descomprimimos.
apktool d crackme-five.apk
una vez ejecutada navegamos por el directorio, y nos encontramos la carpeta values que no aparecia anteriormente y un monton de ficheros xml dentro de la misma,si recordamos cuando usamos jdx y radare se nos hacia referencia a una clase string, por lo que puede ser buena cosa mirar el contenido del strings.xml
!Bingo! ya tenemos la pregunta, por lo que solo tenemos que responder a la misma (no pongo la respuesta, para que lo averigüéis, pero es sencilla) y tendremos nuestro crackMe solventado
Esta claro que he dado muchas vueltas para llegar el final, pero la idea es que se vean algunas de las herramientas mas usadas para hacer ingeniería inversa en android(aunque sea un poco de pasada)
Si os «pica» la curiosidad en esa misma pagina hay varios crackMes, muy interesantes para darle al coco ;)
Happy Cracking ;)