Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Anastacio en 23 Enero 2012, 23:05 pm



Título: Como hacer un programa para averiguar contraseñas por fuerza bruta.
Publicado por: Anastacio en 23 Enero 2012, 23:05 pm
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.


Título: Re: Como hacer un programa para averiguar contraseñas por fuerza bruta.
Publicado por: soyloqbuskas en 23 Enero 2012, 23:31 pm
¡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
Código:

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.


Título: Re: Como hacer un programa para averiguar contraseñas por fuerza bruta.
Publicado por: Anastacio en 23 Enero 2012, 23:43 pm
Como declaro una cadena de caracteres???


Título: Re: Como hacer un programa para averiguar contraseñas por fuerza bruta.
Publicado por: soyloqbuskas en 23 Enero 2012, 23:53 pm
Código:
char cadena[3]={'o','l','a'};
printf("%c%c%c\n",cadena[0],cadena[1],cadena[2]);


Título: Re: Como hacer un programa para averiguar contraseñas por fuerza bruta.
Publicado por: Anastacio en 24 Enero 2012, 00:11 am
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???



Título: Re: Como hacer un programa para averiguar contraseñas por fuerza bruta.
Publicado por: Ferno en 24 Enero 2012, 00:34 am
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.


Título: Re: Como hacer un programa para averiguar contraseñas por fuerza bruta.
Publicado por: soyloqbuskas en 24 Enero 2012, 00:46 am
Aqui te dejo el codigo del programa.

Código:
#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;
}


Título: Re: Como hacer un programa para averiguar contraseñas por fuerza bruta.
Publicado por: Anastacio en 24 Enero 2012, 02:43 am
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"??


Título: Re: Como hacer un programa para averiguar contraseñas por fuerza bruta.
Publicado por: soyloqbuskas en 24 Enero 2012, 03:45 am
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 (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:

Código:
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
}


Título: Re: Como hacer un programa para averiguar contraseñas por fuerza bruta.
Publicado por: zugador en 17 Diciembre 2012, 17:28 pm
soyloqbuscas podrias colgar el programa entero para romper contraseñas por fuerza c  :huh: muchas gracias con antelacion  :laugh:


Título: Re: Como hacer un programa para averiguar contraseñas por fuerza bruta.
Publicado por: Wolfkey en 8 Octubre 2015, 08:52 am
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 (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:

Código:
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
}


Hola acabo de entrar en este foro y vi este tema, espaba pesando y si hubiera alguna forma de buscar cararter por caracter, en vez de busscar todas las conbinaciones, ejemplo:

Digamos que tenemos la contraseña "casas" (la cual no sabemos). el programa buscaria  asi:
00000
00001
00002

tardaria mucho en buscar, pero si pudiera buscar cada caracter a la vez osea:
00000
11111
22222
y luego guardar cada caracter por separado con un string de tal manera que cuando se haga la comprobacion de la cadena se dara error, pero que cuando la cadena encuentre alguna similitud entre la contraseña casas y el codigo, el caracter que coincido se guarde y haga un break, obiamente los primeros caracteres seria la "a" seria algo asi.
aaaaa
babab
cacac
cadad
...
...
caqaq
carar
casas

asi buscaria la contraseña separando cada caracter y seria mas rapido ya que al hacer break en cada caracter eliminamos ciclos innecesarios