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.
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! =)".
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
Publicar un comentario