[C]Fuerza Bruta

Iniciado por HRSLASH, 11 Julio 2010, 10:07 AM

0 Miembros y 1 Visitante están viendo este tema.

HRSLASH

Hola a todos!! como primer post quiero compartir con uds un programita q estuve haciendo en C q simule un programa de fuerza bruta, solo q mas sencillo.. estoy aprendiendo a programar en C asiq soy novato, cualquier sugerencia, propuesta, o lo q sea para mejorar el codigo y aprender sera bienvenida :D..



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

int mystrlen(char *s);
void mystrcpy(char *s, char *t);
int mystrcmp(char *s, char *t);

int main()
{
      char pass[]="MONO";
      int i, num;
      num = mystrlen(pass);
      char bf[num];
      //srand(time(NULL));
      mystrcpy(pass, bf);

      while(bf != pass)
      {
               for(i=0; bf[i] != '\0'; i++){
                        bf[i] = 'A'+rand()% ('A'-'Z');
                        printf("%c", bf[i]);
                        }
                        if((mystrcmp(pass, bf)) == 1)
                                           break;
                        printf("\n");
               }
     
      printf("\n");
      return 0;
}



int mystrlen(char *s)
{
    int i;
   
    for(i=0; *s != '\0'; i++, s++);
   
    return i;
}

void mystrcpy(char *s, char *t)
{
    for(; *s != '\0'; s++, t++){
          *t = *s;
          }
    *t = '\0';
}

int mystrcmp(char *s, char *t)
{
    int r;
    while(*s != '\0'){
             r = *s - *t;
             if(*t == '\0')
                   break;
             else{
                  if(r == 0)
                       s++, t++;
                  else
                      s++;
                  }
             }
    if(*t == '\0')
          return 1;
}



Algo q no pude lograr sin un strcpy es q copie los mismos lugares en el string bf, pq si lo hacia con un strlen siempre me copiaba 3 por el '\0', la unica forma en la q pude hacerlo fue con un strcpy..
bueno un saludo, espero que les guste!!
La televisión es para mi el medio mas instructivo y cultural que conozco, cuando la prenden me voy a leer

nicolas_cof

HRSLASH, bienvenid@! te recomendaria usar las etiquetas GeSHI o code para que sea mas legible tu codigo

Codigo C
[code=c][/code]

Codigo Generico
[code][/code]

Pregunta, es necesario que implementes tus propias funciones? porque de no ser asi podrias hacer tu codigo mas optimizado, usando funciones de las librerias estandar.

Otra pregunta, funciona? realmente veo cosas muy raras, por ejemplo esta...

while(bf != pass)

Te dejo un tema donde vas a encontrar un par de ejemplo sobre lo que vos estas desarrollando...

https://foro.elhacker.net/programacion_cc/recopilatorio_sources_interesantes-t298479.0.html

Y como ultimo te invito a que pases por estos temas...

https://foro.elhacker.net/programacion_cc/librospapers_c_and_c-t296234.0.html

https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Salu10.

HRSLASH

Nicolas_cof muchas gracias por tu bienvenida y tus sugerencias!! estuve leyendo los links q me dejaste y estan muy buenos pq muchas cosas q se tratan en ellos no las sabia.. ya modifique la forma en que habia subido el codigo e incluso baje unos libros q posteaste :D
Paso a responder tus preg, en el caso de las funciones, solo implemente las q hice por pura practica, como no estoy muy empapado con el tema de punteros quise implementarlos en las funciones para ir familiarizandome mas con ellos.. tenes razon en cuanto a la optimizacion, tal vez de la forma q lo hice sea mas ilegible.. lo modifecare..
El prog lo probe y funciona, pq encuentra la palabra clave en unos segundos, lo que quice poner en el while fue que mientras no encuentre la palabra clave q busque, pq te parece rara esa parte? como lo tendria q haber puesto? te agradeceria si me explicas :D
un saludo!
La televisión es para mi el medio mas instructivo y cultural que conozco, cuando la prenden me voy a leer

nicolas_cof

Cita de: HRSLASH en 11 Julio 2010, 19:58 PMlo que quice poner en el while fue que mientras no encuentre la palabra clave q busque, pq te parece rara esa parte? como lo tendria q haber puesto? te agradeceria si me explicas :D

En realidad lo que haces en el while es comparar direcciones de memoria, al poner que son != siempre te va a devolver 1, que en logica seria un true (verdadero). Por ende siempre se va a cumplir esa condicion ya que las dos variables tienen direcciones de memoria distintas.

Te recomiendo que leas algunos de estos libros o los dos, donde vas a encontrar muchas informacion sobre el tema...

> El Lenguaje de Programación C - Brian W. Kernighan, Dennis M. Ritchie
> Cómo Programar en C/C++ - Harvey M. Deitel, Paul J. Deitel

Y no dudes en consultar cualquier duda...

Salu10.

HRSLASH

Gracias x la explicacion! me baje el libro de como programar en C.. el de kernighan y Ritchie lo tengo, pero hay varias cosas q no logro entender, me resulta bastante complejo en algunas cosas.. voy a ver q tal con este otro :D
La televisión es para mi el medio mas instructivo y cultural que conozco, cuando la prenden me voy a leer