[Guia] Parchear aicrack-ng para que funcione con diccionarios WEP hexadecimales

Iniciado por nhaalclkiemr, 7 Octubre 2010, 19:43 PM

0 Miembros y 1 Visitante están viendo este tema.

nhaalclkiemr

Como algunos ya sabreis, los diccionarios hexadecimales no funcionan en la versión actual de aircrack-ng 1.1 debido a varios bugs en el codigo fuente. Ahora propondre una solución para esto.

Primero explicar que es un diccionario hexadecimal y porque usarlos:

Un diccionario hexadecimal es igual que un diccionario normal pero en vez de definir palabras ASCII definimos el valor de los bytes de una palabra en hexadecimal (separamos los bytes con un separador, el más común y el que usa aircrak-ng es : ). Destacar que aunque cada linea representa una palabra hexadecimal los valores (0-F) estan escritos en ASCII, por lo que los diccionarios ocupan mucho más de lo que deberían, por ejemplo una palabra de 4 bytes ocupa 11 bytes en un diccionario hexadecimal. Un diccionario hexadecimal visualizado con un editor de texto cualquiera tendria este estilo:

24:35:1A:4E:20:01
D4:35:1A:4E:56:02
A2:24:1D:4E:20:06
...


¿Por que se usan este tipo de diccionarios? Pues basicamente nos permite representar todas las combinaciones posibles, mientras que las palabras ASCII incluyen solo a un pequeño grupo de carácteres. Hay gente que define las contraseñas en modo hexadecimal, si un byte de esa contraseña es por ejemplo 6, es muy dificil que encontremos la contraseña con un diccionario ordinario puesto que no es un carácter representable.

Vale, ahora pasemos a aircrack-ng. Verdaderamente los diccionarios hexadecimales son utiles para ataques con diccionarios a routers con claves predeterminadas, muchos fabricantes establecen las contraseñas por defecto en modo hexadecimal. Para definir en aircrack-ng un diccionario hexadeximal hay que especificar h: antes de la ruta del diccionario y siempre debemos especificar con -n el tamaño en bits de las claves del diccionario:

aircrak-ng -n 64 -w h:"ruta_diccionario.txt" captura.cap


Pero ahora nos encontramos un problema, aircrack-ng tiene un bug conocido y con la solución en el tracker de web pero aun sin corregir en el programa. Para información detallada: http://trac.aircrack-ng.org/ticket/685.
Para solucionarlo tenemos que modificar el código del source aircrack-ng.c.

El problema consiste en que no se libera memoria que se reserva dinamicamente, por lo que el sistema envia una señal KILL a aircrack-ng, en windows produce directamente un error. Para solucionarlo debemos ir al final de la función next_key (aproximadamente linea 4326), donde veamos este código:

free(tmp);
tmp=NULL;


debemos cambiarlo por:

free(tmp2);
tmp2=NULL;


Así ya tenemos solucionado este problema.


Sin embargo existen aun más complicaciones en el código, esta vez en la función crack_wep_dict (aproximadamente linea 4377). El problema se encuentra en esta parte del codigo casi al principio de la función:

i = strlen( key );

origlen = i;

while(i<opt.keylen)
{
key[i] = key[i - origlen];
i++;
}

key[i] = '\0';

      

Como sabreis las contraseñas WEP son de tamaño fijo, es decir son de 64bits (5bytes), 128bits(13bytes), etc...
Como en los diccionarios las contraseñas pueden tener diferente tamaño, lo que hace aircrack es duplicar el contenido, por ejemplo si encuentra en un diccionario la palabra "hola" y esta analizando contraseñas de 128bits, cambiara la palabra "hola" por "holaholaholah". Para esto detecta el final de la palabra cuando encuentra el caracter nulo '\0', y aqui esta el error. En un diccionario hexadecimal podriamos tener la palabra 12:34:00:53:2A y debido a lo comentado anteriormente, aicrack-ng solo nos leera los dos primeros bytes 12:34 y rellenara el resto, con lo que nos estropea cualquier palabra que tenga algun byte 00 (muy común en muchas contraseñas hexadecimales para rellenar).

Realmente este relleno no es para nada necesario, si utilizamos diccionarios para ataques WEP deben ser del tamaño justo a una clave WEP para que el resultado sea efectivo. Sabiendo esto modificaremos el codigo para que no rellene la contraseña. Reservaremos memoria con calloc para rellenar automaticamente con caracteres nulos, tambien eliminaremos la definición de la variable origlen que ya no es necesaria (podria darnos errores con make). En la función crack_wep_dict eliminamos directamente el código citado anteriormente. Y en esa misma función al principio modificamos el codigo:

    int i, origlen, keysize;
    char *key;

    key = (char*) malloc(sizeof(char) * (opt.keylen + 1));


por:

    int i, keysize;
    char *key;

    key = (char*) calloc(1,sizeof(char) * (opt.keylen + 1));



Con estos cambios aplicados, ahora solo tenemos que compilar de nuevo y ya tenemos nuestro aircrack-ng parcheado para que funcione con diccionarios hexadecimales. Yo recomiendo que esta nueva compilación se use solo para esto, para utilizar diccionarios hexadecimales en claves WEP. Para el resto de funciones mejor utilizar la versión compilada original (seguramente ofrezca un mayor rendimiento por las optimizaciones). Para compilar podeis utilizar el Makefile que traen los propios sources mediante make -f Makefile

Una aclaración importante: cuando utilizamos ataque de diccionario para contraseñas WEP debemos especificar con el parametro -n la longitud de la clave. Por defecto establece la longitud a 128bit, si estamos utilizando un diccionario de 64bits debemos especificarlo con -n 64 o no funcionará correctamente.

Bueno, para los vagos aqui os pongo una versión del aircrack-ng 1.1 modificada como explique anteriormente para que funcione con diccionarios hexadecimales. Van el source modificado y el ejecutable (Linux y Windows). Compilado con gcc versión 4.2.2 en Linux, y gcc 4.3.4 mediante Cygwin para Windows (junto al ejecutable de Windows incluyo las librerias de cygwin necesarias para que funcione):
Mirror 1: http://www.fileden.com/files/2006/9/18/225525/aircrack-ng-parchedhexdictionaries.zip
Mirror 2: http://www.megaupload.com/?d=0CLDYUI8

Estos archivos los he compilado yo con gcc (tal y como indico arriba). Desconozco como compilaron los binarios originales, pero seguro que lo hicieron con mejores optimizaciones. Es por esto que no recomiendo substituir los binarios originales por estos ejecutables que he compilado yo porque seguramente sean algo más lentos. Lo óptimo sería utilizar los binarios originales siempre que se pueda, excepto cuando necesitemos utilizar un diccionario hexadecimal, que será cuando hechemos mano de nuestra versión recompilada.

Espero que les sirva de ayuda.

Saludos ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

aaronduran2

Gracias por esto, lo estuve comentando con Uxío y en el trac de aircrack no encontré solución.

Lo probaré junto al R-WlanXDecrypter y comento.

Un saludo ;)

nhaalclkiemr

Ya me comentarás que tal te fue, cualquier duda, sugerencia o lo que sea ponedla aqui.

Lo que no conseguí hacer fue compilarlo en la versión para windows, ¿aircrack-ng para windows que es compilado con el mismo codigo usando Cygwin?

Saludos ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

aaronduran2

¡Perfecto!

Hice un diccionario con claves de 64 bits y me funcionó con 3 redes que tenía. Hay que recordar poner la longitud de la clave como parámetro, que yo ya me olvidaba :xD

Con respecto a la compilación en Windows, no sabría decirte, ahí no tengo experiencia.

Gracias por tu trabajo, muy bueno ;)

nhaalclkiemr

Si, es muy importante poner la longitud como parámetro o no funciona.

Hay una cosa que tambien quiero probar, y es haber si se puede utilizar un diccionario hexadecimal de 128bits con -n 64 para contraseñas de 64 bits, es decir, para no necesitar tener un diccionario hexadecimal de 64bits y otro de 128bits, simplemente tener uno de 128 y utilizando -n 64 a ver si trunca la clave para convertirla en una de 64 (ya que al fin y al cabo lo que resta de la clave de 128 con respecto a la de 64 son todo 0's), pero vamos tampoco es que sea muy necesario simplemente es para ahorrar algun GB en mi ordenador jeje...

Y weno ahora me queda intentar compilarlo para Windows. Tambien miraré a ver si consigo compilarlo con el compilador de Intel, ya que he leido por aí que existen versiones del aricrack-ng compiladas con este compiler pero no he encontrado ninguna para probar.


Saludos ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

nestul

Pues con los diccionarios en formato ASCII bajo windows también debe haber algún problema, porque he probado con el mismo diccionario en ASCII y mismo archivo de captura .cap con las versiones aircrack-ng 0.9.1 y 1.1, y la 0.9.1 encuentra la clave perfectamente, y la 1.1 no, sigue probando claves hasta que dice: "Failed. Next try with 5000 IVs."  ¿Sabéis algo?

Edito con SOLUCIÓN: Lo que pasa es que no funciona con el método de ataque PTW, que es el método utilizado por aircrack-ng 1.x si no especificamos lo contrario. La solución es añadir la opción -K en la línea de comandos y listo, comprobado.
-K  :   Invokes the Korek WEP cracking method. (Default in v0.x) / use only old Korek attacks (pre-PTW)

Supongo que a alguno le ahorrará algún que otro quebradero de cabeza.

P.D: Por cierto, yo la opción -n para introducir la longitud de la clave como parámetro no la utilizo y funciona bien, al menos con diccionarios en formato ASCII.


nhaalclkiemr

OK gracias por el aporte, realmente no lo había mirado en windows solo en linux.

CitarP.D: Por cierto, yo la opción -n para introducir la longitud de la clave como parámetro no la utilizo y funciona bien, al menos con diccionarios en formato ASCII.

Si el diccionario es de 128bit no es necesario especificar el parametro -n pero si es de otra longitud (como de por ejemplo 64bits) si es necesario, o al menos a mi sino no me funciona.

Saludos ;)

EDIT: Ayer probando unos diccionarios me pasó lo mismo que a ti, que empieza el ataque PTW, probe poniendo el -K pero me empezaba el ataque Korek normal, es como si no me reconociera el diccionario. Despues de varias comprobaciones el problema era justamente ese, no me reconocía el diccionario. Al parecer ocurría porque el diccionario era mayor de 2GB. Probe a acortar el mismo diccionario a menos de 2GB y funcionaba perfectamente jeje, asik hay que tener en cuenta que aircrack-ng no reconoce diccionarios mayores de 2GB (al menos para las contraseñas WEP)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

nhaalclkiemr

Despues de investigar un poco como funciona Cygwin he conseguido compilar el programa tambien para Windows.

Para los que no lo sepais, Cygwin es un conjunto de herramientas que permite compilar programas que fueron diseñados para Unix para que funcionen en Windows sin ser necesario modificar el código fuente (o con tan solo pequeñas modidicaciones).

La suite aircrack-ng disponible en windows está compilada con cygwin (e incluye los códigos fuentes preparados para cygwin), por lo que no es dificil recompilarlo (con el código fuente parcheado) instalando esta utilidad. Basta con ejecutar el shell que trae cygwin, y como si fuera una shell de bash compilamos el programa.

Para que los ejecutables compilados con cygwin funcionen, necesitan tener en el mismo directorio donde se encuentran unas librerías especiales. "cygwin1.dll" es la librería principal fundamental (ocupa unos 2.5MB). En el caso de aircrack-ng, tambien necesitan otras librerías. Todas estas librerías se pueden obtener directamente del directorio de binarios que viene con aircrack-ng 1.1 para Windows, y son: "cygwin1.dll", "cygcrypto-0.9.8.dll", "cyggcc_s-1.dll", "cygz.dll" y "msvcr70.dll". Creo que estas dos últimas librerías no son necesarias para aircrack-ng, que solo lo son para otros programas de la suite, pero como no estoy seguro los incluyo igual.

En resumen, he resubido los archivos y en el post inicial he actualizado los enlaces, ahora incluyo tambien el source y los binarios modificados Windows (además de los de Unix que ya tenia antes) y tambien incluyo todas estas librerías de cygwin necesarias para que funcione en Windows.

Saludos ;)

P.D.: Lo he estado probando por si ocurria algun error inesperado o algo y funciona de lujo :D
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%