Cracking Passwords Android: The Need for Speed

Números increíblemente grande Revisited
En octubre de 2012 he publicado acerca de un artículo acerca de craqueo contraseñas Android. Hablé sobre todo en la dificultad para descifrar los passwords basados ​​en el gran número de posibilidades (la friolera 37.556.971.331.618.802.349.234.821.094.576!)
¿No me creen? Vamos a un pequeño refrito: El espacio de claves (rango de posibles caracteres ASCII) para cada posición en la contraseña es 94 (letras mayúsculas y minúsculas, dígitos y caracteres extendidos), o rango hexadecimal x21- t x7F. La contraseña puede tener una longitud mínima de 4 y un máximo de 16 caracteres de largo.
Un poco Python 3 math
  >>>  #990000;"> =   0  >>>    de    i  en     rango    (  4  ,   17  ):  
... = + 94 **
...
>> ;> impresión ( total)
37556971331618802349234821094576
>>> # Python incluso poner en las comas
>>> impresión ( '{:,}' Formato ( ))
37 , 556 , 971 , 331 , 618 , 802 , 349 , 234 , 821 , 094 , 576

Y voilà, tenemos 37,6 billones de billones de posibilidades! (Sólo sale de la lengua, ¿no?) Hablé entonces que, si bien el guión python CCL Forense fue una gran herramienta, pitón no era la mejor opción para el descifrado de contraseñas, ya que su relativamente lento para ese propósito. Introduje hashcat, una aplicación de recuperación de contraseñas multiplataforma, como una mejor forma de hacer negocios

Hashcat-lite: Arnés felina velocidad

Hashcat se codifica con el rendimiento en mente y puede utilizar CPUs multi-núcleo y GPU ( Nvidia y AMD) para realizar los cálculos. La versión de CPU, hashcat es notablemente más rápido que el guión python CCL y la verson GPU, oclHashcat-plus sale de la versión de la CPU en el polvo!
Usando hashcat para craquear contraseñas Android puede ser un poco confuso, sin embargo, y espero deobfuscate el proceso aquí.

Contraseñas picantes
Android usa una contraseña salada y almacena la contraseña como un hash en el directorio / data / system / contraseña . archivo de clave. Bueno, dos hashes, en realidad. Un hash SHA-1 se calcula seguido de un hash MD5, y los valores se concatenan en una sola cadena de bytes 72

La sal, en este caso una firma, entero de 64 bits generado aleatoriamente, aleatoriza el hash y hace que los ataques de diccionario y fuerza bruta ineficaz. El entero se almacena en el settings.db ubicado en el directorio / data / data / com.android.providers.settings / bases de datos. El entero se convierte una cadena hexadecimal (8 bytes de longitud) y se agrega a la contraseña. La cadena de contraseña + salina luego se aplica un algoritmo hash y se almacena.
El CrackStation sitio tiene un excelente tratado sobre salada hash de la clave si usted está buscando para obtener una explicación más detallada. El Android contraseña salada formato no es el único método de hash de contraseñas con sal en la práctica.

Crear datos de prueba
Podemos usar Python para crear algunos hashes salados a la manera de Android. Esto es útil para las pruebas de hashcat u otras herramientas que podría utilizar. Después de todo, si no lo hace la primera prueba, un intento fallido de crack te deja pensando si la herramienta ha fallado o si usted no pudo utilizar la herramienta adecuada. Para crear un hash de contraseña de estilo Android, necesitamos un personaje 4-16 longitud de caracteres ASCII

En primer lugar, vamos a elegir una contraseña. Lo mantendremos bastante corto para que pueda ser violada en una cantidad de tiempo razonable: «secreto». Manteniendo la minúscula nos permite atacar con un personaje 26 tecla de espacio-después de todo, estamos a punto de descifrar el password aquí, no generar contraseñas seguras!
BASH
  $  password =" secreto "
$

A continuación, tenemos que generar un salt aleatorio entero (como podríamos hacer algo aquí, pero vamos a utilizar Python para generar aleatoriamente una sal para mantener el ejercicio más realista) . El tamaño máximo de un entero de 64 bits es 9.223.372.036.854.775.807. Está firmado, lo que significa que puede ser positivo o negativo. Sí, los matemáticos, esa es la definición de un entero: a style=»color: navy;»> número positivo o negativo que incluye cero. Pero conociendo su firmaron es importante para la conversión hexadecimal en Python y otros lenguajes de programación. Para mantener el simple ejercicio, sin embargo, nos quedaremos en bash y generar un número aleatorio (estamos manipulando un poco en la generación del número aleatorio, pero funciona para nuestros propósitos) /

BASH
  $  password =" secreto "
$ salt = $ (($ RANDOM ** 4))
$ echo $
sal 15606337825758241
$

» icono «style =» color: # 527bbd; font-size: 1.1em; font-weight: bold; padding-right: 0.5em; texto -decoration: underline; vertical-align: top; «>

Nota
La extracción de la sal del settings.db
Recordemos que en un dispositivo Android, la sal se almacena en el directorio / data / data / com.android.providers.settings / bases de datos / settings.db en la» mesa de seguro «. La sal de mesa se puede obtener de la siguiente manera:

BASH