SHOW:
|
|
- or go back to the newest paste.
1 | #!/usr/bin/env python | |
2 | import multiprocessing | |
3 | import subprocess | |
4 | ||
5 | class PyCrack: | |
6 | def __init__(self, slice): | |
7 | self.pwrd = multiprocessing.Array('c', '\n' * 512) | |
8 | self.lock = multiprocessing.Lock() | |
9 | ||
10 | self.workers = [] | |
11 | ||
12 | for entry in slice: | |
13 | worker = multiprocessing.Process(target=self.logic, args=(entry,)) | |
14 | self.workers.append(worker) | |
15 | ||
16 | def logic(self, entry): | |
17 | if entry == "": | |
18 | return | |
19 | ||
20 | try: | |
21 | args = ["steghide", "extract", "-sf", "meow.wav", "-p", "%s" % entry] | |
22 | proc = subprocess.Popen(args, stdin=-1, stdout=-1, stderr=-1) | |
23 | out, err = proc.communicate() | |
24 | ||
25 | if "could not extract" not in err: | |
26 | self.set(entry) | |
27 | except: | |
28 | pass | |
29 | ||
30 | def set(self, entry): | |
31 | self.lock.acquire() | |
32 | self.pwrd.value = entry | |
33 | self.lock.release() | |
34 | ||
35 | def run(self): | |
36 | for worker in self.workers: | |
37 | worker.start() | |
38 | ||
39 | for worker in self.workers: | |
40 | worker.join() | |
41 | ||
42 | return self.pwrd.value.strip() | |
43 | ||
44 | def main(): | |
45 | wordlist = "/usr/share/wordlists/rockyou.txt" | |
46 | wordlist = [o.strip() for o in open(wordlist).readlines()] | |
47 | ||
48 | while len(wordlist) % 8: | |
49 | wordlist.append("") | |
50 | ||
51 | for n in xrange(0, len(wordlist), 8): | |
52 | slice = wordlist[n:n+8] | |
53 | procs = [] | |
54 | ||
55 | print "%02i/%02i" % ((n/8)+1, len(wordlist)/8) | |
56 | ||
57 | crack = PyCrack(slice) | |
58 | pwrd = crack.run() | |
59 | ||
60 | if len(results): | |
61 | print "\nPASSWORD: %s\n" % pwrd | |
62 | sys.exit() | |
63 | ||
64 | if __name__ == "__main__": | |
65 | main() |