Autor
|
Tema: Mock IV's (.cap, .ivs) genuinos. (Resuelto) (Leído 2,441 veces)
|
xustyx
Desconectado
Mensajes: 213
|
Buenas! Estoy intentando hacer pruebas con AP's "simulados" y para hacerlo más real me gustaría simular que sueltan paquetes (IV's) acordes a la contraseña asignada, claramente con cifrado WEP. Para eso necesito poder crear ficheros (.cap, .ivs) con IV's genuinas para después pasarlas por aircrack y ver si las descifra correctamente. Actualmente no tengo mucho tiempo para hacer reversing a ese tipo de ficheros, pero me he mirado el source de aricrack en concreto esta función, pero el bucle for me explota la cabeza... https://github.com/aircrack-ng/aircrack-ng/blob/master/src/aircrack-ng.c#L3139int check_wep_key( unsigned char *wepkey, int B, int keylen ){ unsigned char x1, x2; unsigned long xv; int i, j, n, bad, tests; unsigned char K[64]; unsigned char S[256]; if (keylen<=0) keylen = opt.keylen; pthread_mutex_lock(&mx_nb); nb_tried++; pthread_mutex_unlock(&mx_nb); bad = 0; memcpy( K + 3, wepkey , keylen ); tests = 32; // printf("keylen: %d\n", keylen); // if(keylen==13) // printf("%02X:%02X:%02X:%02X:%02X\n", wepkey[8],wepkey[9],wepkey[10],wepkey[11],wepkey[12]); if(opt.dict) tests = wep.nb_ivs; if(tests < TEST_MIN_IVS) tests=TEST_MIN_IVS; if(tests > TEST_MAX_IVS) tests=TEST_MAX_IVS; for( n = 0; n < tests; n++ ) { /* xv = 5 * ( rand() % wep.nb_ivs ); */ xv = 5 * n; pthread_mutex_lock( &mx_ivb ); memcpy( K , &wep. ivbuf[xv ], 3 ); for( i = j = 0; i < 256; i++ ) { j = ( j + S[i] + K[i % (3 + keylen)]) & 0xFF; SWAP( S[i], S[j] ); } i = 1; j = ( 0 + S[i] ) & 0xFF; SWAP(S[i], S[j]); x1 = wep.ivbuf[xv + 3] ^ S[(S[i] + S[j]) & 0xFF]; i = 2; j = ( j + S[i] ) & 0xFF; SWAP(S[i], S[j]); x2 = wep.ivbuf[xv + 4] ^ S[(S[i] + S[j]) & 0xFF]; pthread_mutex_unlock( &mx_ivb ); // printf("xv: %li x1: %02X x2: %02X\n", (xv/5), x1, x2); if( ( x1 != 0xAA || x2 != 0xAA ) && ( x1 != 0xE0 || x2 != 0xE0 ) && ( x1 != 0x42 || x2 != 0x42 ) && ( x1 != 0x02 || x2 != 0xAA ) ) //llc sub layer management bad++; if( bad > ((tests*opt.probability)/100) ) return( FAILURE ); } opt.probability = (((tests-bad)*100)/tests); key_found(wepkey, keylen, B); return( SUCCESS ); }
Bueno, si alguien me puede ayudar a generar las IV's o conoce la existencia de algún programa para hacerlo, se lo agradecería mucho. Saludos
|
|
« Última modificación: 8 Abril 2016, 11:49 am por xustyx »
|
En línea
|
|
|
|
xustyx
Desconectado
Mensajes: 213
|
He encontrado la solución y dentro de la suite... makeivs-ng xD. De paso, intento comentar el código de como aircrack intenta descifrar el IV. No estoy totalmente seguro de si es correcto, así que si me equivoco corregidme. int check_wep_key( unsigned char *wepkey, int B, int keylen ){ //Declaracion de variables de la funcion. unsigned char x1, x2; unsigned long xv; int i, j, n, bad, tests; //Array donde se guardara el IV + KEY. unsigned char K[64]; //Array donde se copiara un vector de 0 a 255 inicializado y se aplicara RC4... unsigned char S[256]; if (keylen<=0) keylen = opt.keylen; pthread_mutex_lock(&mx_nb); nb_tried++; pthread_mutex_unlock(&mx_nb); //Numero de intentos fallidos. bad = 0; //Copiamos la clave wep a probar a partir del 3 byte. Dejamos 3 bytes iniciales para el IV. memcpy( K + 3, wepkey , keylen ); tests = 32; //printf("keylen: %d\n", keylen); //if(keylen==13) //printf("%02X:%02X:%02X:%02X:%02X\n", wepkey[8],wepkey[9],wepkey[10],wepkey[11],wepkey[12]); if(opt.dict) tests = wep.nb_ivs; if(tests < TEST_MIN_IVS) tests=TEST_MIN_IVS; if(tests > TEST_MAX_IVS) tests=TEST_MAX_IVS; //Empiezan las pruebas. for( n = 0; n < tests; n++ ) { /* xv = 5 * ( rand() % wep.nb_ivs ); */ //Posicion a coger del buffer de IVS. 3 bytes del IV + 2 bytes iniciales del paquete. xv = 5 * n; pthread_mutex_lock( &mx_ivb ); //Copiamos el IV en los 3 bytes iniciales. memcpy( K , &wep. ivbuf[xv ], 3 ); //Copiamos el array inicializado de 0 a 255. //Aplicamos RC4 (Key setup) for( i = j = 0; i < 256; i++ ) { j = ( j + S[i] + K[i % (3 + keylen)]) & 0xFF; SWAP( S[i], S[j] ); } //Aplicamos RC4(Keystream generation) para el primer byte. i = 1; j = ( 0 + S[i] ) & 0xFF; SWAP(S[i], S[j]); //Desciframos el primer byte de datos aplicando XOR al primer byte del keystream. x1 = wep.ivbuf[xv + 3] ^ S[(S[i] + S[j]) & 0xFF]; //Aplicamos RC4(Keystream generation) para el segundo byte. i = 2; j = ( j + S[i] ) & 0xFF; SWAP(S[i], S[j]); //Desciframos el segundo byte de datos aplicando XOR al segundo byte del keystream. x2 = wep.ivbuf[xv + 4] ^ S[(S[i] + S[j]) & 0xFF]; pthread_mutex_unlock( &mx_ivb ); //printf("xv: %li x1: %02X x2: %02X\n", (xv/5), x1, x2); //Comparamos si los dos bytes descifrados concuerdan con valores del (LLC header) //Url https://en.wikipedia.org/wiki/IEEE_802.2#LLC_header if( ( x1 != 0xAA || x2 != 0xAA ) && ( x1 != 0xE0 || x2 != 0xE0 ) && ( x1 != 0x42 || x2 != 0x42 ) && ( x1 != 0x02 || x2 != 0xAA ) ) //llc sub layer management bad++; //Si la probabilidad es superada por los fallos no es la key. if( bad > ((tests*opt.probability)/100) ) return( FAILURE ); } //Tenemos una probable key :) opt.probability = (((tests-bad)*100)/tests); key_found(wepkey, keylen, B); return( SUCCESS ); }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
resuelto
Programación Visual Basic
|
usuario oculto
|
2
|
2,211
|
12 Enero 2009, 00:29 am
por usuario oculto
|
|
|
{Resuelto} [vbs] HTA.. ¬¬
« 1 2 »
Scripting
|
xassiz_
|
10
|
7,956
|
2 Octubre 2009, 21:50 pm
por kevlar
|
|
|
{RESUELTO} ¿Cómo redimensiono un jPanel? {RESUELTO}
« 1 2 »
Java
|
|Miguel|
|
12
|
10,622
|
13 Febrero 2012, 15:11 pm
por |Miguel|
|
|
|
[RESUELTO] No consigo limpiar un JTable... [RESUELTO]
Java
|
|Miguel|
|
2
|
29,267
|
12 Febrero 2018, 09:06 am
por shoni_isra
|
|
|
[RESUELTO] C++ ASM
Programación C/C++
|
Miseryk
|
2
|
2,576
|
20 Marzo 2012, 22:03 pm
por Miseryk
|
|