Ir al contenido principal

Reversing(XIV): Solución Reto PoliCTF "Crack me if you can"

En este post la solución a un reto de 'reversing' de un archivo APK (Android Application Package), es decir, de una aplicación para el sistema operativo Android.

Este reto tiene el título "Crack me if you can" y mi valoración sobre su dificultad es:  ☆☆☆.

Su enunciado dice lo siguiente:

John bets nobody can find the passphrase to login!

Y nos dan un archivo cifrado (crack-me-if-you-can_d4e396383e3f64ec7698efaf42f7f32b.tar.gz.gpg) y la clave de cifrado (GPG Key: viphHowrirOmbugTudIbavMeuhacyet').

Solución: Al descifrar el archivo que nos dan obtengo el archivo APK (crack-me-if-you-can.apk) y lo ejecuto en un emulador de Android.

La aplicación me pide que introduzca una contraseña, introduzco una cualquiera ("passphrase"), pulso "Sign in" y se muestra un mensaje de error:
Para el análisis de la APK utilizo jadx, un decompilador de archivos APK.

Al examinar las clases veo:
Es decir, se realizan diversos reemplazos a la siguiente cadena:

[[c%l][c{g}[%{%Mc%spdgj=]T%aat%=O%bRu%sc]c%ti[o%n=Wcs%=No[t=T][hct%=buga[d=As%=W]e=T%ho[u%[%g]h%t[%}%

Y si el resultado de los reemplazos realizados es igual a la contraseña introducida se muestra el mensaje de éxito: "Good to go! =)".

Para obtener la contraseña correcta creo un script en Python para realizar esos mismos reemplazos a dicha cadena:

flag = '[[c%l][c{g}[%{%Mc%spdgj=]T%aat%=O%bRu%sc]c%ti[o%n=Wcs%=No[t=T][hct%=buga[d=As%=W]e=T%ho[u%[%g]h%t[%}%'

flag = flag.replace('spdgj', 'yb%e')
flag = flag.replace('aat', 'his')
flag = flag.replace('buga', 'Goo')
flag = flag.replace('=', '_')
flag = flag.replace('\\}', '', 1)
flag = flag.replace('\\{', '', 1)
flag = flag.replace('R', 'f', 1)
flag = flag.replace('c', 'f', 1)
flag = flag.replace(']', '')
flag = flag.replace('[', '')
flag = flag.replace('%', '')
flag = flag.replace('c', 'a')
flag = flag.replace('aa', 'ca')

print 'Flag:', flag

Ejecuto este script:
Por tanto, la solución a este reto es:
flag{Maybe_This_Obfuscation_Was_Not_That_Good_As_We_Thought}

Para comprobar si lo he hecho bien, ejecuto la APK en el emulador de Android, introduzco la contraseña y pulso "Sign in":
Y, tal y como se puede ver en la figura anterior, se muestra el mensaje de éxito.

Comentarios

Entradas populares de este blog

Criptografía (I): cifrado Vigenère y criptoanálisis Kasiski

Hace unos días mi amigo Iñaki Regidor ( @Inaki_Regidor ), a quien dedico esta entrada :), compartió en las redes sociales un post titulado "Criptografía: el arte de esconder mensajes"  publicado en uno de los blogs de EiTB . En ese post se explican ciertos métodos clásicos para cifrar mensajes , entre ellos el cifrado de Vigenère , y , al final del mismo, se propone un reto consistente en descifrar un mensaje , lo que me ha animado a escribir este post sobre el método Kasiski  para atacar un cifrado polialfabético ( conociendo la clave descifrar el mensaje es muy fácil, pero lo que contaré en este post es la forma de hacerlo sin saberla ). El mensaje a descifrar es el siguiente: LNUDVMUYRMUDVLLPXAFZUEFAIOVWVMUOVMUEVMUEZCUDVSYWCIVCFGUCUNYCGALLGRCYTIJTRNNPJQOPJEMZITYLIAYYKRYEFDUDCAMAVRMZEAMBLEXPJCCQIEHPJTYXVNMLAEZTIMUOFRUFC Como ya he dicho el método de Vigenère es un sistema de sustitución polialfabético , lo que significa que, al contrario que en un sistema de

Criptografía (XXIII): cifrado de Hill (I)

En este post me propongo explicar de forma comprensible lo que he entendido sobre el cifrado de Hill , propuesto por el matemático Lester S. Hill , en 1929, y que se basa en emplear una matriz como clave  para cifrar un texto en claro y su inversa para descifrar el criptograma correspondiente . Hay tres cosas que me gustan de la criptografía clásica, además de que considero que ésta es muy didáctica a la hora de comprender los sistemas criptográficos modernos: la primera de ellas es que me "obliga" a repasar conceptos de matemáticas aprendidos hace mucho tiempo y, desgraciadamente, olvidados también hace demasiado tiempo, y, por consiguiente, que, como dice  Dani , amigo y coautor de este blog, me "obliga" a hacer "gimnasia mental"; la segunda es que, en la mayoría de las ocasiones, pueden cifrarse y descifrase los mensajes, e incluso realizarse el criptoanálisis de los criptogramas, sin más que un simple lápiz y papel, es decir, para mi es como un pasat

¿Qué significa el emblema de la profesión informática? (I)

Todas o muchas profesiones tienen un emblema que las representa simbólicamente y en el caso de la  informática: " es el establecido en la resolución de 11 de noviembre de 1977  para las titulaciones universitarias superiores de informática, y  está constituido por una figura representando en su parte central  un  núcleo toroidal de ferrita , atravesado por  hilos de lectura,  escritura e inhibición . El núcleo está rodeado por  dos ramas : una  de  laurel , como símbolo de recompensa, y la otra, de  olivo , como  símbolo de sabiduría. La  corona  será la  de la casa real  española,  y bajo el escudo se inscribirá el acrónimo de la organización. ". Veamos los diferentes elementos tomando como ejemplo el emblema del COIIE/EIIEO (Colegio Oficial de Ingenieros en Informática del País Vasco/ Euskadiko Informatikako Ingeniarien Elkargo Ofiziala ) . Pero no sólo el COIIE/EIIEO adopta el emblema establecido en dicha resolución, sino que éste se adopta también como im