En esta ocasión vamos a hablar sobre como eliminar el patrón de desbloqueo en Android (Pattern Lock). Dada la inmensa cantidad de personas que usan este sistema cómo método de desbloqueo de su smartphone, demostraremos su inseguridad frente a otros métodos de desbloqueo y además enseñaremos como poder quitar el patrón de desbloqueo o averiguar la combinación de este.

*Los métodos expuestos en este post sólo son válidos para dispositivos rooteados.


¿Cómo funciona el patrón de desbloqueo?

Seguramente la mayoría de los usuarios habrá usado este sistema alguna vez y sabrá cómo funciona pero daremos un breve repaso.

Un patrón de desbloqueo en un sistema Android consiste en una combinación de pasos a seguir enlazando una serie de puntos dónde cada uno de ellos representa un número comprendido entre el número 0 y el 8, de la siguiente forma:

0 1 2
3 4 5
6 7 8

Reglas que debe tener un patrón

  • Debe contener como mínimo 4 puntos y como máximo 9.
  • No se puede pasar dos veces por el mismo punto.
  • No se puede pasar por un punto no marcado sin marcarlo.

Combinaciones posibles del patrón de desbloqueo

Según las reglas anteriores, un patrón de desbloqueo en Android podría tener las siguientes combinaciones dependiendo de la cantidad de puntos:

  • 4 puntos: 1.624 combinaciones
  • 5 puntos: 7.152 combinaciones
  • 6 puntos: 26.016 combinaciones
  • 7 puntos: 72.912 combinaciones
  • 8 puntos: 140.704 combinaciones
  • 9 puntos: 140.704 combinaciones

Esto hace un total de 389.112 combinaciones posibles para desbloquear nuestro smartphone Android.


¿Dónde se encuentra la combinación del patrón?

Os preguntareis que dónde está el archivo que guarda la combinación del patrón, la ruta es esta:

/data/system/gesture.key

Dentro de este archivo encontraremos un hash en SHA-1 que contiene la combinación para desbloquear nuestro smartphone. Para descifrar esta combinación compararemos ese hash con un diccionario de hashes con todas las combinaciones posibles.

Si no queremos saber la combinación y tan solo queremos resetearlo bastaría con borrar su contenido y dejarlo en blanco o borrar este archivo y crearlo de nuevo. Al dejarlo en blanco podremos acceder al teléfono móvil con cualquier combinación.


Obtener el contenido del archivo ‘gesture.key’

Para conseguir el hash contenido en este archivo podemos hacerlo de varias formas:

  1. Coger el archivo directamente con el teléfono desbloqueado (necesitamos permisos root): Si el teléfono esta desbloqueado y contamos con permisos de root podemos instalar un programa llamado Root Explorer para acceder al archivo y copiarlo a una tarjeta Micro SD o al directorio principal para poder copiarlo al ordenador fácilmente a través de un cable Micro USB.
    Root Explorer - gesture.key
  2. Coger el archivo desde ADB (Android Debug Bridge): Para llevar a cabo este método debemos tener activado el modo depuración USB en nuestro smartphone Android. Podemos descargar el SDK de Android que trae incorporado ABD o desde ADB Driver.

    *Si no nos aparece en ajustes el menú ‘Opciones de desarrollo’, tendríamos que pulsar varias veces donde aparece la versión de Android.

    Una vez dispongamos de ADB conectamos el smartphone al PC y abrimos la consola del sistema o terminal. Posteriormente ejecutamos el siguiente comando:

    ADB.exe devices

    Este comando nos mostrará una lista de dispositivos conectados al PC con el cable Micro USB.

    ADB Devices

    Ahora abrimos una shell con el teléfono móvil

    ADB.exe shell

    ADB Shell

    Cuando conecte la shell elevamos privilegios a root.

    su root, sudo root o adb root # Depende de la versión

    ADB Root

    En este momento ya podríamos obtener el archivo /data/system/gesture.key, de la siguiente forma:

    adb push /data/system/gesture.key /mnt/sdcard/gesture.key

    *Nota: La ruta de destino de la sdcard puede variar.

    Una vez copiado el archivo gesture.key a la tarjeta de memoria lo pasamos al PC para crackear el patrón de desbloqueo.

    Si sólo queremos eliminarlo podemos ejecutar estos comandos:

    rm /data/system/gesture.key
    touch /data/system/gesture.key

  3. Desde un APK: Otra alternativa para coger este hash consiste en utilizar el siguiente código fuente para obtenerlo directamente.
    private static byte[] patternToHash(List pattern) {
        if (pattern == null) {
            return null;
        }
     
        final int patternSize = pattern.size();
        byte[] res = new byte[patternSize];
        for (int i = 0; i < patternSize; i++) {
            LockPatternView.Cell cell = pattern.get(i);
            res[i] = (byte) (cell.getRow() * 3 + cell.getColumn());
        }
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            byte[] hash = md.digest(res);
            return hash;
        } catch (NoSuchAlgorithmException nsa) {
            return res;
        }
    }
    

Descifrar patrón de desbloqueo

Por último para descifrar el hash contenido en el archivo gesture.key necesitamos un editor hexadecimal como por ejemplo WinHex.

WinHex Gesture Key

Abrimos el archivo, copiamos el hash usando Ctrl + Shift + C descargamos este diccionario de hashes de Oxygen Software y buscamos el hash dentro del archivo “AndroidGestureSHA1.txt”.

Android Gesture SHA-1

Junto al hash aparece ’06 04 02 05 08′, esta sería la combinación que quedaría de la siguiente forma eliminando los ceros: 64258.

Android Pattern Lock

Listo, ya tenemos nuestro patrón descifrado.


Conclusión

No recomendamos el uso de patrón ya que tiene combinaciones finitas al igual que un pin que sólo son 4 dígitos. Nada es 100 % seguro pero si queremos tener un poco más de seguridad lo más recomendado es utilizar una contraseña larga y compleja aunque se nos hará un poco pesado introducir esta clave cada vez que queramos desbloquear el smartphone.

También existen pulseras bluetooth que nos permiten desbloquear el teléfono sin ningún otro tipo de autentificación (compatible con Android KitKat y posteriores) de tal forma que si tenemos el smartphone cerca se desbloqueará sin pedir patrón o contraseña pero por el contrario si estamos un poco alejados de él nos mostrará la ventana de bloqueo para indicar nuestro patrón, pin o contraseña.

Este artículo es totalmente a modo de aprendizaje y para demostrar la inseguridad del patrón de desbloqueo de Android y no nos hacemos responsables del mal uso que el usuario pueda darle.


Más información

http://static.usenix.org/event/woot10/tech/full_papers/Aviv.pdf


Fuentes

hacking-etico.com
forensics.spreitzenbarth.de