Bruteforce

« Older   Newer »
 
  Share  
.
  1. Guglielmoqwerty
     
    .

    User deleted


    *non sapevo dove mettere le mie domande quindi ve lo spaccio per esercizio :asd: (già che ci siete se qualcuno trova un titolo migliore mi avverta :))

    Come si sa un Bruteforce è un programma che ha lo scopo di provare tutte le combinazioni possibili di password fino a trovare quella giusta.

    L'esercizio ora è: inserita dall'utente la password ad il set di caratteri utilizzato dall'aggressore (es solo lettere minuscole OR lettere minuscole e maiuscole OR lettere e caratteri speciali) calcolare il numero di combinazioni possibili prima di trovare la password dell'utente. (presupporre che il bruteforce lavori in modo lineare: a-->b--> [...] -->ab-->ac-->ad-->[...])

    Dubbi miei:
    1) Nel metodo lineare, che ordine e posizione hanno i caratteri speciali * { } @ etc...?
    2) In Java ogni carattere è un intero, funziona così anche per gli altri linguaggi?
    3) Qual'è la codifica più grande (tanto per rendere il programma completo e complicarmi la vita)
    4) In questo momento gli altri mi sfuggono (e pensare che fino ad un ora fa ero pieno, il mio solito cervello -_- )

    Buon Lavoro :)

    EDIT: mi ero dimenticato un pezzo, perché del numeri dei tentativi e basta non si ce ne fa niente:
    Immessa anche il la potenza di calcolo del computer restituire ogni dopo quanto tempo (in un unità di misura idonea) la password verrà trovata.
    L'utilità di questi programma é farsi un idea di ogni quanto cambiare la propria password :)

    Edited by Guglielmoqwerty - 21/6/2013, 12:50
     
    Top
    .
  2. Guglielmoqwerty
     
    .

    User deleted


    sopra

    (ed ho anche fatto un edit per rendere il programma meno inutile)
     
    Top
    .
  3.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    Potevi tranquillamente porre la domanda in algoritmi, se vuoi renderla una domanda puoi modificare il messaggio e lo sposto nella sezione corretta.

    Un bruteforce nel caso generale è un algoritmo che prova tutte le combinazioni possibili per giungere alla soluzione (non è praticamente mai la soluzione migliore, visto il tempo di calcolo).

    CITAZIONE
    Dubbi miei:
    1) Nel metodo lineare, che ordine e posizione hanno i caratteri speciali * { } @ etc...?
    2) In Java ogni carattere è un intero, funziona così anche per gli altri linguaggi?
    3) Qual'è la codifica più grande (tanto per rendere il programma completo e complicarmi la vita)
    4) In questo momento gli altri mi sfuggono (e pensare che fino ad un ora fa ero pieno, il mio solito cervello -_- )

    1) lineare in base a cosa? Lo chiami così solo perchè rispetta un determinato ordine suppongo. La posizione può essere scelta da te o puoi sfruttare ASCII.
    2) Non è in Java che ogni carattere è un numero, è per il PC che ogni carattere è un numero.
    3) la più grande dovrebbe essere la Unicode, contiene anche caratteri giapponesi e via dicendo. Se vuoi solo le lettere accentate ed i simboli (più ovviamente i caratteri normali) c'è quella a 8bit estesa, ISO-LATIN-1 (se non erro è questa). Ad ogni modo è composta da 8bit invece di 7 come ASCII.

    Se vuoi calcolare il numero di combinazioni possibili, non serve calcolarle tutte. Ad esempio con una password di 6 caratteri e le 26 lettere dell'alfabeto, ci sono 308.915.776 diverse combinazioni (ovvero 266), in quanto ogni "blocco" può essere formato da uno dei 26 caratteri. Capisci quindi che calcolare le possibili combinazioni e mostrarle diventa un grande problema temporale oltre che di memoria.

    Puoi sapere quanto tempo ci impiega facendo solo un tentativo con un alfabeto di N caratteri ed una password lunga K caratteri (c'è una formuletta anche qui che potrebbe tornare utile). Dipenderebbe dall'algoritmo stesso il tempo di calcolo, ma questo tipo di problema è nell'ordine di NK e non penso sia risolvibile in un tempo minore.
     
    Top
    .
  4. Guglielmoqwerty
     
    .

    User deleted


    QUOTE (RootkitNeo @ 21/6/2013, 16:08)
    1) lineare in base a cosa? Lo chiami così solo perchè rispetta un determinato ordine suppongo. La posizione può essere scelta da te o puoi sfruttare ASCII.
    2) Non è in Java che ogni carattere è un numero, è per il PC che ogni carattere è un numero.

    Ok, grazie per il chiarimento
    [QUOTE[]
    3) la più grande dovrebbe essere la Unicode, contiene anche caratteri giapponesi e via dicendo. Se vuoi solo le lettere accentate ed i simboli (più ovviamente i caratteri normali) c'è quella a 8bit estesa, ISO-LATIN-1 (se non erro è questa). Ad ogni modo è composta da 8bit invece di 7 come ASCII.

    Se vuoi calcolare il numero di combinazioni possibili, non serve calcolarle tutte. Ad esempio con una password di 6 caratteri e le 26 lettere dell'alfabeto, ci sono 308.915.776 diverse combinazioni (ovvero 266), in quanto ogni "blocco" può essere formato da uno dei 26 caratteri. Capisci quindi che calcolare le possibili combinazioni e mostrarle diventa un grande problema temporale oltre che di memoria.
    [/QUOTE]
    Non intendevo mostrare tutte le combinazioni possibili, solo il numero, teoricamente per avere il numero combinazioni si dovrebbe fare:

    nc*nct^p+nc*nct^(p-1)+[...]+nc*nct^0

    (nc è il numero del carattere nella sequenza, nct il numero totale dei caratteri e p la posizione del carattere nella password meno 1)

    ciao è per esempio (24 lettere italiane)
    3*26^3+9*26^2+1*26^1+13*26^0

    QUOTE
    Puoi sapere quanto tempo ci impiega facendo solo un tentativo con un alfabeto di N caratteri ed una password lunga K caratteri (c'è una formuletta anche qui che potrebbe tornare utile). Dipenderebbe dall'algoritmo stesso il tempo di calcolo, ma questo tipo di problema è nell'ordine di NK e non penso sia risolvibile in un tempo minore.

    Vero, in poche parole preso dall'idea ho trascurato tantissime cose, scusa. Avevo pensato che, per esempio, se un computer può fare 3000 operazioni al secondo (sparo un numero completamente a caso) allora potesse provare 3000 combinazioni in un secondo.
     
    Top
    .
  5.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    CITAZIONE
    Non intendevo mostrare tutte le combinazioni possibili, solo il numero, teoricamente per avere il numero combinazioni si dovrebbe fare:

    nc*nct^p+nc*nct^(p-1)+[...]+nc*nct^0

    (nc è il numero del carattere nella sequenza, nct il numero totale dei caratteri e p la posizione del carattere nella password meno 1)

    ciao è per esempio (24 lettere italiane)
    3*26^3+9*26^2+1*26^1+13*26^0

    Non ho capito che stai facendo. lol

    Teoricamente per il numero di combinazioni devi invece fare: N (alfabeto utilizzato) elevato a K (numero dei caratteri).
    Non capisco quindi che fai con il "ciao".


    CITAZIONE
    Vero, in poche parole preso dall'idea ho trascurato tantissime cose, scusa. Avevo pensato che, per esempio, se un computer può fare 3000 operazioni al secondo (sparo un numero completamente a caso) allora potesse provare 3000 combinazioni in un secondo.

    Eh no, non è così. ^^
     
    Top
    .
  6. Guglielmoqwerty
     
    .

    User deleted


    CITAZIONE (RootkitNeo @ 21/6/2013, 17:00)
    CITAZIONE
    Non intendevo mostrare tutte le combinazioni possibili, solo il numero, teoricamente per avere il numero combinazioni si dovrebbe fare:

    nc*nct^p+nc*nct^(p-1)+[...]+nc*nct^0

    (nc è il numero del carattere nella sequenza, nct il numero totale dei caratteri e p la posizione del carattere nella password meno 1)

    ciao è per esempio (24 lettere italiane)
    3*26^3+9*26^2+1*26^1+13*26^0

    Non ho capito che stai facendo. lol

    Teoricamente per il numero di combinazioni devi invece fare: N (alfabeto utilizzato) elevato a K (numero dei caratteri).
    Non capisco quindi che fai con il "ciao".

    Correggimi se sbaglio, ma se faccio N^K ottengo il numero massimo di combinazioni possibili con K caratteri (o se la parola fosse zz[...k volte]).

    Per arrivare a quella formula ho fatto il paragone con il binario:

    se ti do quattro bit ho 2^4 combinazioni (fino all' 1111), ma per arrivare a 1010 ho meno combinazioni 1*2^3+0*2^2+1*2^1+0*2^0=10 (che è il numero di combinazioni precedenti a 1010)

    Edited by Guglielmoqwerty - 21/6/2013, 21:24
     
    Top
    .
  7.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    CITAZIONE (Guglielmoqwerty @ 21/6/2013, 18:13) 
    Correggimi se sbaglio, ma se faccio N^K ottengo il numero massimo di combinazioni possibili con K caratteri (o se la parola fosse zz[...k volte]).

    Si. Usando due caratteri ed un alfabeto di 21 simboli avresti 21*21 (21^2). Quindi aa, ab, ac, ...., az, ba, bc, bd, ...., bz, e via dicendo.

    CITAZIONE
    Per arrivare a quella formula ho fatto il paragone con il binario:

    se ti do quattro bit ho 4 combinazioni (fino all' 1111), ma per arrivare a 1010 ho meno combinazioni 1*2^3+0*2^2+1*2^1+0*2^0=10 (che è il numero di combinazioni precedenti a 1010)

    No un attimo, non facciamo confusione. Con 4bit puoi rappresentare 2^4=16 combinazioni diverse.

    Non capisco il discorso del binario con le combinazioni di lettere che puoi avere. Se ad esemio viene inserito l'alfabeto di 21 caratteri con una password di 15 caratteri, quanti combinazioni hai?
     
    Top
    .
  8. Guglielmoqwerty
     
    .

    User deleted


    [QUOTE
    ]No un attimo, non facciamo confusione. Con 4bit puoi rappresentare 2^4=16 combinazioni diverse.
    [/QUOTE]
    Sì sì, ho sbagliato a scrivere, volevo scrivere 2^4=16 ma ho perso un paio di caratteri :unsure:
    CITAZIONE
    Non capisco il discorso del binario con le combinazioni di lettere che puoi avere. Se ad esempio viene inserito l'alfabeto di 21 caratteri con una password di 15 caratteri, quanti combinazioni hai?

    Con 15 caratteri ho 26^15 combinazioni possibili, ma se la password è aaaaaaaaaaaaaaaa e procedo in ordine (a-->b-->c etc) quando arrivo ad aaaaaaaaaaaaaaaa mi fermo ed escludo tutte le combinazioni dopo di essa, come aaaaaaaaaaaaaaab o aaaaeaadaaahaaar, quindi sono meno di 26^15 :)
     
    Top
    .
  9.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    CITAZIONE
    Sì sì, ho sbagliato a scrivere, volevo scrivere 2^4=16 ma ho perso un paio di caratteri :unsure:

    Ah okay! ^^


    CITAZIONE
    Con 15 caratteri ho 26^15 combinazioni possibili, ma se la password è aaaaaaaaaaaaaaaa e procedo in ordine (a-->b-->c etc) quando arrivo ad aaaaaaaaaaaaaaaa mi fermo ed escludo tutte le combinazioni dopo di essa, come aaaaaaaaaaaaaaab o aaaaeaadaaahaaar, quindi sono meno di 26^15 :)

    Facciamo un esempio più semplificato, una password di 7 caratteri. Supponiamo che io come password inserisco "aaaaaba". Mostrami quelle generate dal tuo programma che hai in mente per giungere a questa password.
     
    Top
    .
  10. Guglielmoqwerty
     
    .

    User deleted


    CITAZIONE (RootkitNeo @ 21/6/2013, 23:14)
    Facciamo un esempio più semplificato, una password di 7 caratteri. Supponiamo che io come password inserisco "aaaaaba". Mostrami quelle generate dal tuo programma che hai in mente per giungere a questa password.

    IL programma calcolerebbe queste: a,b,c,d [...] aa, ab, ac, ad [..], zzzzzz, aaaaaaa, aaaaaba. (fine)
     
    Top
    .
  11.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    In questo modo valuteresti molte combinazioni inutili.
    Non ho soluzioni buone, ma senza pensarci molto al momento farei:
    CODICE
    aaaaaaa
    aaaaaab
    aaaaaac
    aaaaaad
    ..............
    aaaaaaz
    aaaaaba


    visto che la lunghezza è 7 caratteri.
     
    Top
    .
  12. Guglielmoqwerty
     
    .

    User deleted


    Già, ma un bryteforce non parte da un carattere? Penso che l'attaccante non possa sapere in anticipo quanto sia lunga la password (o mi sbaglio?)
     
    Top
    .
  13.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    Sisi, quello è vero pensavo ad altro scusa.

    Secondo me richiede troppe risorse, ma puoi sempre provarci. Inizia a scrivere qualcosa, se hai problemi posta il codice in una nuova discussione.
     
    Top
    .
  14. Guglielmoqwerty
     
    .

    User deleted


    Non capisco il perché secondo te richieda troppe risorse, il programma non genera realmente tutte le possibili combiazioni, ottiene il risultato con una formula.
     
    Top
    .
  15.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    Se vuoi mostrare il numero è "banalmente" l'applicazione della stessa regola di cui parlavo prima, applicata più volte (sommando i vari risultati). Ovvero, sai che con una password di 2 caratteri hai N^2 combinazioni, quindi N^2 + N^3 etc. Il problema è che in questo caso non sai effettivamente quali sono, conosci solo quante sono (quindi non capisco come ti fermi quando hai trovato quella corretta).
     
    Top
    .
15 replies since 19/6/2013, 17:33   188 views
  Share  
.