Hola a todos,
Me gustaría lo primero de todo, ya que este es mi primer mensaje, presentarme.
Mi nombre de guerra es BlackHole, aunque en otros foros de otras temáticas completamente diferentes. Apenas descubrí este mundillo de la auditoría WiFi unas semanas atrás, en Navidades.
Como buen curioso y autodidacta, me estuve informando de las herramientas disponibles, hasta que llegué aquí a través de los buscadores, y conocí la herramienta wlandecrypter para generar diccionarios.
Estuve revisando el código fuente en C, y pude darme cuenta de que en cada sucesiva versión, se había hecho cada vez más oscuro y las nuevas funcionalidades se conseguían copiando grandes bloques de código. Estaba pidiendo a gritos una remodelación, y me lo propuse como hobby personal.
Yo me muevo más en administración de sistemas y redes, pero recuperé mi ánimo por programar en C de nuevo tras dejar la Facultad hace 15 años, y me puse a la tarea. Con una LiveCD austera (la ISO de Slitaz de la propia web de aircrack-ng) y la ayuda del tedioso gdb, poquito a poco fui cambiando las funciones ... y me sorprende a mí mismo que el resultado final, ya no se parezca casi en nada al original.
Descarga de wlandecrypter 1.3 (source+Linux x86 bin)Mi primera decisión fue modificar la estructura central de la tabla de los routers, para que usasen punteros a cadenas de texto estáticas con la información. Esto hace que la ampliación sea muy sencilla, y no haya límite en las posibles futuras familias de claves asociadas a un determinado router, sin tener que inventar nuevas variables.
Si bien en programas muy grandes, es aconsejable realizar funciones que únicamente devuelvan códigos de estado al programa principal y actuar allí en consecuencia, por el contrario y debido al reducido tamaño, he decidido crear funciones que eran capaces de decidir abortar ellas mismas el programa, y simplificar el programa principal.
Gran parte del antiguo código se perdía en hacer un parsing de las opciones. Eso se podía haber solucionado utilizando getopt, pero como no me gusta demasiado, he preferido forzar al usuario a introducir los parámetros en un determinado orden, y a no introducir más de los necesarios (p.e. la opción -a no necesita BSSID para nada).
Mi código no es mejor ni peor que el de los demás (sobre todo porque no soy programador profesional) pero se me puso una sonrisa en los labios cuando observé que se había reinventado varias veces la rueda, en aquellas rutinas que chequeaban e imprimían con bucles anidados los números hexadecimales. Obviamente en esta revisión, he preferido usar isxdigit, strtoul y fprintf %0nX
Aquí os dejo el resultado de mi trabajo para uso libre de aquellos que quieran incluirlo en otro software. No sé si tendré la oportunidad de crear versiones MacOsX o MinGW, ni cómo compilarán en esos otros equipos. Está testado para GCC 4.4.1 sobre Linux. El fichero wlandecrypter13.tar.bz2 del enlace contiene la fuente y un ejecutable ELF glibc sin información de debug.
Espero que sea de vuestro agrado.
Un saludo, BlackHole.