slacky Skrevet 31. oktober 2011 Del Skrevet 31. oktober 2011 (endret) Noen som vet en måte å forbedre skriptet under? Synes det var usansynlig tregt å finne koden, det blir litt som bruteforce, men jeg leker meg bare - Det tar mellom noen sekunder til 10-talls minutter å finne en firsifra kode.. Denne er sinnsykt treg, sammelignet med en ligende jeg laget i php.. :s import string import time from random import choice pw = "" cnt = "1" first_time = time.time() last_time = first_time while cnt == "1": size = 4 pw = ''.join([choice(string.letters + string.digits) for i in range(size)]) print pw if pw == "3ee6": print "hacked! key is", pw new_time = time.time() print "time used in sec:", (new_time - last_time) cnt = "2" Føler meg ganske ny i python, så jeg klarer nok ikke kode noe avanserte greier. Men ser for meg at dette blir veldig avansert om den skal bli god..? Endret 31. oktober 2011 av tROOP4H Lenke til kommentar
slacky Skrevet 31. oktober 2011 Forfatter Del Skrevet 31. oktober 2011 (endret) Laget et tilsvarende script i php (dette språket kan jeg..).. Gikk frem på en litt annen måte, hadde et md5-password (langden var 6-sifret. a-z0-9), som jeg skulle brute-force, det tok knapt 6 minutter på min maskin. På en kjerne (ellers må en få til et multithread system) Nå forsøker jeg å løse et syvsifret passord, regner med at det tar ca 5 timer. Da det er 32 millarder kombinasjoner. (a-z0-9) Ikke store bokstaver nå, da hadde tallet vært 100 ganger så mye større, og dermed tatt ~en måned.. Var ikke like lett i python Endret 31. oktober 2011 av tROOP4H Lenke til kommentar
etse Skrevet 31. oktober 2011 Del Skrevet 31. oktober 2011 (endret) koden din gjetter det samme passordet flere ganger, da den lager tilfeldige koder hele tiden. Du burde gå systematisk slik at hver kode blir kun gjettet en gang. Du skriver og ut hvert enkelt passord på skjermen, noe som også stjeler veldig mye tid. Å skrive ting på skjermen er en relativt tung oppgave. Legger og merke til at du bruker string.letters og ikke string.ascii_letters, du har altså med masse spesial-tegn? Dette er intentional? Med å bruke alle tegnene du tillater har du 332.150.625 mulige løsninger, mens med kun ascii_letters reduserer du problemet til 14.776.336, altså har du kun 1/20 så stort problem som vanlig. Lager meg en eksempel kode import time as t, string as s def bruteforce(secret, letters): start_time = t.time() guess_list = [0] guess = letters[0] while secret != guess: # Generate a new password pos = 0 generating = True while generating: if pos == len(guess_list): guess_list += [0] generating = False else: guess_list[pos] += 1 if guess_list[pos] == len(letters): guess_list[pos] = 0 pos += 1 else: generating = False # Make the password from a list to a string guess = "".join([letters[x] for x in guess_list]) print "Used %f seconds" % (t.time() - start_time) if __name__ == '__main__': print "With ascii+digits:", bruteforce("09ef", s.ascii_letters + s.digits) print "With all letters:", bruteforce("09ef", s.letters + s.digits) Output: With ascii+digits: Used 1.362000 seconds With all letters: Used 73.262000 seconds Husk: >>> import string as s >>> print s.letters ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzƒŠŒŽšœžŸªµºÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ >>> print s.ascii_letters abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ Om jeg reduserer til å kun bruke lower-case bokstaver + tall, så ender jeg opp med å løse problemet på 0.3 sekunder i python, og 5 tegn på cirka 12.3 sekunder. Endret 31. oktober 2011 av etse 1 Lenke til kommentar
slacky Skrevet 31. oktober 2011 Forfatter Del Skrevet 31. oktober 2011 (endret) Det var ikke planen å bruke alle tegnene, nei. Men, klarer ikke forstå hvordan du går frem for å ikke gjenta samme passordet..? Uansett, mange takk for et supert script! Funker jo rimelig bra, får bare forsøke å skjønne noe som helst av det du har gjort der.. Skjønner nok etter litt lesing og 5 tegn på cirka 12.3 sekunder. - Brukte bare 9 sekunder til meg, på en liten 3.6GHz AM3-cpu:) Skulle bare fått til å multithreade i python, så hadde det vært ekstra gøy for dem som har 2-4-6 eller 8 kjerner. - Vet det er mulig, og jeg skal se nermere på alt senere.. Endret 31. oktober 2011 av tROOP4H Lenke til kommentar
etse Skrevet 31. oktober 2011 Del Skrevet 31. oktober 2011 du plukker et tilfeldig passord som du generer tilfeldig. Og da er det veldig sansynlig at over tid vil du teste samme passord veldig mange ganger. Forskjellen jeg gjør er at jeg går veldig systematisk: Begynner med AAAA, tester så AAAB, AAAC, AAAD osv. Lenke til kommentar
Terrasque Skrevet 31. oktober 2011 Del Skrevet 31. oktober 2011 Skulle bare fått til å multithreade i python, så hadde det vært ekstra gøy for dem som har 2-4-6 eller 8 kjerner. - Vet det er mulig, og jeg skal se nermere på alt senere.. http://docs.python.org/library/multiprocessing.html Forresten, så er ascii_letters og letters samme string her, python 2.7.2 på ubuntu.. Og så har man pypy: terra@terra-MS-7238:~/projects/pypy$ python test-brute.py With ascii+digits: Used 20.906091 seconds to find '09efa' terra@terra-MS-7238:~/projects/pypy$ ./pypy-1.6/bin/pypy test-brute.py With ascii+digits: Used 8.076241 seconds to find '09efa' Lenke til kommentar
slacky Skrevet 31. oktober 2011 Forfatter Del Skrevet 31. oktober 2011 (endret) du plukker et tilfeldig passord som du generer tilfeldig. Og da er det veldig sansynlig at over tid vil du teste samme passord veldig mange ganger. Forskjellen jeg gjør er at jeg går veldig systematisk: Begynner med AAAA, tester så AAAB, AAAC, AAAD osv. Da skjønner jeg! Klarte bare ikke se det Laget en ligende variant i php da. $hash = md5("aaaaa"); $length = 5; define('HASH', $hash); $charset = 'abcdefghijklmnopqrstuvwxyz'; $charset .= '0123456789'; //$charset .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; //$charset .= '~`!@#$%^&*()-_\/\'";:,.+=<>? '; //----->-----------------------------------<-----// $charset_length = strlen($charset); $startTime = microtime(true); function check($password) { if (hash('md5', $password) == HASH) { global $startTime; $endTime = microtime(true); echo '<br />Match found: '.$password."\r\n"; echo "<br />Time used:"; echo $endTime-$startTime; exit; } } function run($width, $position, $base_string) { global $charset, $charset_length; for ($i = 0; $i < $charset_length; ++$i) { if ($position < $width - 1) { run($width, $position + 1, $base_string . $charset[$i]); } check($base_string . $charset[$i]); } } echo 'Target: '.HASH."\r\n"; run($length, 0, ''); echo "No match found!"; Her bruker jeg en md5-nøkkel som "utgangspunkt" (bare for å teste). Skal teste ut pypy, i ditt tilfelle så er den over 100% raskere, noe som er sinnsykt! Endret 31. oktober 2011 av tROOP4H Lenke til kommentar
etse Skrevet 31. oktober 2011 Del Skrevet 31. oktober 2011 Forresten, så er ascii_letters og letters samme string her, python 2.7.2 på ubuntu.. Dette kan godt være, men vil anbefale å bruke ascii_letters over _letters i slike oppgaver string.lettersThe concatenation of the strings lowercase and uppercase described below. The specific value is locale-dependent, and will be updated when locale.setlocale() is called. string.ascii_letters The concatenation of the ascii_lowercase and ascii_uppercase constants described below. This value is not locale-dependent. Lenke til kommentar
snippsat Skrevet 2. november 2011 Del Skrevet 2. november 2011 (endret) Kjørte bare en par tester med koden til etse. bruteforce("09efa", s.letters + s.digits) #Used 12.666000 seconds normal #Used 5.646000 seconds psyco #Used 4.8 seconds pypy #Used 2.2 seconds pypy guess optimize Psyco som er litt eldere(python 2.6 max) guess forandringen ser sånn ut,liker join med list comprehension bedere. #guess = "".join([letters[x] for x in guess_list]) guess = '' for x in guess_list: guess += letters[x] Pycuda kan være noe og se på for store farts økninger. Endret 28. januar 2012 av SNIPPSAT 1 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå