Descifrar contraseña en dispositivo Android


Mis posts parecen mi lista de reproducción de Spotify, donde igual tengo “la pasión según San Mateo” de Bach, como la siguiente canción en sonar es una de los Guns N’ Roses. Pero así es mi día a día. Y te preguntarás, ¿Por qué en esta ocasión me está contando como descifrar una contraseña de un dispositivo Android? Resulta que desde hace una semana me he apuntado a una página (cuyo nombre no me está permitido decir) donde realizo desafíos de seguridad, y uno de estos retos es este.

No puedo decir el nombre de la plataforma, porque una de sus reglas es:

La publicación en Internet de la solución a los retos de la plataforma no está permitida.

Por lo que voy a variar los datos originales que se proporcionan en el reto. Eso sí, todo lo que explico es a modo de aprendizaje y no me responsabilizo de tus acciones.

Obtener PIN

Si has llegado hasta aquí, no creo que haga falta explicar que es un hash y un salt, aunque aquí puedes encontrar información.

Lo primero que nos indica el reto es que el hash de nuestro PIN se almacena en el fichero /data/system/password.key del teléfono Android, el cual es:

AB7A0B6D0679F6137743B7A6FF7C5BF5E1069A50269A85C29CBA9DEDA133B3168F33027F

Si estás familiarizado en el mundo del HASH, te habrás dado cuenta que es muy largo, 72 caracteres. Pero esto es porque hay dos HASHES, uno SHA1 y un MD5 concatenados.

Ahora nos hará falta encontrar el SALT, que se encuentra en una base de datos, que según la versión de Android puede estar en una u otra ubicación:

Versión de AndroidUbicación
Cupcake, Donut, Éclair, Froyo, Gingerbread, Ice Cream Sandwich/data/data/com.android.providers.settings/databases/
settings.db
Jelly Bean, Kit Kat, Lollipop/data/system/
locksettings.db

Sea cual sea la ubicación anterior, con el siguiente comando podemos obtener el salt de la base de datos:

SELECT value FROM locksettings WHERE name=’lockscreen.password_salt’

El cual para este ejemplo tendremos el siguiente Salt:

3682477098377895419

Con todo esto, y con la referencia a esta página de github, ya es todo pan comido, porque Androidlockcracker es un script de python capaz de descifrar y generar los hashes de bloqueo predeterminados de Android para bloqueos de pantalla de PIN, contraseña y gestos.

Si ejecutamos –help, podemos ver la sintaxis para su uso:

Como nota al Script de Python de Androidlockcracker, indicar que al ejecutar con la versión de Python que tenía me salía el siguiente error:

Traceback (most recent call last):
File "/usr/src/myscript/androidlockcracker.py", line 323, in
main()
^^^^^^
File "/usr/src/myscript/androidlockcracker.py", line 313, in main
options.salt = struct.pack('>q', long(args[3])).encode("hex")
^^^^
NameError: name 'long' is not defined

Y gracias a mi compañero Nacho, me hizo ver que long en Python 3 se ha cambiado por int. Por lo tanto, debía ejecutar el Script con Python 2.X.

Te cuento dos alternativas para ejecutar el Script: Instalando Python en Windows o con Docker directamente.

Instalando Python en Windows

Instalamos Python 2.7 (https://www.python.org/download/releases/2.7/) y una vez instalado descargamos el script de Androidlockcracker.

Para ejecutarlo con Windows, al principio tuve problemas, pero leí la siguiente página https://geekflare.com/es/how-to-run-python-scripts/ de modo que me hice un .bat en el mismo directorio donde estaba el Script de Androidlockcracker con el siguiente contenido:

C:\Users\XXXXX\Downloads\androidlockcracker-master\androidlockcracker-master\androidlockcracker.py crack pin AB7A0B6D0679F6137743B7A6FF7C5BF5E1069A50269A85C29CBA9DEDA133B3168F33027F 3682477098377895419 %*
@pause

Si lo ejecutamos desde Powershell, obtenemos el PIN buscado 1234

Docker

Esta opción también me la enseñó mi compañero Nacho que es un máster de Docker.

Nota: Estos comandos funcionan si ya tienes instalado Docker

Primero descargamos la imagen de Python con el siguiente comando:

docker pull python:2.7-slim

Una vez descargada la imagen, ejecutamos:

docker run -it --rm --name my-running-script -w /usr/src/myscript/ -v c:/androidlockcracker-master:/usr/src/myscript python:2.7-slim python /usr/src/myscript/androidlockcracker.py crack pin AB7A0B6D0679F6137743B7A6FF7C5BF5E1069A50269A85C29CBA9DEDA133B3168F33027F 3682477098377895419

Y gualá: 1234

Hay que tener en cuenta que en el argumento -v hay que poner la ruta donde tentamos descargado androidlockcracker, en mi caso c:\androidlockcracker-master.

Patrón de desbloqueo

Al igual que se almacena el hash del PIN, se almacena el SHA1 del patrón de desbloqueo en:

/data/system/gesture.key

Ejecutando cualquiera de las alternativas anteriormente mencionadas conseguiríamos el patrón de desbloqueo con la siguiente sintaxis:

Conclusiones

Evidentemente, este post sirve más como ejercicio teórico que como práctico, ya que para tener acceso a la base de datos con los Hashes y el SALT se da por hecho que ya tienes acceso completo al teléfono salvo que estos datos los consigamos de algún backup.

Pero es interesante plantearnos una cuestión muy importante. Si alguien consiguiese tener acceso a nuestro teléfono y se hiciese con el HASH y el SALT para descifrar nuestro PIN: ¿Este es el mismo que utilizamos en nuestras tarjetas de crédito? ¿Es el mismo que utilizamos para sistemas de alarma domésticos? Pero si con estas dos preguntas no lo estáis pillando…

¿Estamos REutilizando el mismo PIN para TODO?

Fuentes


Deja una respuesta

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

Últimos posts

Filtración de números de Whatsapp: ¿Y ahora que?

Filtración de números de Whatsapp: ¿Y ahora que?

Nov 27, 2022

Si estáis al día de esta serie de noticias, habréis visto que según cybernews, supuestamente existe una filtración de números…