Ingeniería inversa Android Crackme04 de deurus
Introducción
- crackme01 de deurus solucionado aquí
- crackme02 de deurus solucionado aquí
- crackme03 de deurus solucionado aquí
- Pueden descargar el crackme04 de deurus aquí
¡Por fin llegó el día! La solución del crackme04 de deurus. Recuerdo que cuando empecé con estos crackme me parecieron sencillos, hasta que llegó Pro Guard y empezará a hard codear, y obfuscar todo el código y clases. Por un tiempo no sabía poder donde meterle mano a este crackme, pero este último mes, he estado investigando mucho sobre aplicaciones y haciéndoles ingeniería inversa. Esto me ha llevado a entender y manejar mucho mejor con smali y aunque Pro Guard no nos lo pone fácil, me defiendo con ello. ¡Empecemos!
Comportamiento de la app
Tras arrancar el programa, la primera pantalla que vemos es:
Y tras unos segundos, aparece el menú de registro en el que aparece los name
y serial
:
Hay que decir que la música en 8-bit, mola bastante :) Al darle a registar los valores que vienen por defecto o cualquier otros que pongamos, vuelve a la primera pantalla durante unos segundos, y de nuevo aparece el menú de registro.
Análisis
Ahora viene la parte divertida. Tengo que decir que es más que recomendable no solo pasarlo a smali sino también a java, para ver mucho mejor el código. La única diferencia en este crackme es que han utilizado Pro Guard, pero no pasa nada, podemos con ello :P
Analizando el código llegamos a la parte realmente importante que es esta:
|
|
Es básicamente donde se comprueba si el número de serie introducido y el que debería ser, son iguales. En caso de ser iguales muestra un texto compuesto por 2 strings, los cuales son:
|
|
El str2
es definitivamente el serial introducido que sera comprobado con el generado. El str1
es el nombre, que es justo una de las variables que aparece justo al validar el serial. Pero, ¿qué es el str5
? Hice una función en python que nos descifra este misterio:
|
|
Lo que da como resultado que srt5
es: Registered to:
. Lo cual tiene sentido, pues si validamos el serial saldrá que lo hemos registrado con el nombre que hayamos puesto.
Solución
Una vez identificado lo que tenía que modificar, lo pasé a smali lo cual me llevó a este fragmento de código:
|
|
La solución fue sencilla, fue cambiar esto:
|
|
a esto otro:
|
|
Volví a construir el apk y lo instalé, para mi sorpresa al intentar abrir el apk se cerraba todo el rato. Se me ocurrió ver el log y no vi nada interesante, pero mirando un poco más a fondo el código, di con esta función:
|
|
Esa función, lo que hace es comprobar el MD5 de las classes.dex
para comprobar que este no ha sido modificado, y como vemos, si es modificado termina la aplicación, que es justo lo que me ocurría. En este punto, podia hacer 2 cosas. Por un lado podía modificar la igualdad, o una vez ya construida el archivo classes.dex
modificar el archivo string.xml
que contiene el MD5 y cambiarlo por el nuevo, para que sea aceptado por la aplicación. Yo cambié la igualdad para que haga la modificación que haga siempre me lo aceptara. Cambié esto:
|
|
a esto:
|
|
Una vez modificado, lo volví a instalar y seguía cerrándose. ¿Cual sería el problema esta vez? La verdad que el mismo, lo único que esta vez había que hacerlo en el archivo splash.smali
.
También hice una modificación respecto a la primera pantalla que salía (que no me gustaba nada), así que hice cambie lo siguiente en el archivo splash.smali
.
|
|
a esto otro:
|
|
y esto:
|
|
a esto otro:
|
|
Ahora lo instalamos de nuevo, y finalmente, ¡lo hemos conseguido! Ya acepta cualquier nombre y serial.
También empecé a hacer el keygen, y la verdad que es sencillo de sacar el código a parte de los archivo .java, pero como es necesario datos que se encuentran dentro del sistema en un archivo, el IMEI, IMSI, ect etc.. Lo dejé sin terminar aunque os dejaré el boceto que tengo del script, realmente una vez parcheado el apk, el keygen no es necesario. Pero aquí os dejo lo que hice:
|
|
Un saludo y hasta la próxima :)