Attacco dizionario e forza bruta di hash MD5 in Python

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:

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.

Related Posts with Thumbnails
Be Sociable, Share!
PDF Download    Invia l'articolo in formato PDF   

3 thoughts on “Attacco dizionario e forza bruta di hash MD5 in Python

  1. 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

Leave a Reply