""" 0 1:MCSHA256DigestWithSalt 2:SecKeyFromPassphraseDataHMACSHA1 """ from crypto.PBKDF2 import PBKDF2 import plistlib import hashlib SALT1 = "F92F024CA2CB9754".decode("hex") hashMethods={ 1: (lambda p,salt:hashlib.sha256(SALT1 + p)), 2: (lambda p,salt:PBKDF2(p, salt, iterations=1000).read(20)) } def bruteforce_old_pass(h): salt = h["salt"].data hash = h["hash"].data f = hashMethods.get(h["hashMethod"]) if f: print "Bruteforcing hash %s (4 digits)" % hash.encode("hex") for i in xrange(10000): p = "%04d" % (i % 10000) if f(p,salt) == hash: return p