Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C] Banali errori

  1. #1

    [C] Banali errori

    Allora, ho un problema per molti stupido, penso... allora, io ho fatto un piccolo programma che effettua un semplicissimo brute force su un hash MD5 fornito dall'utente. Il problema è che, in fase di compilazione, tale programma mi da degli errori che non riesco a capire.

    Tali errori sono:
    prova_crittografia.c: In function `main':
    prova_crittografia.c:22: error: incompatible types in assignment
    prova_crittografia.c:25: warning: passing arg 2 of `strcat' makes pointer from integer without a cast
    prova_crittografia.c:29: error: incompatible types in assignment

    Questo invece è il codice del programma. Premetto che ho spulciato il codice, guardato su Internet, sulle pagine del man... ma non sono venuto a capo di niente!

    codice:
    #include <stdio.h>
    #include <openssl/md5.h>
    #include <time.h>
    #include <math.h>
    #include <stdlib.h>
    #include <string.h>
    
    char pass[10], hash[100], hashcreato[100];
    char all[]={'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'z', 'y', 'x', 'j'};
    
    unsigned int lunghezza=3, lunghezza2, posizione;
    unsigned long int tentativi, longpass;
    
    int main(){
    printf("Insert the hash: ");
    scanf("%s", &hash);
    srand(time(NULL));
    	tentativi=pow(26, lunghezza);
    	while(lunghezza > 0){
    		lunghezza2=lunghezza;
    		while(tentativi > 0){
    			pass="";
    			while(lunghezza2>0){
    			posizione=rand() % 25;
    			strcat(pass, all[posizione]);
    			lunghezza--;
    			}
    		longpass = sizeof(pass);
    		hashcreato= MD5(pass, longpass, NULL);
    		if((strcmp(hashcreato, hash)) == 0){ printf("PASSWORD FOUND! The password is: %s", pass); exit(0);}
    		tentativi--;
    		}
    	lunghezza--;
    }
    return 0;
    }
    Se riuscite ad aiutarmi mi fate un favore immenso
    Powered by Linux

    "Windows cerca di fare Unix e ci riesce male, Red Hat cerca di fare Windows e ci riesce benissimo" (Jimmy Olgeni)

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non puoi scrivere

    pas="";

    semmai

    pass[0]='\0';

    e non puoi usare il vettore all con la strcat dato che non sono stringhe.

    Il ciclo dovrebbe essere qualcosa di simile

    codice:
    	int ix=0;
    
    	while(lunghezza>0)
    	{
    		pass[ix++]=(rand() % 25)+'a';
    		lunghezza--;
    	}
    
    	pass[ix]='\0';
    e tieni presente che se controlli il ciclo decrementando la variabile lunghezza, non puo' esserci un'altra variabile all'interno dell'espressione della while.

    Se i caratteri sono sempre lettere in ordine alfabetico, l'array all non serve.

  3. #3
    Quel ciclo se ho ben capito inserisce lettere minuscole o numeri a caso nell'array fino alla conclusione del ciclo... perchè il mio obiettivo sarebbe fare il programma configurabile in modo che uno potrebbe condurre l'attacco con solo numeri, con solo lettere o entrambi. Magari in futuro metterò anche i simboli, ma per adesso vorrei vedere come fare a svilupparlo in questo modo (è la prima volta che faccio un programma di brute force, compatitemi ).
    Powered by Linux

    "Windows cerca di fare Unix e ci riesce male, Red Hat cerca di fare Windows e ci riesce benissimo" (Jimmy Olgeni)

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Il ciclo serve ad inserire solamente lettere minuscole a caso.

    Se vuoi lavorare anche con i simboli e altri caratteri, allora, come ti ho detto prima, devi usare l'array ...

    P.S. Il fatto non e' che stai facendo per la prima volta un programma simile ma che non hai molta esperienza con il C ...

  5. #5
    Di sicuro è anche per quello che ho delle difficoltà però vorrei imparare certi meccanismi intanto che faccio un poco d'esperienza.

    Non ho capito bene la cosa dell'usare l'array... intendi cioè che devo raggruppare tutto ciò che voglio usare per il brute force (numeri, lettere, simboli) in un array e sceglierne a caso la posizione da inserire in un altro vettore stringa? Cioè un lavoro del tipo:

    int random, x=0;

    int main(){

    char vettore[8]; /*presupponendo sia 8 la lunghezza della password*/

    char elementi[]={MIEI_ELEMENTI};

    while (posizione > 0){

    random = rand() % 61;

    vettore[x] = elementi[random];

    x++;

    posizione--;

    }

    return 0;

    }

    Poi non posso usare vettore (che è il mio vettore stringa in cui ho messo gli elementi presi a caso da elementi[]) in un strcat visto che è una stringa? Può essere un'idea o secondo te ho "toppato"?
    Powered by Linux

    "Windows cerca di fare Unix e ci riesce male, Red Hat cerca di fare Windows e ci riesce benissimo" (Jimmy Olgeni)

  6. #6
    Ho risolto il problema, il ciclo che ho inserito ha funzionato alla perfezione

    Ora però ho un'altro problema: se cerco di stampare a video il digest di una password che faccio non mi viene fuori un hash MD5 normale, ma bensì dei simboli strani scritti anche con dei ritorni a capo! Ho provato anche con fputs e puts invece di printf, ma non c'è stato nulla da fare. Che sia un problema di codifica? Devo forse fare un cast per visualizzare l'hash MD5 correttamente?
    Powered by Linux

    "Windows cerca di fare Unix e ci riesce male, Red Hat cerca di fare Windows e ci riesce benissimo" (Jimmy Olgeni)

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.