Advertisement
GoodiesHQ

Pattern in Python

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