Intentando crear programa romper claves wifi (WEP) S.O Windows en C++

Iniciado por WiseHidden, 18 Marzo 2011, 11:13 AM

0 Miembros y 2 Visitantes están viendo este tema.

fantasma306

#60
Hola, me alegra ver que esto siguen en pie jajaja

weno como ya comente a WiseHidden este es mi pequeño codigo para generar diccionarios con palabras de tamaño variado.

Código (cpp) [Seleccionar]

/** by fantasma306 **/
#include <fstream>
#include <string>
#include <math.h>
using namespace std;
void genDico(ostream& archivo,const char *cadena, double lengthCadena, double maxLetras);
int main(){
/*Esto se puede cambiar*/
string chars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int numLetrasPass=3;/*numero de letras que tienen las contraseñas generadas, solo modificar el numero*/

ofstream archivo("dico.txt");
genDico(archivo, chars.c_str(), chars.size(), numLetrasPass);
archivo.close();
   return 0;
}
void genDico(ostream& archivo, const char *cadena, double lengthCadena, double maxLetras){
/*18446744073709551615 es el numero maximo que se puede guardar en un "unsigned long long"*/
if(18446744073709551615>pow(lengthCadena,maxLetras)-1){
unsigned long long maxCont=pow(lengthCadena,maxLetras)-1;
for(unsigned long long cont=0;cont<=maxCont; cont++){
for(register int i=maxLetras-1; i>=1; i--) {
unsigned long long pos=cont / pow(lengthCadena,i);
if(pos>=lengthCadena)
pos=pos % int(lengthCadena);
archivo<<cadena[pos];
}
archivo<<cadena[cont % int(lengthCadena)]<<endl;
}
}
}
Es mejor callar y que piensen que eres idiota a hablar y demostrarlo.

Danyel_Casvill

Cita de: WiseHidden en 12 Junio 2011, 17:45 PM
Hola a todos camaradas.

Viendo que todos estamos haciendo nuestros progresos y demas, propongo a que nos reunamos el jueves en el IRC para agilizar y establecer el cometido de cada uno, y asi presentarnos y conocernos un poco.

Que os parece el Jueves alas 22:00h (España)

He puesto esta fecha pero estoy abierto totalmente a otra, por mi parte no hay ningun problema
exponer que hora os vendria mejor, y si es posible llegar a un dia y una hora comun

un saludoooo a todos

atentamente

WiseHidden
Hola!!  Eeemm, el jueves podría ser, pero ¿Porqué tan tarde? no podría ser mas o menos a las 16:00 (Colombia) o algo asi?

Y eso que depronto la próccima semana no pueda pero igual haré lo posible, me estan avisando si algo.
adada

fantasma306

Es mejor callar y que piensen que eres idiota a hablar y demostrarlo.

Danyel_Casvill

adada

WiseHidden

Me parecio adecuada esa hora pues en españa las 22.00 seria una hora prudente y que todos tenemos la facilidad de conectarnos y en paises como colombia, ecuador, argentina........ Seria mas o menos la hora entre el medio dia y la siesta que es otra hora que es aceptable y posible para conectarse, si no veis ningun inconveniente este jueves alas 22.00h (Hora de españa) nos conectaremos todos al irc (Yo me conectare sobre las 22.15) pues es lo que tardo del trabajo ala casa :D

Un cordial saludo

PD: Cualquier duda o consulta o cambio exponganlo por aqui para que todos esten al tanto.

Un saludoooo

Atentamente
WiseHidden
Si tu tienes una manzana y yo otra y decidimos intercambiarlas, seguiremos teniendo una manzana cada uno, pero si tu tienes una idea y yo otra y la intercambiamos, ambos tendremos dos ideas. (Origen Anónimo)

<<<-Basura->>>

mejore el codigo un monton, ya que el primero que presente fue muy largo he ineficiente, este codigo genera contaseñas que tengan a,b,c, como ya tengo tiempillo libre seguire haciendo lo demas que es sacarlo a un fichero, mirenlon.

#include <stdio.h>
#define Let_A 97
#define Let_B 98
#define Let_C 99
void letras( int i , int j , int k );

int main(){   
    for(int i = 1 ; i <= 3 ; i++ )
            for(int j = 1 ; j <= 3 ; j++ )
                    for(int k = 1 ; k <= 3 ; k++ )
                            letras(i,j,k);
                            //printf("%d%d%d \n",i,j,k);
    printf("Pausa...");
    getchar();
    return 0;   
}
void letras( int i , int j , int k ){     
     printf("%c%c%c \n", i==1 ? Let_A : i==2 ? Let_B : Let_C,
                         j==1 ? Let_A : j==2 ? Let_B : Let_C,
                         k==1 ? Let_A : k==2 ? Let_B : Let_C
                         );         
}


Esta corto y bastante entendible diría yo, espero que lo analicen y opinen
<<<--Basura-->>>

Danyel_Casvill

Hola!!

Eemm estuve pensandolo, y, podríamos hacer lo siguiente; como se supone que el programa debe inyectar las posibles contraseñas, podríamos ir haciendo algo más censillo para ir practicando, o pensandolo a menor escala para luego ir subiendo.
Hacer 2 programas, uno que pida la contraseña (gato5 o cualquiera), y el otro programa debe inyectarle las posibles contraseñas hasta encontrar la correcta.

¿Estan de acuerdo?
¿Como lo harian?

Saludos

Pd: XxX--Underwar--xXx me gusto el código aunque creo se podrían hacer algunas modificaciones (En C++ es preferible no usar define), pero creo po ahí puede ir la cosa.
adada

<<<-Basura->>>

Yo la verdad no se como inyectar las contraseñas, el que sabe podría decirlo para aprender  :silbar:
<<<--Basura-->>>

fantasma306

Cita de: XxX--Underwar--xXx en 14 Junio 2011, 05:05 AM
mejore el codigo un monton, ya que el primero que presente fue muy largo he ineficiente, este codigo genera contaseñas que tengan a,b,c, como ya tengo tiempillo libre seguire haciendo lo demas que es sacarlo a un fichero, mirenlon.

#include <stdio.h>
#define Let_A 97
#define Let_B 98
#define Let_C 99
void letras( int i , int j , int k );

int main(){   
    for(int i = 1 ; i <= 3 ; i++ )
            for(int j = 1 ; j <= 3 ; j++ )
                    for(int k = 1 ; k <= 3 ; k++ )
                            letras(i,j,k);
                            //printf("%d%d%d \n",i,j,k);
    printf("Pausa...");
    getchar();
    return 0;   
}
void letras( int i , int j , int k ){     
     printf("%c%c%c \n", i==1 ? Let_A : i==2 ? Let_B : Let_C,
                         j==1 ? Let_A : j==2 ? Let_B : Let_C,
                         k==1 ? Let_A : k==2 ? Let_B : Let_C
                         );         
}


Esta corto y bastante entendible diría yo, espero que lo analicen y opinen


pero ese codigo solo sirve para palabras de 3 letras, si se quiere mas letras hay que modificar mucho el codigo, añadir bucles etc..., el codigo que propuse mas arriba,
con tan solo modificar esta linea
Código (cpp) [Seleccionar]
int numLetrasPass=3;
es suficiente, incluso se puede pedir al usuario el numero de letras que quiere, para no estar compilando el codigo todo el tiempo,

si no entienden muy bien como funciona el codigo os lo puedo explicar.


Para la inyeccion:
Corríjanme si me equivoco!, pero no seria mas facil programar socket's para enviar paquetes con las contraseñas, y escuchar las paquetes recibidos, para saber si la contraseña es valida.??

Es mejor callar y que piensen que eres idiota a hablar y demostrarlo.

WiseHidden

#69
Todos estamos igual Undewar, ninguno sabemos con certeza como "funciona" exactamente el sistema de injeccion de contraseñas, pero voy viendo el aporte que estamos haciendo todos y la verdad que ya esta cogiendo forma y color.

Yo deduzco (y solo es una deduccion pues podria comerte un enorme error) que el programa consta de varias parte.

- GENERADOR DE DICCIONARIO

* A mi Manera hay dos modos de hacerlo.

1º Generando automáticamente el diccionario
    Ventajas: No necesitaria *.txt para compararlo pues lo generaria automáticamente
    Desventajas: El proceso "chuparia y relentizaria" muchisimo la CPU ademas que el tiempo que conllevaria el solo generarlo

Código Basico de Ejemplo:
Citar//By WiseHidden
// Ejemplo de Generador de Diccionario Para Proyecto WifiHi

#include <fstream.h>

int main()
{
   ofstream archivo("Diccionario.txt");

   for(char letra='A'; letra <='Z'; letra++)
   archivo << letra;
   archivo.close();

   return 0;
}

Como ven, crearia un diccionario en un archivo *.txt (Es un ejemplo básico)
O tambien podria reprensentarse con el código de XxX--Underwar--xXx

Citar#include <stdio.h>
#define Let_A 97
#define Let_B 98
#define Let_C 99
void letras( int i , int j , int k );

int main(){    
   for(int i = 1 ; i <= 3 ; i++ )
           for(int j = 1 ; j <= 3 ; j++ )
                   for(int k = 1 ; k <= 3 ; k++ )
                           letras(i,j,k);
                           //printf("%d%d%d \n",i,j,k);
   printf("Pausa...");
   getchar();
   return 0;    
}
void letras( int i , int j , int k ){    
    printf("%c%c%c \n", i==1 ? Let_A : i==2 ? Let_B : Let_C,
                        j==1 ? Let_A : j==2 ? Let_B : Let_C,
                        k==1 ? Let_A : k==2 ? Let_B : Let_C
                        );          
}

o incluso exponer el código de Fantasma306 (Generador de diccionarios con palabras de tamaño variado) que para mi personalmente y a mi entender seria el más completo, retocando un (Pelín el código) <NO EXPONGO EL CODIGO> Por la longitud del post  :P

2º La segunda opción creo que es la más acertada pues sus ventajas son mayores que la primera.
Solo se necesitaria de diccionario en archivos de texto (.txt) para leerlos, los diccionarios ya vendrian realizados, y lo bueno que podrian utilizarse varios (En varios idiomas) o (Distintas encriptaciones) <<Tendriamos que estudiar como el usuario, "crea" un diccionario X y "se selecciona los nuestros" tiene que haber alguna funcion que trate de esto!!!



Ejemplo de Lectura de diccionario desde un archivo .txt

Citar// By WH
// Leer un archivo de texto
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
 string linea;
 ifstream MiArchivo ("Diccionario.txt"); //en este caso los diccionarios que tengamos guardado, y en caso de y en algun módulo direccionarlo
 if (MiArchivo.is_open())
 {
   //Mientras que no sea fin de archivo
   while (! MiArchivo.eof() )
   {
     getline (MiArchivo,line);
     cout << linea << endl;
   }
   MiArchivo.close();
 }
 else cout << "No se pudo abrir el archivo.";
 return 0;
}

Este programa no necesita mucha explicacion, lee un archivo de texto (en este caso diccionario.txt)

Bien esta es la parte facil del Proyecto - Generar/Leer Diccionarios

El problema empieza en Comparar/Injectar/Certificar y Autentificar de que entre todas las probabilidades que tengan nuestros diccionarios una de ellas sea la "verdadera" y nos diga "CONTRASEÑA ENCONTRADA xxxxxxxxxx"

yo creo que se base en el siguiente principio

Citar//by WiseHidden

#include <stdio.h>

int compara(float a, float b){
   if (a==b) return 0;   
   if (a>b)  return 1;
   if (a<b)  return 2;
}

int main ()
{
   float n1, n2;      /*Los dos números a comparar*/
   printf("nIntroduce el primer número: ");
   scanf("%f", &n1);
   printf("nIntroduce el segundo número: ");
   scanf("%f", &n2);
   switch (compara(n1, n2))
   {
      case 0:   printf("nLos números %f y %f son iguales", n1, n2); break;
      case 1: printf("n%f es mayor que %f", n1, n2); break;
      case 2: printf("n%f es menor que %f", n1, n2); break;
   }
   return 0;
}
pero en vez de establecer si dos numeros son <,= o > tendriamos que ver como comparar si x = x Es un principio matemático muy simple, solo que tenemos que realizarlo en código.

bueno no se porque siempre me enrrollo tanto en mis respuestas :P pero es para hacernos una idea generalizada del proyecto, de ahi a que se celebre una reunión preliminar el jueves, para agilizar y conocer la ideas de cada uno.


PD: Ala hora de mandar el mensaje me ha saltado un aviso de que habia una nueva respuesta en el post.

CitarCorríjanme si me equivoco!, pero no seria mas facil programar socket's para enviar paquetes con las contraseñas, y escuchar las paquetes recibidos, para saber si la contraseña es valida.??

Y corrijanme si me esquivoco pero creo que esa es la respuesta que necesitabamos!!!

De hecho creo que todos los programas de este tipo lo hacen así!!!
Este es un tema importante a discutir y a conocer

Un cordial saludoooo

Atentamente
Vuestro Igual

WiseHidden
Si tu tienes una manzana y yo otra y decidimos intercambiarlas, seguiremos teniendo una manzana cada uno, pero si tu tienes una idea y yo otra y la intercambiamos, ambos tendremos dos ideas. (Origen Anónimo)