Actualmente no hay una forma nativa de hashcat de procesar una lista de reglas que realicen sustituciones de caracteres de uno a uno y de uno a múltiples para atacar TrueCrypt a velocidades eficientes. Debido a que TrueCrypt es un hash bastante lento, es mejor que realices las sustituciones utilizando un programa externo y luego transfieras los resultados a hashcat. (En otras palabras, la sobrecarga de generar contraseñas candidatas por sí mismo no obstaculizará el proceso de descifrado).
Sus otras opciones que usan hashcat directamente son las siguientes. Todos ellos tienen compensaciones.
Para reemplazar caracteres individuales con otros caracteres individuales , puede usar el sistema de reglas incorporado de hashcat, ya sea creando sus propias reglas o usando uno de los "leetspeak" "rulesets en el directorio" rules / "que se distribuye con hashcat. Para elaborar algunas reglas personalizadas, puedes estudiar el sistema de reglas y esos conjuntos de reglas para obtener la idea.
El ataque se vería algo así como:
hashcat -a 0 -m [62xx] -r rules/leetspeak.rule target.hashfile
Reemplazando un solo carácter por varios caracteres - tu 'U' - > '| _ |' Caso - es un poco más complicado.
Para propósitos generales, hay opciones:
-
La asignación de caracteres individuales a múltiples caracteres se admite en lo que ahora se llama hashcat-legacy (solo CPU) , utilizando lo que se llama un ataque de mesa . Sin embargo, hashcat-legacy no admite los hashes de Truecrypt, por lo que no funcionará para ti.
-
Un ataque similar es posible en el hashcat moderno usando los parámetros -j y -k y lo que se llama parámetros posicionales en el sistema de reglas. Básicamente, le está diciendo a hashcat que "recuerde" la posición en la que encontró un personaje, eliminando el personaje en esa posición y luego insertando los caracteres que desea.
El segundo enfoque es un caso especial de sustitución selectiva de caracteres, tal como figura en el hashcat wiki . Aquí está la parte relevante de esa documentación, con el enfoque de múltiples caracteres mencionado en último lugar:
Si solo quieres operar en la primera instancia de un personaje, puedes usar% 1s, o simplemente usar '/':
$ echo -n 'Odessa77' | hashcat --stdout -j '%1s Dp ip$'
Ode$sa77
$ echo -n 'Odessa77' | hashcat --stdout -j '/s Dp ip$'
Ode$sa77
Si solo desea operar en la segunda instancia:
$ echo -n 'Odessa77' | hashcat --stdout -j '%2s Dp ip$'
Odes$a77
... etc. A diferencia de la regla 's', que reemplaza todas las instancias de un personaje, esto permite seleccionar qué instancia de un personaje reemplazar.
También puede usar esta funcionalidad para reemplazar un carácter por varios caracteres:
$ echo -n 'p@ssW0rd' | hashcat --stdout -j '%1W DpM ip/ ip\ ip/ ip\'
p@ss\/\/0rd
Observe que la inserción es un carácter a la vez en relación con la posición recordada, por lo que los caracteres que se insertan se enumeran en orden inverso en el comando.
Aquí hay un ejemplo más cercano a su caso de uso:
$ echo TrueCrypt | hashcat --stdout -j '%1u ip| ip_ ip|'
Tr|_|ueCrypt
El principal inconveniente de este enfoque es que los parámetros posicionales solo funcionan con -j
y -k
, por lo que solo se pueden usar uno a la vez (para una sola sustitución, no como parte de una gran lista de sustituciones a medida que es probable que quieran).
Así que esa es la larga historia de por qué lanzar tu propio método de sustitución de personaje (con, por ejemplo, Python, perl o incluso sed) sería la solución más flexible (y porque TrueCrypt es un hash tan "lento", genera las cadenas a velocidades súper altas no son necesarias).