CrackMe Android

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 ;)

puppetmaster Written by:

Be First to Comment

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax