Python - Generic Bruteforcer

Download | Vote Up (1) | Vote Down (0)
#!/usr/bin/env python
 
import sys
import getopt
APP = "brute.py"
 
 
#
# Alphabets
#------------------------------------------------------------------------------
"""
 
 [a-z]   |   [a-z0-9]   |   [a-fA-F0-9]
 [A-Z]   |   [A-Z0-9]   |   [a-zA-Z0-9]
 [a-f]   |   [a-z0-9]   |   [a-zA-Z0-9+]
 [A-F]   |   [A-F0-9]   |   [a-f0-9+] 
 [0-9]   |   [a-f0-9]   |   [a-z0-9+]
 [a-z+]  |   [a-f+]
 
 
"""
alphabet    = range(0,10000)
 
alphabet[1] = "abcdefghijklmnopqrstuvwxyz"
alphabet[2] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
alphabet[3] = "abcdef"
alphabet[4] = "ABCDEF"
alphabet[5] = "0123456789"
alphabet[6] = """=/-_+$#&"'!<>()[]{}@:/\\|%*"""
 
alphabet[12]   = alphabet[1] + alphabet[2]                                  # [a-zA-Z]
alphabet[126]  = alphabet[1] + alphabet[2] + alphabet[6]                    # [a-zA-Z+]
alphabet[346]  = alphabet[3] + alphabet[4] + alphabet[6]                    # [a-fA-F+]
 
alphabet[15]   = alphabet[1] + alphabet[5]                                  # [A-Z0-9]
alphabet[16]   = alphabet[1] + alphabet[6]                                  # [A-Z+]
alphabet[156]  = alphabet[1] + alphabet[5] + alphabet[6]                    # [A-Z0-9+]
 
alphabet[25]   = alphabet[2] + alphabet[5]                                  # [A-Z0-9]
alphabet[26]   = alphabet[2] + alphabet[6]                                  # [A-Z+]
alphabet[256]  = alphabet[2] + alphabet[5] + alphabet[6]                    # [A-Z0-9+]
 
alphabet[1256] = alphabet[1] + alphabet[2] + alphabet[5] + alphabet[6]      # [a-zA-Z0-9+]
 
alphabet[35]   = alphabet[3] + alphabet[5]                                  # [a-f0-9]
alphabet[36]   = alphabet[3] + alphabet[6]                                  # [a-f+]
alphabet[356]  = alphabet[3] + alphabet[5] + alphabet[6]                    # [a-f0-9+]
 
alphabet[45]   = alphabet[4] + alphabet[5]                                  # [A-F0-9]
alphabet[46]   = alphabet[4] + alphabet[6]                                  # [A-F+]
alphabet[456]  = alphabet[4] + alphabet[5] + alphabet[6]                    # [A-F0-9+]
 
alphabet[56]   = alphabet[5] + alphabet[6]                                  # [0-9+]
 
alphabet[3456] = alphabet[3] + alphabet[4] + alphabet[5] + alphabet[6]      # [a-fA-F0-9+]
 
 
number         = 0                                                          # number of generated pass
 
 
 
#
# Functions
#------------------------------------------------------------------------------
 
def combine (alphabet, nb, base = ''):
  for c in alphabet:
    if nb == 1:
      yield base + c
    else:
      for c1 in combine(alphabet, nb-1, base + c):
        yield c1
 
 
def usage():
  print "\nUsage: %s <-a alphabet> <-l limit> [-i] [-m match] [-v] [-f]" % APP
 
  print """
 
 -a       : alphabet
 -l       : (max) length
 -i       : increase length bruteforce
 -m       : match
 -v       : display generated combination
 -f       : write to file
 
alphabets :
 
 [a-z]         |  [a-f]        |  [0-9]
 [a-z+]        |  [a-f+]       |  [0-9+]
 [A-Z+]        |  [A-F+]       |  [+]
 [a-zA-Z]      |  [a-fA-F]
 [a-z0-9]      |  [a-f0-9]
 [A-Z0-9]      |  [A-F0-9]
 [a-zA-Z+]     |  [a-fA-F+]
 [a-z0-9+]     |  [a-f0-9+]
 [A-Z0-9+]     |  [A-F0-9+]
 [a-zA-Z0-9+]  |  [a-fA-F0-9+]
 
 +      : with symbols
 
exemple :
"""
 
  print """
./%s -a '[0-9]' -l 4
 > will generate 4 digits : 0000 -> 9999
""" % APP
 
  print """
./%s -a '[a-z]' -l 6 -i
 > will generate a->z + aa->zz + aaa->zzz + ... + aaaaaa->zzzzzz
""" % APP
 
  print """
./%s -a '[a-z]' -l 6 -i -m toto
 > will generate a->z + aa->zz + aaa->zzz + ... + aaaa->toto
""" % APP
 
 
  sys.exit(1)
 
 
def alphabet_to_index(alpha):
  ialpha = -1
 
  if( alpha == "[a-z]" ):
    ialpha = 1
  if( alpha == "[A-Z]" ):
    ialpha = 2
  if( alpha == "[a-f]" ):
    ialpha = 3
  if( alpha == "[A-F]" ):
    ialpha = 4
  if( alpha == "[0-9]" ):
    ialpha = 5
  if( alpha == "[+]" ):
    ialpha = 6
 
  if( alpha == "[a-zA-Z]" ):
    ialpha = 12
  if( alpha == "[a-zA-Z+]" ):
    ialpha = 126
  if( alpha == "[a-zA-Z0-9]" ):
    ialpha = 125
 
  if( alpha == "[a-fA-F0-9]" ):
    ialpha = 345
  if( alpha == "[a-fA-F+]" ):
    ialpha = 346
 
  if( alpha == "[a-z0-9]" ):
    ialpha = 15
  if( alpha == "[a-z+]" ):
    ialpha = 16
  if( alpha == "[a-z0-9+]" ):
    ialpha = 156
 
  if( alpha == "[A-Z0-9]" ):
    ialpha = 25
  if( alpha == "[A-Z+]" ):
    ialpha = 26
  if( alpha == "[A-Z0-9+]" ):
    ialpha = 256
 
  if( alpha == "[a-f0-9]" ):
    ialpha = 35
  if( alpha == "[a-f+]" ):
    ialpha = 36
  if( alpha == "[a-f0-9+]" ):
    ialpha = 356
 
  if( alpha == "[A-F0-9]" ):
    ialpha = 45
  if( alpha == "[A-F+]" ):
    ialpha = 46
  if( alpha == "[A-F0-9+]" ):
    ialpha = 456
 
  if( alpha == "[0-9+]" ):
    ialpha = 56
 
  if( alpha == "[a-zA-Z0-9+]" ):
    ialpha = 1256
  if( alpha == "[a-fA-F0-9+]" ):
    ialpha = 3456
 
  return(ialpha)
 
 
## Function to do with bruteforce !
"""
brute.py is a generic program to generate password.
there is only one function to complete bruteit(...)
to make your own !
"""
def bruteit(string,match,disp=0,writefile=""):
  if disp:
          print string
  if writefile:
    f = open(writefile,"a")
    f.write(string+"\n")
    f.close()
  global number
  number = number + 1
  if( string == match ):
    print string
    sys.exit(0)
 
 
 
#
# Main
#------------------------------------------------------------------------------
 
def main():
  limit     = -1
  ilimit    = -1
  ialpha    = -1
  alpha     = ""
  iterate   = 0
  match     = "-"
  error     = 2
  disp      = 0
  writefile = ""
 
  optlist, args = getopt.getopt( sys.argv[1:] , "a:l:m:ivf:" )
 
  for opt in optlist:
    if( opt[0] == '-a' ):
      ialpha = alphabet_to_index( opt[1] )
      if( ialpha == -1 ):
        print "\nError : `%s` is not a known alphabet\n" % opt[1]
        usage()
      else:
        error = error - 1
 
    if( opt[0] == '-l' ):
      try:
        limit = int(opt[1])
        error = error - 1
      except:
        print "\nError : `%s` is not an integer\n" % opt[1]
        usage()
 
    if( opt[0] == '-i' ):
      iterate = 1
 
    if( opt[0] == '-m' ):
      match = opt[1]
 
    if( opt[0] == '-v' ):
      disp = 1
 
    if( opt[0] == '-f' ):
      writefile = opt[1]
 
 
 
  if( error != 0 ):
    print "\nError : some argument is missing." 
    usage()
 
 
  try:
    if( iterate == 1 ):
      for ilimit in range(1,limit+1):
        for string in combine(alphabet[ialpha], ilimit):
          bruteit( string , match , disp , writefile )
    elif( iterate == 0 ) :
      for string in combine(alphabet[ialpha], limit):
        bruteit( string , match , disp , writefile )
 
  except(KeyboardInterrupt):
    print "\n" + number + " password genereted.\n"
    print "\n[CTRL+C] : program aborted.\n"
    sys.exit(130)
 
if __name__ == '__main__':
  main()

saelyx


Be the first to give feedback !

Please login to comment !