PROBLEMA BRUTE FORCE INTELLIGENTE

Pubblicità
Il ciclo for è infatti proprio figlio di C... :P Addirittura puoi anche mettere in piedi sul risultato un controllo del tipo :
if
... In PASSWORD sono presenti le substringhe "querty" AND ("io" OR "oi") AND ("op" OR "po") AND....
Allora accetta il risultato. Es salva o stampa.

Si, giustamente con alcune condizioni if sull'output dei vari cicli for, si filtra il risultato finale. Anche perchè, se non sbaglio, con un algoritmo del genere si stamperebbero m^n stringhe (m corrisponde alla quantità degli elementi della lista, n al numero di caratteri della stringa generata) e considerando tutti i vari caratteri alfanumerici maiuscoli e minuscoli, la quantità finale di stringhe generate sarebbe davvero mostruosa.

Ad ogni modo, per interfacciare questo algoritmo con un software di terze parti azzardo a dire che un ipoteticamente possibile approccio potrebbe essere l'utilizzo dei suoi API, sempre qualora lo sviluppatore li distribuisca. Nel mio caso, ad es. utilizzo un'applicazione per DSP i cui progetti possono essere tranquillamente utilizzati ed interpretati correttamente anche da un altro paio di altri software, grazie all'API.
 
Ultima modifica:

sarò stronzo io ma non sono riuscito ad avviare il download, ma ad ogni modo mi ero precedentemente informato e più fonti diverse dicevano che non esistevano programmi che potessero aggirare bitlocker e l'unica era provare il brute force

vi aggiorno sulla situazione dopo che ho fatto il programmino che scrive le possibili combinazioni e sbatto concretamente la testa contro il problema :muro:
 
Mi permetto di riaprire un attimo questa discussione per correggere una caz***a colossale da me detta nei giorni scorsi. Infatti, nella mia prima risposta dissi, riguardo alla tecnica del Brute Force, che il processo di generazione "non necessita affatto tanto tempo". Purtroppo però, la realtà dei fatti dimostra l'esatto contrario, soprattutto se, come qui è stato detto, si vogliano generare stringhe della lunghezza di 13 caratteri. Mi spiego meglio: visto che ritengo interessantissimo l'argomento qui trattato, in questi giorni mi sono informato meglio riguardo al metodo del Brute Force, alla sua implementazione, ecc. e mi sono pure permesso, nonostante non sia un vero e proprio programmatore, di scrivere un paio di script per testare quanto tempo un algoritmo di questo tipo possa necessitare per portare a compimento l'intero compito. Il risultato di questi test dimostra che le tempistiche di impiego non crescono linearmente rispetto al risultato prodotto: in altre parole, se dovessi ad esempio, generare delle stringhe da 6 caratteri, il tempo impiegato dall'algoritmo non equivalrebbe precisamente al doppio di quello che si impiegherebbe per generarle con solo 3 caratteri. Quindi, se in quest'ultimo caso il mio script impiega circa 15 secondi per generare tutte le possibili combinazioni, per generare tutte quelle che ne contengono 10 il tempo necessario si avvicina a 1,5 milioni di anni. Sicuramente con computer più performanti ed utilizzando linguaggi per programmare a più basso livello le tempistiche scenderebbero ma si continuerebbe comunque a parlare di anni, come unità temporale. Scusate, quindi, ancora una volta per lo sfondone e di nuovo in bocca al lupo all'autore di questa discussione.

EDIT
Non so se il regolamento di questo forum lo permette, però per chi vuole approfondire l'argomento su richiesta posso inviare entrambi gli script: il primo è stato scritto utilizzando Batch mentre il secondo utilizzando Python 2.7.
 
Ultima modifica:
certo il tempo non e' multiplo bensi subisce una crescita esponenziale... solo che 1.5 milioni di anni per stringhe a 10 cifre mi sembrano leggermente sovrastimati

facendo un rapido calcolo con calc mi vengono 105giorni circa :-)
 
Ultima modifica:
Aggiungo il problema di inserire fisicamente la stringa generata per vedere se funziona.
Visto che non siamo in una puntata di CSI, quello come lo fareste ?
 
certo il tempo non e' multiplo bensi subisce una crescita esponenziale... solo che 1.5 milioni di anni per stringhe a 10 cifre mi sembrano leggermente sovrastimati

facendo un rapido calcolo con calc mi vengono 105giorni circa :-)
Posso chiederti velocemente che calcolo hai fatto per ottenere questo risultato? Perchè è completamente diverso da quello che io ho ottenuto...
 
Mi permetto di riaprire un attimo questa discussione per correggere una caz***a colossale da me detta nei giorni scorsi. Infatti, nella mia prima risposta dissi, riguardo alla tecnica del Brute Force, che il processo di generazione "non necessita affatto tanto tempo". Purtroppo però, la realtà dei fatti dimostra l'esatto contrario, soprattutto se, come qui è stato detto, si vogliano generare stringhe della lunghezza di 13 caratteri. Mi spiego meglio: visto che ritengo interessantissimo l'argomento qui trattato, in questi giorni mi sono informato meglio riguardo al metodo del Brute Force, alla sua implementazione, ecc. e mi sono pure permesso, nonostante non sia un vero e proprio programmatore, di scrivere un paio di script per testare quanto tempo un algoritmo di questo tipo possa necessitare per portare a compimento l'intero compito. Il risultato di questi test dimostra che le tempistiche di impiego non crescono linearmente rispetto al risultato prodotto: in altre parole, se dovessi ad esempio, generare delle stringhe da 6 caratteri, il tempo impiegato dall'algoritmo non equivalrebbe precisamente al doppio di quello che si impiegherebbe per generarle con solo 3 caratteri. Quindi, se in quest'ultimo caso il mio script impiega circa 15 secondi per generare tutte le possibili combinazioni, per generare tutte quelle che ne contengono 10 il tempo necessario si avvicina a 1,5 milioni di anni. Sicuramente con computer più performanti ed utilizzando linguaggi per programmare a più basso livello le tempistiche scenderebbero ma si continuerebbe comunque a parlare di anni, come unità temporale. Scusate, quindi, ancora una volta per lo sfondone e di nuovo in bocca al lupo all'autore di questa discussione.

EDIT
Non so se il regolamento di questo forum lo permette, però per chi vuole approfondire l'argomento su richiesta posso inviare entrambi gli script: il primo è stato scritto utilizzando Batch mentre il secondo utilizzando Python 2.7.

Certo! Perchè è un fattoriale quella del calcolo del numero di combinazioni possibili!
https://it.wikipedia.org/wiki/Fattoriale
Come vedi con il numero 3 hai sei possibili combinazioni. Con 6 diventano 720, quindi 120 volte! ;) xD
 
Certo! Perchè è un fattoriale quella del calcolo del numero di combinazioni possibili!
https://it.wikipedia.org/wiki/Fattoriale
Come vedi con il numero 3 hai sei possibili combinazioni. Con 6 diventano 720, quindi 120 volte! ;) xD
Non ti seguo: vorresti dire che se volessi generare tutte le possibili combinazioni lunghe 3 caratteri, il risultato sarebbe 3! = 6 possibili combinazioni?
 
esatto.
per il calcolo, mi hai detto che per 3 caratteri il sistema impiega 15 secondi a calcolare 6 possibili combinazioni, giusto? quindi per calcolare una combinazione il sistema impiega 2.5sec (=15/6). fin qui
dovrebbe essere tutto chiaro.
una stringa di 10 caratteri genera 10! combinazioni,
ovvero detto in altri termini 10×9×8×7×6×5×4×3×2x1
=3628800 combinazioni. Il
tempo unitario era 2.5sec; quindi 3628800×2.5
=9072000 sec e' il tempo
totale. Si esegue quindi una conversione, dunque 9072000/60(sec)/60(min)/24(ore) si ottengono 105 giorni.

In realta' contiene dei grossi errori ed e' un tempo molto
sovrastimato perche':
- nei 15 secondi che il sistema impiega per trovare 3 soluzioni il sistema compie delle azioni di contorno (es. allocazione memoria, trasferimento dati dalla memoria alla cpu, comunizioni del dato all'output...). Il tempo che la cpu effettivamente impiega ad effettuare il calcolo sara' non so di 6 sec forse;
- il tempo poi sicuramente dipende dalla cpu (marca, modello e tecnologia di funzionamente)
- c'e' poi da considerare che tutte le moderne cpu non funzionano sempre a pieno regime, ma per la maggiorparte del tempo funzionano in modalita' di risparmio energetico, ma se esegui un applicativo pesante il sistema attinge al resto dei core che non usa o aumenta la frequanza a seconda del tipo, in soldoni il tempo di calcolo si riduce a 3 sec. quindi 0,5 sec per combinazione. Rifacendo il calcolo ti vengono 21 giorni.
Attenzione pero' che io ho sparato dei numeri... che comunque cosi' a occhio sinceramente mi pare sempre molto esagerato. Il funzionamento di una cpu moderna e' molto molto complesso.
Quei 15 sec con quale linguaggio l'hai ottenuto? per avere dei paragoni hai rieseguito un programma in C?
 
Pubblicità
Pubblicità
Indietro
Top