Como hacer un programa para averiguar contraseñas por fuerza bruta.

Iniciado por Anastacio, 23 Enero 2012, 23:05 PM

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

Anastacio

Hola amigos, he buscado funciones por todos lados, pero no pude encontrar nada que me ayude.

Estoy queriendo que (No que me hagais el programa, jeje), me tireis una ideiiiita para hacer un programa por fuerza bruta por C.

Solo una funcion, o algo asi.

Bueno, si podeis, como si no, muchas gracias.
You, stop to close my post, you were novice too!!!!!!!!!!!!

soyloqbuskas

¡Buenas Anastacio!

Lo primero de todo...¿sabes lo que es romper una contraseña por fuerza bruta?
Esto consiste en comprobar todas las combinaciones de caratceres posibles...

Esto es tremendamente lento...pero podrias hacerte un ejemplo rapido...Para ello hazte un programa en el que te declares una cadena de 3 caracteres y la llenas con los 3 caracteres que quieras...Luego te creas 3 bucles anidados


for(i<0;i<27;i++{
   for(j<0;j<27;i++{
        for(k<0;k<27;i++{
           // Codigo para compara el caratcer 3
        }
         // Codigo para comprar el caracter 2
   }
   // Codigo para comprar el caracter 1
}

Si el resultado de las 3 comparaciones es correcto, entonces has encontrado la cadena


Esto es una pequeña aproximacion de como funciona un rompedor de contraseñas por fuerza bruta...

Espero haberte servido de ayuda, un saludo.
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

Anastacio

You, stop to close my post, you were novice too!!!!!!!!!!!!

soyloqbuskas


char cadena[3]={'o','l','a'};
printf("%c%c%c\n",cadena[0],cadena[1],cadena[2]);
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

Anastacio

O sea que lo mejor seria crear una cadena de caracteres de todas las letras del alfabeto, mas las vocales con tildes, los numeros, comas, comillas, puntos, punto y coma, etc, los mas comunes, y luego probarlos.

No entiendo para que usas los for ahi. Para que sirven en esa circunstancia???

You, stop to close my post, you were novice too!!!!!!!!!!!!

Ferno

Gracias a los for, estarías creando todas las alternativas posibles comenzando por los 3 caracteres que se eligieron en ese ejemplo.
Fuerza bruta está basado justamente en eso, comprobar todas las combinaciones posibles de todos los caracteres hasta que des con el correcto.

soyloqbuskas

#6
Aqui te dejo el codigo del programa.


#include<stdio.h>
#include<stdlib.h>

int main(){
   char cadena[3]={'o','l','a'};
   printf("Password: %c%c%c\n",cadena[0],cadena[1],cadena[2]); //escribicmos los 3 caracteres
   
   char resultado[3];  //array donde vamos a guardar los resultados
   unsigned char caracter='a';  //variable usada para las compraraciones
   int ok=0; //Cuando encontremos los 3 caracteres ok sera igual 3
   
   int i=0;
   int j=0;
   int k=0;
   
   for(i=0;i<255;i++){  //bucle que compara y encuentra el 1º caracter
   caracter=(char)i;
        for(j=0;j<255;j++){  //bucle que compara y encuentra el 2º caracter
             caracter=(char)j;
             for(k=0;k<255;k++){  //bucle que compara y encuentra el 3º caracter
                   caracter=(char)k;
                   if(cadena[2]==caracter){
                       resultado[2]=caracter;
                       ok++;
                       if(ok==3){break;break;break;}
                   }
                   caracter++;            
             }
             if(cadena[1]==caracter){
                 resultado[1]=caracter;
                 ok++;
             }
             caracter++;
        }
        if(cadena[0]==caracter){
            resultado[0]=caracter;
            ok++;
        }
        caracter++;
   }
   
   printf("Password encontrado: %c%c%c\n",resultado[0],resultado[1],resultado[2]);
   
   system("pause");
   return 0;
}
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

Anastacio

Gracias a todos amigos. Me gustaria hacer un pequeño analisis de este programa. Pronto me hare una version propia, con algunas caracteristicas mas avanzadas, que permitan otras cosas, pero bueno, veamos:

Me cuesta entender el tema del for. Es decir, que mientras i sea menor a 0 y a 225, i sumara uno??

Que representa i en este caso. Uno de los tres caracteres "o, l, a"??
You, stop to close my post, you were novice too!!!!!!!!!!!!

soyloqbuskas

#8
Un bucle te permite repertir una instruccion tantas veces como quieras. En este caso se repite desde 0 hasta 255 (256 veces, porque el cero tambien se cuenta). El motivo de que se repita 256 veces es porque hay 256 caracteres direferentes.
http://atc.ugr.es/docencia/udigital/img/ap04g.gif

Por tanto, si tenemos 3 caracteres tenemos 256^3 combinaciones de caracteres diferentes. Por eso necesitamos 3 bucles desde 0 hasta 255, uno para cada caracter.

para declarar un bucle for debes hacer esto:


int posicionInicio; //equivalente a la i

for(posicionInicio=0;  posicionInicio<100;  posicionInicio++){
    //instrucciones que se repetiran 100 veces
    //si en posicionInicio hubiera puesto posicionInicio=10
    //el bucle se repetira 100-10=90 veces
}

"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

zugador

soyloqbuscas podrias colgar el programa entero para romper contraseñas por fuerza c  :huh: muchas gracias con antelacion  :laugh: