Foro de elhacker.net

Programación => Ejercicios => Mensaje iniciado por: ANELKAOS en 9 Septiembre 2005, 04:06 am



Título: Help Ejercicio 122 en C
Publicado por: ANELKAOS en 9 Septiembre 2005, 04:06 am
Citar
Acceso a ficheros

Ejercicio 122
Escribir un programa que solicite palabras y las agrege a un fichero llamado c:\diccionario de forma que luego se puedan consultar las palabras una a  una

Vale, lo q yo he hecho es un programa que pide al usuario la longitud mínima y maxima de la contraseña y crea todas las palabras posibles. Ejemplo:
min=1, max=2 pues crea un archivo en el que guarda en cada linea todas las palabras posibles desde la cadena a hasta la zz de la forma:
Citar
a
b
c
...
ab
ac
ad
...
y así hasta zz

El código que no consigo hacer funcionar es este:

Código:
/*
* Ejercicio 122 by ANELKAOS
* Creación de diccionarios de contraseñas para fuerza bruta
*/

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

int max, min, i, j;
char cadena[100];
char abcd[38]= "abcdefghijklmnñopqrstuvwxyz0123456789";


int main()
{
     printf("\n\n\t******************************************************************\n");
     printf("\t*Diccionario de palabras V 0.1*\n");
     printf("\t******************************************************************\n");
     printf("\n\n\t Introduzca la longitud m%cnima de la contrase%ca: ",161,164);
     scanf("%d",&min);
     printf("\n\n\t Introduzca la longitud m%cxima (menor que 100) de la contrase%ca: ",160,164);
     scanf("%d",&max);

     printf("\n\n\t Generando archivo de contrase%cas en C:\\pass.txt...",164);

     FILE *pfich;
     
     pfich = fopen("pass.txt", "w");     
     
     if(pfich == NULL){
              printf("\nERROR al abrir el fichero.");
              exit(1);
              }
//escibimos en el archivo
    for(i=min;i<=max;i++)
       {
      for(j=0;j<37;j++)
         {
         cadena[i]=abcd[j];


         strcat(&cadena[i],&abcd[j]);
         fprintf(pfich, "%s\n", cadena);
         }
      }           

/*terminamos de usar el archivo*/
     if(fclose(pfich)!=0){
              printf("\nERROR al cerrar el archivo.");
              exit(1);
              }

     printf("\n\n\t Pulse cualquier tecla para SALIR");
     getchar();
}

Tengo algo oxidado el tema de cadenas y los archivos...pq le he pegado un repaso en Inet que si no lo mismo. Si alguien que lo tenga fresco me puede echar un cable para hacer funcionar esto se lo agradeceria mucho  :-*

1saludo


Título: Re: Help Ejercicio 122 en C
Publicado por: redHat en 9 Septiembre 2005, 07:14 am
A mi me corrió si declaro a la variable pfich como variable global, creo que después de un printf o scanf no puedes declarar variables, creo, no estoy seguro....
pero ese error yo lo tenía antes
Código:
/*
* Ejercicio 122 by ANELKAOS
* Creación de diccionarios de contraseñas para fuerza bruta
*/

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

int max, min, i, j;
char cadena[100];
char abcd[38]= "abcdefghijklmnñopqrstuvwxyz0123456789";
FILE *pfich;


int main()
{
     printf("\n\n\t******************************************************************\n");
     printf("\t*Diccionario de palabras V 0.1*\n");
     printf("\t******************************************************************\n");
     printf("\n\n\t Introduzca la longitud m%cnima de la contrase%ca: ",161,164);
     scanf("%d",&min);
     printf("\n\n\t Introduzca la longitud m%cxima (menor que 100) de la contrase%ca: ",160,164);
     scanf("%d",&max);

     printf("\n\n\t Generando archivo de contrase%cas en C:\\pass.txt...",164);
     
     pfich = fopen("pass.txt", "w");     
     
     if(pfich == NULL){
              printf("\nERROR al abrir el fichero.");
              exit(1);
              }
//escibimos en el archivo
    for(i=min;i<=max;i++)
       {
      for(j=0;j<37;j++)
         {
         cadena[i]=abcd[j];


         strcat(&cadena[i],&abcd[j]);
         fprintf(pfich, "%s\n", cadena);
         }
      }           

/*terminamos de usar el archivo*/
     if(fclose(pfich)!=0){
              printf("\nERROR al cerrar el archivo.");
              exit(1);
              }

     printf("\n\n\t Pulse cualquier tecla para SALIR");
     getchar();
}


Título: Re: Help Ejercicio 122 en C
Publicado por: soplo en 10 Septiembre 2005, 11:17 am
De todas formas parece que hay una confusión de conceptos. En un brute force se puede utilizar bien un dicionario bien permutaciones. lo que no tiene sentido es ambas cosas.

Quieo decir que en un dicionario no se meten permutaciones. se meten palabras posibles y lo que hace el bruteforce es probarlas a ver si funcionan. Suelen ser palabras comunes que se usan en claves. Se prueba la palabra en sí misma y posibles variaciones (mayúsculas, minúsculas, parte de la plabra). P.ej. Administrador, administrador, admin, Admin, ..., etc.

Si ninguna palabra es válida entonces se emplea el método de las permutaciones que es ponerse a realizar combinaciones e ir probando una a una hasta dar con la clave. Esas combinaciones se realizan en memoria y se prueban. Si cada combinación fuera leída de un fichero el proceso sería larguísimo.

lUn saludo


Título: Re: Help Ejercicio 122 en C
Publicado por: ANELKAOS en 13 Septiembre 2005, 04:51 am
Buenas soplo supongo q t refieres a la respuesta q dí al del SSH. Simplemente es q coincidió q habia hexo esto recientemente y podia utilizarlo x medio de pipes y NO DE ARCHIVOS como le recomendé en el otro post.

1saludo y gracias redHat que tenias razon y no te dí ni las gracias jeje  :)


Título: Re: Help Ejercicio 122 en C
Publicado por: Arcangel_RZ en 15 Septiembre 2005, 23:41 pm
Citar
creo que después de un printf o scanf
eso no es cierto....
cuando trabajas en C, tienes que definir las variables globales y las locales antes de cualquier codigo ok.
sin embargo, en C++ las coasas cambien puedes definirlas en cualquier parte del programa con relación a ambitos (generalmente asociado con los espacios entre corchetes)