Buna ziua doamnelor si domnilor si bine v-am regasit. Ma numesc Zero Davila, iar astazi vom scrie un md5 hash crack in python. In caz ca nu stiti ce e md5, e un algoritm criptografic denumit Message Digest Algorythm 5, si a fost inventat de Ronald Rivest in ’91. Ideea din spatele algoritmului e de a prelua date, fie text sau binar, si indiferent de lungimea datelor la intrare,algoritmul va genera un hex de fix 32 de caractere, care e cunoscut drept hash md5. Algoritmul de obicei e folosit la identificarea fisierelor, avand in vedere ca hash-ul va fi unicat, chiar daca doua fisiere au aceiasi marime si sunt de acelasi tip, si la verificarea integritatii lor. Daca am un fisier pe un server de linux, ii pot lua hash-ul folosind comanda md5sum. Apoi dupa ce fisierul e copiat pe masina mea locala, pot folosi aceiasi metoda. Daca cele doua hash-uri nu sunt identice, inseamna ca fisierul a fost corupt in timpul download-ului. Asta
ne poate indica ca avem o conexiune instabila, poate indica o infectie cu malware, sau un atac intentionat din partea unei persoane fizice.
import hashlib
import os
import sys
import datetime
startTime = datetime.datetime.now()
def error(msg) : print „[!] – ” + msg
def errorExit(msg) : raise SystemExit(„[!] – ” + msg)
def md5(string) : return hashlib.md5(string).hexdigest()
def xpermutation(characters, size):
if size == 0:
yield []
else:
for x in xrange(len(characters)):
for y in xpermutation(characters[:x] + characters[x:], size – 1):
yield [characters[x]] + y
def bruteForce(hash):
attempt = 0
characters = list(‘abcdefghijklmnoprstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789’)
maxLength = xrange(0,25)
stringBuilder = ”
for length in maxLength:
for x in xpermutation(characters, length):
permutation = stringBuilder + ”.join(x)
attempt = attempt + 1
if md5(permutation) == hash:
end_time = str(datetime.datetime.now() – startTime).split(‘.’)[0]
print ‘[‘ + str(attempt) + ‘] – ‘ + permutation + ‘ – CRACKED! Durata procesului ‘ + end_time
raw_input(‘\nApasa <ENTER> pentru EXIT…’)
sys.exit()
else:
print ‘[‘ + str(attempt) + ‘] – ‘ + permutation
errorExit(‘MD5 Crack esuat.’)
if os.name == ‘nt’ : os.system(‘cls’)
else : os.system(‘clear’)
if sys.version_info.major != 2 or sys.version_info.minor != 7:
errorExit(‘Necesitat versiunea 2.7 de Python!’)
if len(sys.argv) == 2:
if len(sys.argv[1]) == 32 and sys.argv[1].isalnum():
bruteForce(sys.argv[1])
else:
error(‘Hash MD5 invalid.’)
errorExit(‘Utilizare : md5_crack.py [HASH]’)
else:
error(‘Argumentele necesare scriptului nu au fost gasite.’)
errorExit(‘Utilizare : md5_crack.py [HASH]’)