From f9bb762d1dab52f2c7215634d49392fd553b153a Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Tue, 1 Nov 2011 19:00:34 +0000 Subject: [PATCH] minor improvement (resuming of already cracked values) --- lib/utils/hash.py | 19 ++++++++++++++++--- lib/utils/hashdb.py | 7 ++++--- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/utils/hash.py b/lib/utils/hash.py index 2ec779676..0a91e4aa5 100644 --- a/lib/utils/hash.py +++ b/lib/utils/hash.py @@ -50,6 +50,7 @@ from lib.core.common import Wordlist from lib.core.convert import hexdecode from lib.core.convert import hexencode from lib.core.convert import utf8encode +from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import DBMS @@ -500,7 +501,15 @@ def dictionaryAttack(attack_dict): key = hash(repr(item)) if item and key not in keys: - attack_info.append(item) + resumed = conf.hashDB.retrieve(hash_) + if not resumed: + attack_info.append(item) + else: + infoMsg = "resuming found '%s' ('%s')" % (resumed, hash_) + if user and not user.startswith(DUMMY_USER_PREFIX): + infoMsg += " for user '%s'" % user + logger.info(infoMsg) + results.append((user, hash_, resumed)) keys.add(key) if not attack_info: @@ -615,7 +624,9 @@ def dictionaryAttack(attack_dict): process.join() while not retVal.empty(): - results.append(retVal.get(block=False)) + _, hash_, word = item = retVal.get(block=False) + conf.hashDB.write(hash_, word) + results.append(item) clearConsoleLine() @@ -689,7 +700,9 @@ def dictionaryAttack(attack_dict): process.join() while not retVal.empty(): - results.append(retVal.get(block=False)) + _, hash_, word = item = retVal.get(block=False) + conf.hashDB.write(hash_, word) + results.append(item) clearConsoleLine() diff --git a/lib/utils/hashdb.py b/lib/utils/hashdb.py index 166add957..2f0198a18 100644 --- a/lib/utils/hashdb.py +++ b/lib/utils/hashdb.py @@ -40,7 +40,8 @@ class HashDB(object): except: pass - def hashKey(self, key): + @staticmethod + def hashKey(key): key = key.encode(UNICODE_ENCODING) if isinstance(key, unicode) else repr(key) retVal = int(hashlib.md5(key).hexdigest()[:8], 16) return retVal @@ -48,7 +49,7 @@ class HashDB(object): def retrieve(self, key): retVal = None if key: - hash_ = self.hashKey(key) + hash_ = HashDB.hashKey(key) while True: try: for row in self.cursor.execute("SELECT value FROM storage WHERE id=?", (hash_,)): @@ -62,7 +63,7 @@ class HashDB(object): def write(self, key, value): if key: - hash_ = self.hashKey(key) + hash_ = HashDB.hashKey(key) while True: try: try: