8282from lib .core .settings import COMMON_USER_COLUMNS
8383from lib .core .settings import DEV_EMAIL_ADDRESS
8484from lib .core .settings import DUMMY_USER_PREFIX
85+ from lib .core .settings import HASH_BINARY_COLUMNS_REGEX
8586from lib .core .settings import HASH_EMPTY_PASSWORD_MARKER
8687from lib .core .settings import HASH_MOD_ITEM_DISPLAY
8788from lib .core .settings import HASH_RECOGNITION_QUIT_THRESHOLD
89+ from lib .core .settings import INVALID_UNICODE_CHAR_FORMAT
8890from lib .core .settings import IS_WIN
8991from lib .core .settings import ITOA64
9092from lib .core .settings import NULL
@@ -634,12 +636,24 @@ def attackDumpedTable():
634636 col_user = ''
635637 col_passwords = set ()
636638 attack_dict = {}
639+ binary_fields = OrderedSet ()
637640
638641 for column in sorted (columns , key = len , reverse = True ):
639642 if column and column .lower () in COMMON_USER_COLUMNS :
640643 col_user = column
641644 break
642645
646+ for column in columns :
647+ if column != "__infos__" :
648+ if all (INVALID_UNICODE_CHAR_FORMAT .split ('%' )[0 ] in value for value in table [column ]["values" ]):
649+ binary_fields .add (column )
650+
651+ if binary_fields :
652+ _ = ',' .join (binary_fields )
653+ warnMsg = "potential binary fields detected ('%s'). You are " % _
654+ warnMsg += "advised to rerun table dump with '--fresh-queries --binary-fields=\" %s\" '" % _
655+ logger .warn (warnMsg )
656+
643657 for i in xrange (count ):
644658 if not found and i > HASH_RECOGNITION_QUIT_THRESHOLD :
645659 break
@@ -653,6 +667,9 @@ def attackDumpedTable():
653667
654668 value = table [column ]["values" ][i ]
655669
670+ if column in binary_fields and re .search (HASH_BINARY_COLUMNS_REGEX , column ) is not None :
671+ value = encodeHex (value , binary = False )
672+
656673 if hashRecognition (value ):
657674 found = True
658675
0 commit comments