From e041e7906ddbfc588433d4c67cfd985e50b74dd7 Mon Sep 17 00:00:00 2001 From: iphelix Date: Mon, 22 Jul 2013 14:19:14 -0700 Subject: [PATCH] Fixed bugs in policygen.py (--max options are now working properly) --- maskgen.py | 6 ++---- policygen.py | 45 ++++++++++++++++++++++----------------------- statsgen.py | 8 ++++---- 3 files changed, 28 insertions(+), 31 deletions(-) diff --git a/maskgen.py b/maskgen.py index 52955aa..5578ee1 100755 --- a/maskgen.py +++ b/maskgen.py @@ -65,6 +65,7 @@ class MaskGen: elif char == "u": count *= 26 elif char == "d": count *= 10 elif char == "s": count *= 33 + elif char == "a": count *= 95 else: print "[!] Error, unknown mask ?%s in a mask %s" % (char,mask) return count @@ -264,7 +265,4 @@ if __name__ == "__main__": sorting_mode = "optindex" print "[*] Sorting masks by their [%s]." % sorting_mode - maskgen.generate_masks(sorting_mode) - - - + maskgen.generate_masks(sorting_mode) \ No newline at end of file diff --git a/policygen.py b/policygen.py index 17b38a6..981b555 100755 --- a/policygen.py +++ b/policygen.py @@ -70,6 +70,7 @@ class PolicyGen: elif char == "u": count *= 26 elif char == "d": count *= 10 elif char == "s": count *= 33 + elif char == "a": count *= 95 else: print "[!] Error, unknown mask ?%s in a mask %s" % (char,mask) return count @@ -118,14 +119,14 @@ class PolicyGen: # Filter according to password policy # NOTE: Perform exact opposite (XOR) operation if noncompliant # flag was set when calling the function. - if ((not self.minlower or lowercount >= self.minlower) and \ - (not self.maxlower or lowercount <= self.maxlower) and \ - (not self.minupper or uppercount >= self.minupper) and \ - (not self.maxupper or uppercount <= self.maxupper) and \ - (not self.mindigit or digitcount >= self.mindigit) and \ - (not self.maxdigit or digitcount <= self.maxdigit) and \ - (not self.minspecial or specialcount >= self.minspecial) and \ - (not self.maxspecial or specialcount <= self.maxspecial)) ^ noncompliant : + if ((self.minlower == None or lowercount >= self.minlower) and \ + (self.maxlower == None or lowercount <= self.maxlower) and \ + (self.minupper == None or uppercount >= self.minupper) and \ + (self.maxupper == None or uppercount <= self.maxupper) and \ + (self.mindigit == None or digitcount >= self.mindigit) and \ + (self.maxdigit == None or digitcount <= self.maxdigit) and \ + (self.minspecial == None or specialcount >= self.minspecial) and \ + (self.maxspecial == None or specialcount <= self.maxspecial)) ^ noncompliant : sample_length_count += 1 sample_length_complexity += mask_complexity @@ -138,8 +139,6 @@ class PolicyGen: if self.output_file: self.output_file.write("%s\n" % mask) - - total_count += total_length_count sample_count += sample_length_count @@ -204,16 +203,16 @@ if __name__ == "__main__": policygen.output_file = open(options.output_masks, 'w') # Password policy - if options.minlength: policygen.minlength = options.minlength - if options.maxlength: policygen.maxlength = options.maxlength - if options.mindigit: policygen.mindigit = options.mindigit - if options.minlower: policygen.minlower = options.minlower - if options.minupper: policygen.minupper = options.minupper - if options.minspecial: policygen.minspecial = options.minspecial - if options.maxdigit: policygen.maxdigits = options.maxdigit - if options.maxlower: policygen.maxlower = options.maxlower - if options.maxupper: policygen.maxupper = options.maxupper - if options.maxspecial: policygen.maxspecial = options.maxspecial + if options.minlength != None: policygen.minlength = options.minlength + if options.maxlength != None: policygen.maxlength = options.maxlength + if options.mindigit != None: policygen.mindigit = options.mindigit + if options.minlower != None: policygen.minlower = options.minlower + if options.minupper != None: policygen.minupper = options.minupper + if options.minspecial != None: policygen.minspecial = options.minspecial + if options.maxdigit != None: policygen.maxdigits = options.maxdigit + if options.maxlower != None: policygen.maxlower = options.maxlower + if options.maxupper != None: policygen.maxupper = options.maxupper + if options.maxspecial != None: policygen.maxspecial = options.maxspecial # Misc if options.pps: policygen.pps = options.pps @@ -221,9 +220,9 @@ if __name__ == "__main__": # Print current password policy print "[*] Password policy:" - print " Pass Lengths: min:%d max:%d" % (options.minlength,options.maxlength) - print " Min strength: l:%s u:%s d:%s s:%s" % (options.minlower, options.minupper, options.mindigit, options.minspecial) - print " Max strength: l:%s u:%s d:%s s:%s" % (options.maxlower, options.maxupper, options.maxdigit, options.maxspecial) + print " Pass Lengths: min:%d max:%d" % (policygen.minlength, policygen.maxlength) + print " Min strength: l:%s u:%s d:%s s:%s" % (policygen.minlower, policygen.minupper, policygen.mindigit, policygen.minspecial) + print " Max strength: l:%s u:%s d:%s s:%s" % (policygen.maxlower, policygen.maxupper, policygen.maxdigit, policygen.maxspecial) print "[*] Generating [%s] masks." % ("compliant" if not options.noncompliant else "non-compliant") policygen.generate_masks(options.noncompliant) \ No newline at end of file diff --git a/statsgen.py b/statsgen.py index 893c74a..d011b34 100755 --- a/statsgen.py +++ b/statsgen.py @@ -167,14 +167,14 @@ def main(): if count*100/filter_counter > 0: print "[+] %25d: %02d%% (%d)" % (length, count*100/filter_counter, count) - print "\n[*] Mask statistics..." - for (mask,count) in sorted(masks.iteritems(), key=operator.itemgetter(1), reverse=True): - print "[+] %25s: %02d%% (%d)" % (mask, count*100/filter_counter, count) - print "\n[*] Charset statistics..." for (char,count) in sorted(chars.iteritems(), key=operator.itemgetter(1), reverse=True): print "[+] %25s: %02d%% (%d)" % (char, count*100/filter_counter, count) + print "\n[*] Mask statistics..." + for (mask,count) in sorted(masks.iteritems(), key=operator.itemgetter(1), reverse=True): + print "[+] %25s: %02d%% (%d)" % (mask, count*100/filter_counter, count) + print "\n[*] Advanced Mask statistics..." for (advmask,count) in sorted(advmasks.iteritems(), key=operator.itemgetter(1), reverse=True): if count*100/filter_counter > 0: