Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Original Source by https://github.com/brusers
- #
- #Source edited by Goodies
- #
- #Parameter 1: 'm'/'make' or 'f''/'find'
- #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)
- #Parameter 3 (optional): File.txt - defaults to 'pattern.txt'. Read in 'f' and written in 'm'.
- import sys, string, re
- arguments = []
- textString = []
- program = True
- number = ['a','a','a']
- def get_pattern(stuff):
- first = "abcdefghijklmnopqrstuvwxyz0123456789"
- next = "bcdefghijklmnopqrstuvwxyz0123456789a"
- table = string.maketrans(first, next)
- textString.append("".join(number))
- for run in range(stuff-1):
- if number[2] == '9':
- nextNumber = string.translate(number[1], table)
- number[1] = nextNumber
- if number[1] == '9' and number[2] == '9':
- nextNumber = string.translate(number[0], table)
- number[0] = nextNumber
- nextNumber = string.translate(number[2], table)
- number[2] = nextNumber
- textString.append("".join(number))
- return textString
- while program:
- for arg in sys.argv:
- if len(sys.argv) < 3 or len(sys.argv) > 4:
- print "You must put two arguments:"
- print "'make' for make pattern, and byte length"
- print "or 'find' for find displacement, and byte pattern found."
- program = False
- break
- else:
- arguments.append(arg)
- if program and (arguments[1] == 'make' or arguments[1] == 'm'):
- bytes = int(round((int(arguments[2]) / 3) + 0.5))
- strLen = int(arguments[2])
- if len(arguments)==4:
- myFile = open(arguments[3], 'w')
- else:
- myFile = open('pattern.txt', 'w')
- tempString = ("".join(get_pattern(bytes)))
- if len(tempString) > strLen:
- chop = len(tempString) - strLen
- myFile.write(tempString[:-chop])
- myFile.close()
- print "Your pattern has been made."
- print "See the text file in this directory."
- program = False
- elif program and (arguments[1] == 'find' or arguments[1] == 'f'):
- if arguments[2][:2] == "0x" and (len(arguments[2]) == 10 or len(arguments[2]) == 18):
- temp = arguments[2][2:].decode("hex")
- bytes = temp[::-1]
- else:
- bytes = arguments[2]
- print "Searching for \"%s\"" % (bytes)
- if len(arguments)==4:
- myFile = open(arguments[3], 'r')
- else:
- myFile = open('pattern.txt', 'r')
- testString = myFile.read()
- if not bytes in testString:
- print "Not In Pattern"
- exit(0)
- marker = [m.start(0) for m in re.finditer(bytes, testString)]
- print 'Offset of {0}'.format(marker[0])
- program = False
- elif program:
- print "Your input was not understood."
- print "You must put two arguments:"
- print "'make' for make pattern, and byte length"
- print "or 'find' for find byte offset, and byte pattern found."
- program = False
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement