Dopo il piccolo successo ottenuto dallo script che effettuava tutte le combinazioni possibili del codice ASCII per ritrovare il corrispondente testo in chiaro di un hash MD5 (vedi articolo http://www.guizzardi.net/?p=209), articolo che un sito di pseuso-hacker mi ha pure copiato, mha! , ho voluto fare la stessa cosa in Python 2.6 (con piccole modifiche si adatta anche alla versione 3.x).

In questa versione ho inserito la possibilità di eseguire prima un attacco dizionario e solo in un successivo tempo, se il primo non porta risultati, quello a forza bruta. L’attacco dizionario si basa sull’uso di un file di testo contenente l’elenco delle password più comuni (il file è disponibile liberamente in rete e potete integrarlo con nuove password).
Il Python si presta a questo genere di script poiché è molto versatile e facile da strutturare. Ovviamente ci sono online altri script di questo genere, per esempio alcuni interrogano i database online di parole già codificate ed evitano così di usare l’attacco a forza bruta, molto dispendioso in termini di tempo. Inoltre, nel mio codice non ho preso in considerazione il multi-threaded, cosa che invece sarebbe fondamentale per velocizzare i calcoli. Si potrebbe per esempio creare diversi thread assegnando a ciascuno solo un range di calcoli, per far questo Python mette a disposizione:
|
1 |
import threading |
Il programma è molto semplice, basta leggerlo per capire come funziona. E’ diviso in due parti, la prima parte nella funzione “Main” cerca nel file di testo il corrispondente testo in chiaro dell’hash passato, la seconda parte è la funzione “Combinazioni” che crea tutte le combinazioni dei caratteri ASCII (lo vedete chiaramente nella stringa), ne calcola l’MD5 e lo compara con quello da trovare.
Come sempre il codice lo trovate nella sezione Download.

Per sfruttare le possibilità dei processori multicore il modulo threading non è adatto: lancia più thread in parallelo, ma per via dell’intervento del GIL (Global Interpreter Lock) all’interno dell’interprete Python viene eseguito sempre un solo thread alla volta.
Un modo per superare questo limite è creare dei processi invece che thread grazie al modulo multiprocessing disponibile da Python 2.6:
import multiprocessing
l’ho scaricato ma ci sono solo 2 file in blocco note come si fa a avviare il programma?????
Uno è il programma in Python e l’altro è il dizionario. Installa Python e poi esegui il programma. Se vuoi aiutarti con un IDE puoi leggere anche il mio articolo “PSPAD come IDE per Python 2.6″ a questo link http://www.guizzardi.net/?p=387