├── README.md └── passwordPredictor.py /README.md: -------------------------------------------------------------------------------- 1 | # predictable-passwords 2 | Password policies. Yuck. Luckily they make for predictable passwords. 3 | 4 | "People Pick Predictably Poor Passwords" - Password Policy Pessimist, preaching practical password politics 5 | -------------------------------------------------------------------------------- /passwordPredictor.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Really basic wordlist generation using a password base, such as the company name or ticker symbol or something. 3 | "People Pick Predictably Poor Passwords" - Password Policy Pessimist, preaching practical password politics 4 | ''' 5 | import sys 6 | import datetime 7 | import itertools 8 | 9 | specialChars = ['!', '@', '#', '$', '%', '^', '&', '*', ',', '.', '/', '?', ';', ':', '+', '=', '-', '(', ')', '~', '`', '|', '<', '>'] 10 | #specialChars = [''] # Uncomment if your target doesn't require special characters 11 | 12 | now = datetime.datetime.now() 13 | 14 | ''' 15 | If I ever finish this, I'll replace common 1337 characters to that misguided sense of complexity 16 | ''' 17 | def strReplace(): 18 | 19 | replaceChars = { 20 | 'a' : ['@', '4'], 21 | 'e' : ['3'], 22 | 'i' : ['1', '|'], 23 | 'o' : ['0'], 24 | 'l' : ['1', '|'], 25 | 's' : ['$', '5'], 26 | 't' : ['7'] 27 | } 28 | 29 | return 30 | 31 | ''' 32 | Some keyboard patterns might be useful to try, someday 33 | ''' 34 | def keyboardPatterns(): 35 | patterns = [ 36 | 'qwerty', 37 | 'uiop', 38 | 'asdf', 39 | 'zxcv', 40 | '123456', 41 | '12345', 42 | '1234', 43 | '123', 44 | ';lkj', 45 | 'jkl;', 46 | ] 47 | return 48 | 49 | def getYear(): 50 | return [str(datetime.datetime.now().year)] 51 | 52 | def getSeasons(): 53 | seasons = [] 54 | for season in ['spring', 'summer', 'fall', 'winter']: 55 | seasons.append(season.title()) 56 | seasons.append(season) 57 | return seasons 58 | 59 | def getMonth(): 60 | return [now.strftime('%b'), now.strftime('%B'), now.strftime('%b').lower(), now.strftime('%B').lower()] 61 | 62 | def main(): 63 | targetBase = [sys.argv[1]] 64 | targetBase.append(sys.argv[1].title()) 65 | likelyPermutations = [[targetBase, getMonth(), getYear(), specialChars], 66 | [targetBase, getSeasons(), getYear(), specialChars], 67 | [getMonth(), getYear(), targetBase, specialChars], 68 | [getSeasons(), getYear(), targetBase, specialChars], 69 | ] 70 | for perm in likelyPermutations: 71 | for item in list(itertools.product(*perm)): 72 | print ''.join(item) 73 | 74 | if __name__ == '__main__': 75 | main() 76 | --------------------------------------------------------------------------------