Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [C++] Forza bruta

    Ciao a tutti!! è da un paio di giorni che sto provando a realizzare un piccolo programma in C++ che sia in grado di effettuare un attacco di forza bruta...
    L'ho stavo impostando in modo da avere due array di tipo char di dimensione 8 chiamati uno password e uno crack.
    Parto con l'acquisizione della password, poi inizializzo l'array crack con tutti i caratteri che contengano lo zero ASCII (il valore NULL per capirci) in questo modo si potrebbe trovare una qualsiasi parola composta con il codice ASCII da 0 a 255.
    Fino a qui ci sono, ma mi blocco appena devo fare il controllo perchè lo voglio fare trattandole come due stringhe --> (strcmp(password,crack)==0) e non carattere per carattere (cosa che già sono riuscito a fare...).....
    Lo volevo realizzare possibilmente con una funzione ricorsiva in modo tale che anche se aumento o diminuisco la lunghezza della stringa da "craccare" , per così dire, il programma funzioni ugualmente.
    Ho già cercato sul web ma ho trovato solamente sorgenti che utilizzavano cicli for annidati ma avevano il difetto di non poter aumentare la dimensione della stringa....
    Riassumendo:
    -utilizzare tutti i 256 caratteri ASCII
    -possibilmente funzione ricorsiva
    -controllo tra stringhe (NON carattere per carattere)

    Come lo realizzereste?? quello che mi interessa di + è la funzione ricorsiva...
    Comunque qualsiasi consiglio e suggerimento è molto gradito!!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non ho compreso il perché della funzione ricorsiva ... se devi confrontare due zone di memoria, puoi utilizzare la funzione

    memcmp

    Non puoi utilizzare la strcmp perché non puoi trattare i caratteri NULL.


    P.S. Diciamo che il quesito può essere di tipo *generale*, ma se esplicitamente riferito a discorsi come *crack*, allora non è benvenuto su questo forum ed è possibile che ti venga chiuso il thread (a giudizio dei moderatori) ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da oregon
    Non ho compreso il perché della funzione ricorsiva ... se devi confrontare due zone di memoria, puoi utilizzare la funzione

    memcmp

    Non puoi utilizzare la strcmp perché non puoi trattare i caratteri NULL.


    P.S. Diciamo che il quesito può essere di tipo *generale*, ma se esplicitamente riferito a discorsi come *crack*, allora non è benvenuto su questo forum ed è possibile che ti venga chiuso il thread (a giudizio dei moderatori) ...
    Beh il mio prof di sicurezza ci fece fare degli esercizi di attacchi a forza bruta...spero si tratti di una situazione di questo tipo

  4. #4
    XD ho chiamato la variabile crack perchè non sapevo come chiamarla e dovendo fare un'esercitazione che provava tutte le possibili combinazioni come un attacco di forza bruta mi è sembrata appropriata!! XD cmq memcmp in quale libreria si trova? mi potete fare un esempio pratico di come posso effettuare il controllo??
    per rispondere a oregon: volevo utilizzare la funzione ricorsiva per avere un codice più piccolo e "pulito"... anche perchè credo che con i cicli for annidati ce la dovrei fare ma non mi piace perchè non posso superare il numero prestabilito di caratteri!

    piccolo OFF topic
    (state tranquilli sono troppo a terra di programmazione!! non riesco manco a formattare il mio PC per installare XP a 64bit! XD)

  5. #5
    all that you need:
    http://www.cplusplus.com/reference/clibrary/

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da JohnConnor
    per rispondere a oregon: volevo utilizzare la funzione ricorsiva per avere un codice più piccolo e "pulito"... anche perchè credo che con i cicli for annidati ce la dovrei fare ma non mi piace perchè non posso superare il numero prestabilito di caratteri!
    Un attimo ... hai detto "mi blocco appena devo fare il controllo" ... quindi ho capito che volessi effettuare il check della password appena generata con una funzione ricorsiva ...

    La funzione ricorsiva, invece, la vorresti utilizzare per "generare" la password non per "controllarla" ... ho capito bene?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    ogni volta che genera una nuova combinazione effettuare il controllo( il tuttto all'interno del ciclo for): se è uguale uscire dalla funzione perchè è stata trovata, se no continuare!

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da JohnConnor
    ogni volta che genera una nuova combinazione effettuare il controllo( il tuttto all'interno del ciclo for): se è uguale uscire dalla funzione perchè è stata trovata, se no continuare!
    Non mi hai risposto ... la funzione ricorsiva è per

    "generare una nuova combinazione"

    oppure

    "effettuare il controllo"

    ?

    A prescindere da tutto, tu come lo faresti? Cosa scriveresti?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Grazie celebron per memcmp!!

    La funziona ricorsiva è sia per generare la combinazione che per effettuare il controllo!!
    io avevo in mente una cosa del genere:
    codice:
    //(il vettore crack già inizializzato con tutti carartteri NULL)
    void attacco (char password[],char crack[],int lpass)
    {
        
        
        for(int i=0;i<lpass;i++){
            for(int j=0;j<=255;j++){
                   //controllo (se crack è diverso da password:
                     //              crack[i]++;
                       //         se crack è uguale a password chiudere il ciclo)
                 if (crack[i]==255) attacco(password[],crack[],lpass);
                    }
          }
    }
    ecco pensavo ad una cosa del genere.... so già che quello che ho scritto sopra è un ammasso di stupidaggini ma + o - è quello che mi è venuto in testa fino ad ora!!


    Questo codice (sotto) invece funziona anche se con qualche carattere particolare non va bene (sicuramente perchè non uso memcmp) ma fa il confronto tra caratteri della stessa posizione finchè non trova quello uguale e poi passa avanti, finchè non finisce la lunghezza della stringa.
    codice:
    void hackpass(char password[],char temp)
    		{
    			//adesso verrà trovata la password precedentemente inserita procedendo con un sistema di forza bruta, provando cioè tutte le possibili combinazioni!		
    			int lpass=strlen(password);
    	for(int i=0;i<lpass;i++){
    		for(int j=0;j<=password[i];j++){
    			if (j==password[i]){
    				cout<<(char(j));
    				temp[i]=j;
    				}
    			}
    		}
    	}

  10. #10
    Ragazzi ho scritto questo programmino... è combinato un pò meglio di quello che avevo postato precedentemente ma comunque non funziona perchè se ne va in loop stampando eresie! XD

    codice:
    #include <iostream>
    #include <string.h>
    #include <conio.h>
    using namespace std;
    
    
    int main()
    {
    	char pass[20],hack[20];
    	int lpass,ceck;
    	for(int j=0;j<21;j++){
    		hack[j]==(char(0));
    		}
    	for(int j=0;j<21;j++){
    		pass[j]==(char(0));
    		}	
    	cout<<"Inserisci la password:";
    	cin>>pass;
    	lpass=strlen(pass);
    	
    	
    		
    	do{
            int i=0;
            ceck=memcmp(pass,hack,lpass);
            if (ceck==0){cout<<"La password e' stata trovata:"<<hack;}
            else{
                  if (hack[i]<255){hack[i]=(char(0));}
                  else{
                       while(hack[i]==(char(255))){		
                                                   hack[i]=(char(0));
                                                   hack[i+1]++;
                                                   i++;
                                                   }
                                                   }
                                                   }
            }while(ceck=!0);
    	getch();
    	return 0;
    }
    l'ho compilato con dev-c++ versione 4.9.9.2, ed alla riga 28 mi dà questo errore:"[Warning] comparison is always true due to limited range of data type"....... mi spiegate che vuol dire??
    Heavy boots of lead
    Fills his victims full of dread
    Running as fast as they can
    Iron Man lives again!
    - Black Sabbath / Iron Man -

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.