Advertisement
GoodiesHQ

pattern.py

Mar 13th, 2014
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.66 KB | None | 0 0
  1. #Parameter 1: "f"/"find" or "m"/"make"
  2. #Parameter 2: if "f" or "find" it will be 0xpattern. If "m" or "make", it will be number of characters.
  3. #Parameter 3: file name in which the characters are/will be stored. By default it's "pattern.txt" sp this is not a required parameter.
  4.  
  5. import sys, string, re
  6.  
  7. arguments = []
  8. textString = []
  9. program = True
  10. number = ['a','a','a']
  11.  
  12. def get_pattern(stuff):
  13.     first = "abcdefghijklmnopqrstuvwxyz0123456789"
  14.     next = "bcdefghijklmnopqrstuvwxyz0123456789a"
  15.     table = string.maketrans(first, next)
  16.    
  17.     textString.append("".join(number))
  18.     for run in range(stuff-1):
  19.         if number[2] == '9':
  20.             nextNumber = string.translate(number[1], table)    
  21.             number[1] = nextNumber
  22.         if number[1] == '9' and number[2] == '9':
  23.             nextNumber = string.translate(number[0], table)    
  24.             number[0] = nextNumber             
  25.         nextNumber = string.translate(number[2], table)    
  26.         number[2] = nextNumber
  27.         textString.append("".join(number))
  28.     return textString
  29.    
  30. while program:
  31.     for arg in sys.argv:
  32.         if len(sys.argv) < 3 or len(sys.argv) > 4:
  33.             print "You must put two arguments:"
  34.             print "'make' for make pattern, and byte length"
  35.             print "or 'find' for find displacement, and byte pattern found."
  36.             program = False
  37.             break
  38.         else:
  39.             arguments.append(arg)
  40.                
  41.     if program and (arguments[1] == 'make' or arguments[1] == 'm'):
  42.         bytes = int(round((int(arguments[2]) / 3) + 0.5))
  43.         strLen = int(arguments[2])
  44.         if len(arguments)==4:
  45.             file = arguments[3];
  46.         else:
  47.             file = 'pattern.txt'
  48.         myFile = open(file, 'w')
  49.         tempString = ("".join(get_pattern(bytes)))
  50.         if len(tempString) > strLen:
  51.             chop = len(tempString) - strLen
  52.         myFile.write(tempString[:-chop])
  53.         myFile.close()
  54.         print "Your pattern has been made."
  55.         print "See the '%s' file in this directory." % (file)
  56.         program = False
  57.  
  58.     elif program and (arguments[1] == 'find' or arguments[1] == 'f'):
  59.         if arguments[2][:2] == "0x" and (len(arguments[2]) == 10 or len(arguments[2]) == 18):
  60.             temp = arguments[2][2:].decode("hex")
  61.             bytes = temp[::-1]
  62.         else:
  63.             bytes = arguments[2]
  64.         print "Searching for \"%s\"" % (bytes)
  65.         if len(arguments)==4:
  66.             myFile = open(arguments[3], 'r')
  67.         else:
  68.             myFile = open('pattern.txt', 'r')
  69.         testString = myFile.read()
  70.         if not bytes in testString:
  71.             print "Not In Pattern"
  72.             exit(0)
  73.         marker = [m.start(0) for m in re.finditer(bytes, testString)]
  74.         print 'Offset of {0}'.format(marker[0])
  75.         program = False
  76.        
  77.     elif program:
  78.         print "Your input was not understood."
  79.         print "You must put two arguments:"
  80.         print "'make' for make pattern, and byte length"
  81.         print "or 'find' for find byte offset, and byte pattern found."
  82.         program = False
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement