
 Sintaxis para las reglas de la lista de palabras (Wordlists)
=============================================================

Cada regla de Wordlist consiste en uno o varios comandos simples, escritos
en una linea y, opcionalmente, separados por espacios. Hay tambien un
preprocesador que puede generar multiples reglas a partir de una sola
linea de codigo. Mas abajo encontraras las descripciones de los comandos
de reglas (muchos de ellos son compatibles con la version 5.0 de Crack)
y la sintaxis del preprocesador.

 Codigos de Posicion
---------------------

Las posiciones de los caracteres son numeradas empezando por 0, y estan
especificadas en las reglas por los siguientes caracteres:

0...9   para 0...9
A...Z   para A...Z
*       para max_lenght
-       para (max_lenght - 1)
+       para (max_lenght + 1)

Aqui 'max_lenght' es la longitud maxima en texto plano soportada por el
actual formato de cifrado.

Los mismos caracteres tambien son usados para especificar otros parametros
numericos.

 Clases de caracteres
----------------------

??      indica '?'
?v      indica vocales: "aeiouAEIOU"
?c      indica consonantes: "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ"
?w      indica espacios: "\t"
?p	indica puntuacion: ".,:;'\"?!`"
?s	indica simbolos: "$%^&*()-_+=|\\<>[]{}#@/~"
?l	indica letras en minusculas [a-z]
?u	indica letras en mayusculas [A-Z]
?d	indica numeros [0-9]
?a	indica letras [a-zA-Z]
?x	indica letras y numeros [a-zA-Z0-9]

Los complementarios a una clase pueden especificarse poniendo en mayuscula
su nombre. Asi, por ejemplo, '?D' indica todo excepto numeros.

 Comandos Simples
------------------

:       no-op: no hace ninguna operacion con la palabra
l       convierte en minuscula
u       convierte en mayuscula
c       pone la primera letra en mayuscula (capitaliza)
C       minuscula el primer caracter, y mayuscula el resto
t       invierte el caso de todos los caracteres (mayusculas en minusculas
        y viceversa)
r       invierte: "Fred" -> "derF"
d       duplica: "Fred" -> "FredFred"
f       reflejo: "Fred" -> "FredderF"
{       rota la palabra a la izquierda: "jsmith" -> "smithj"
}       rota la palabra a la derecha: "smithj" -> "jsmith"
$X      aade el caracter X a la palabra
^X      antepone el caracter X a la palabra

 Comandos de Control de Longitud
---------------------------------

<N      rechaza la palabra a no ser que tenga menos de N caracteres
>N      rechaza la palabra a no ser que tenga mas de N caracteres
'N      trunca la palabra a N caracteres

 Comandos de Gramatica Inglesa
-------------------------------

p       pone en plural: "crack" -> "cracks",etc (solo en minusculas)
P       "crack" -> "cracked", etc (solo en minusculas)
I       "crack" -> "cracking", etc (solo en minusculas)

 Comandos de Insercion/Eliminacion
-----------------------------------

[       elimina el primer caracter
]       elimina el ultimo caracter
DN      elimina el caracter en la posicion N
xNM     extrae una subcadena a partir de la posicion N contando M caracteres
iNX     inserta el caracter X en la posicion N y desplaza el resto a la derecha
oNX     reemplaza el caracter de la posicion N por el caracter X

Nota que '[' y ']' son caracteres de control del preprocesador: debes
'escaparlos' usando el caracter '\'.

 Comandos de Conversion del Juego de Caracteres
------------------------------------------------

S       cambia el caso: "Crack96" -> "cRACK)&"
V       minuscula las vocales: "Crack96" -> "CRaCK96"
R       desplaza cada caracter a la derecha, segun el teclado:
        "Crack96" -> "Vtsvl07"
L       desplaza cada caracter a la izquierda, segun el teclado:
        "Crack96" -> "Xeajx85"

 Comandos de Acceso a Memoria
------------------------------

M       memoriza la palabra
Q       rechaza la palabra a no ser que haya cambiado

 Comandos de Clase de Caracteres
---------------------------------

sXY	reemplazar todos los caracters X de la palabra por Y
s?CY	reemplazar todos los caracteres de la clase C en la palabra por Y
@X	Elimina todos los caracteres X de la palabra
@?C	Elimina todos los caracteres de la clase C de la palabra
!X	rechaza la palabra si contiene el caracter X
!?C	rechaza la palabra si contiene un caracter de la clase C
/X	rechaza la palabra a no ser que contenga el caracter X
/?C	rechaza la palabra a no ser que contenga un caracter de la clase C
=NX	rechaza la palabra a no ser que el caracter de la posicion N sea X
=N?C	rachaza la palabra a no ser que el caracter de la posicion N sea
        de la clase C
(X	rechaza la palabra a no ser que su primer caracter sea X
(?C	rechaza la palabra a no ser que su caracter sea de la clase C
)X	rechaza la palabra a no ser que su ultimo caracter sea X
)?C	rechaza la palabra a no ser que su ultimo caracter sea de la clase C
%NX	rechaza la palabra a no ser que contenga N repeticiones de X
%N?C	rechaza la palabra a no ser que contenga al menos N caracteres de la
        clase C

 Comandos Extras del Modo "Single Crack"
-----------------------------------------

Cuando se define el modo "single crack", hay comandos adiccionales para el
soporte de parejas de palabras, para controlar si otro comando sera aplicado
a la primera, segunda o ambas palabras:

1       solo la primera palabra
2       solo la segunda palabra
+       la concatenacion de las dos (solo debe usarse despues de '1' o '2')

Si usas algunos de estos comandos en una regla, esta solo procesara parejas
de palabras (nombres completos, desde la informacion de GECOS), y rechaza
las palabras individuales. Se asume '+' al final de cada regla que use
cualquiera de estos comandos, a no ser que lo especifiques manualmente.
Por ejemplo, '1l2u' convertira la primera palabra en minuscula, la segunda
en mayuscula y usara la concatenacion de ambas. El uso de '+' puede ser
aplicada a algunos comandos mas: '1l2u+r' invertira la concatenacion de
ambas palabras despues de aplicar los demas comandos.

 El Preprocesador de Reglas
----------------------------

El preprocesador se usa para combinar reglas semejantes en una linea de
codigo. Por ejemplo, si necesitas que John pruebe palabras en minusculas
con digitos aadidos, puedes escribir una regla por cada caracter, 10 en
total. Ahora imagina que quieres aadir dos digitos: el archivo de
configuracion se volveria demasiado largo e incomprensible.

Con el preprocesador puedes hacer todo esto de una forma mas facil.
Simplemente escribe una linea de codigo con las partes comunes a todas
estas reglas, y una lista de los caracteres que tengas que poner en reglas
separadas, entre corchetes (la forma de las expresiones regulares). El
preprocesador generara entonces las reglas por ti (al comienzo para
comprobar la sintaxis, y una vez mas mientras crackea, pero nunca mantiene
las reglas expandidas en memoria). Por ejemplo, para los casos de arriba,
las lineas de codigo seria 'l$[0-9]' (minusculas y aade un digito) y
'l$[0-9]$[0-9]' (minusculas y aade dos digitos). Estas lineas de codigos
se expanden a 10 y a 100 reglas respectivamente. Hay que tener en cuenta
que se procesan los comandos del preprocesador de derecha a izquierda, y los
caracteres son procesados de izquierda a derecha, con lo que se obtiene
un orden normal de los numeros en casos como el de aadir dos digitos.
Notese que solo se han usado rangos de caracteres a en estos ejemplos,
sin embargo puedes usar cualquier rango de la lista de caracteres, como
'[aeiou]' que usara las vocales, o '[aeiou0-9]' que usara vocales y numeros.
Si necesitas probar las vocales primero, y todas las demas letras despues,
puedes usar '[aeioua-z]': el preprocesador es lo suficientemente inteligente
como para no producir reglas duplicadas.

Hay algunos caracteres de control para las reglas ( '[' empieza la lista de
caracteres del preprocesador, '-' indica un rango dentro de la lista, etc).
Debes usarlos con el prefijo '\' si quieres usarlos como caracteres normales
en vez de usar si significado especial. Por supuesto, esto tambien se aplica
al caracter '\'. Ademas si quieres iniciar una lista de caracteres del
preprocesador al principio de una linea, tendras que usar el prefijo ':',
o sera tomada como el inicio de una nueva seccion.

