[ Nikola Medić @ 25.01.2011. 14:17 ] @
Pozdrav ljudi. Pored što znam Flex, PHP, CSS, HTML, XML i ostale, odlučio sam da počnem da učim Python. Ovaj programčič pomoću brute-forcea pokušava da nadje pravu vrednost s kojom je korišćeno da se generiše MD5 vrednost.

Prvo unesete već generisanu MD5 vrednost, unesete koliko je moguće da vrednost ima karaktera i s kojim slovima želite da pronađete tu vrednost.

Sve primerke koje budem pravio u Python-u ću postaviti ovde. Uživajte ! :)

Napomena : Ovaj program je napravljen za edukativne svrhe i nije korišćeno za probijanje lozinki.
Code:
import hashlib
import random

def generateRandomHash(passLength):    
    i = 0
    generatedHashChars = ""
    if (int(passLength) != 0):
        while(i <= int(passLength) - 1):
            num = random.random() * len(chars)
            roundNum = int(round(num))
            if (roundNum < len(chars)-1):
                generatedHashChars += chars[roundNum]
            i = i + 1
        generatedHash = hashlib.md5(generatedHashChars).hexdigest()
        global globalGeneratedHashChars 
        globalGeneratedHashChars = generatedHashChars
    else:
        generatedHash = 0

    return generatedHash

def run(passLength):
    generatedHash = generateRandomHash(passLength)
    while (hashedValue  != generatedHash):
        print generatedHash
        generatedHash = generateRandomHash(passLength)
    print ""
    print "Code cracked: " + globalGeneratedHashChars
    print ""
    raw_input("Press ENTER to exit")

print " -- MD5 Brute-force cracker by Nikola Medic -- "
print " -- This program is made for educational purpose -- "
print " -- and not used for hacking ! -- "
print ""
hashedValue = raw_input("Enter hashed value: ")
length = raw_input("Enter possible code length: ")
chars = raw_input("Enter possible characters: ")
run(length)

[ alex @ 27.01.2011. 15:44 ] @
Na prvi pogled, tvoj program je veoma "ne-pajtonski", s nepotrebnim deklaracijama varijabli i while petljama.

Recimo, deo kôda u generateRandomHash():
Code:

i = 0
if (int(passLength) != 0):
    while(i <= int(passLength) - 1):


Se vrlo lako moze zameniti sa jednom linijom:
Code:

for i in range(passLength - 1):


Takodje, ja bih globalne varijable izbegavao, jer samo unose konfuziju (kao sto Zen of Python kaze, Lep kôd je mnogo bolji od ruznog kôda).

Nemoj ovo shvatiti kao negativnu kritiku - python je veoma elegantan jezik i omogucava programerima da pisu elegantan i elegantno funkcionalan kôd. Nemoj direktno prepisivati PHP ili kôd iz nekog drugog jezika; poenta je da napises kôd koristeci sve prednosti programskog jezika.

Srecno ucenje Python jezika! Videces, neces zazaliti sto si poceo da ga ucis.

Poz,
alex.
[ Nikola Medić @ 27.01.2011. 22:48 ] @
Ma znam, zato sam i rekao da sam tek poceo da učim Python. Samo sam čisto hteo da se poigram sa nekim komandama. Ja inače dosta godina radim u PHP i AS3 ( pored toga i HTML, CSS, XML... ), pa sam odlučio da učim neki standardni programski jezik. Hteo bih da napravim aplikaciju koja ce biti kao web server. Prvo sam mislio da počnem da učim C++, ali trebalo bi mi dosta dugo vremena da učim to, pa su mi neki preporučili da koristim Python. Kao što rekoh, ja ću sve primere koje sam pravio postaviti ovde, pa ako mislite da sam negde pogrešio, samo slobodno bacite komentar. Pozdrav !
[ Danilo Cvjeticanin @ 28.01.2011. 07:41 ] @
Zasto pravis MD5 bruteforce cracker? Za sta ce ti ? Toliko online resenja ima koja su mnogo,mnogo,mnogo brza,nego na svom racunaru raditi nesto slicno.
[ alex @ 28.01.2011. 12:59 ] @
Danilo, zasto da ne? Mislim da uopste nije bitno da li je moguce naci resenja na netu - bitno je da Nikola hoce da nauci Python jezik. Najbrzi i najlaksi nacin da se nauci neki jezik je putem resavanja konkretnih problema (najbolje problema koji sâm imas) ili nekih zanimljivih apstraktnih problema. Pisanje "hello, world" programa je bezveze. :)

-alex
[ Danilo Cvjeticanin @ 28.01.2011. 13:28 ] @
Ok, postujem, pozdravljam kada neko napravi neki program, kada hoce da uci. Sve je to ok, ali zasto bas MD5 bruteforce, to me zanima,zna se zasta sluzi...
[ alex @ 28.01.2011. 14:23 ] @
To stoji, da - zasto bas ta vrsta programa?

Svi smo mi tokom svog zivota zeleli da budemo hakeri, ne mora da znaci da je neki kriminal u pitanju (narocito jer je, kao sto si rekao, moguce online naci gotovu verziju)..

[ Nikola Medić @ 28.01.2011. 16:00 ] @
Ako želite iskren odgovor, nisam napravio zato što želim biti haker ( niti ću ikada biti ), nego zato što mi je to palo nekako na pamet. Ja sam oduvek voleo da se bavim enkripcijom i dekripcijom. To je opet dobra stvar jer možes sam napraviti svoj sistem za šifrovanje :)
[ Danilo Cvjeticanin @ 28.01.2011. 17:10 ] @
Onda je bolje da si napravio za kriptovanje :)

U svakom slucaju, nije lose.