def main(): args = parser.parse_args() alphabet = args.alphabet subsize = args.length if args.lookup: pat = args.lookup if pat.startswith('0x'): pat = packing.pack(int(pat[2:], 16), subsize * 8, 'little', 'unsigned') elif pat.isdigit(): pat = packing.pack(int(pat, 10), subsize * 8, 'little', 'unsigned') if len(pat) != 4: log.fatal('Subpattern must be 4 bytes', 1) if not all(c in alphabet for c in pat): log.fatal( 'Pattern contains characters not present in the alphabet', 1) offset = cyclic.cyclic_find(pat, alphabet, subsize) if offset == -1: log.fatal('Given pattern does not exist in cyclic pattern', 1) else: print offset else: want = args.count result = cyclic.cyclic(want, alphabet, subsize) got = len(result) if got < want: log.failure("Alphabet too small (max length = %i)" % got) sys.stdout.write(result) if sys.stdout.isatty(): sys.stdout.write('\n')
def main(): args = parser.parse_args() alphabet = args.alphabet subsize = args.length if args.lookup: pat = args.lookup if pat.startswith('0x'): pat = packing.pack(int(pat[2:], 16), subsize*8, 'little', 'unsigned') elif pat.isdigit(): pat = packing.pack(int(pat, 10), subsize*8, 'little', 'unsigned') if len(pat) != 4: log.fatal('Subpattern must be 4 bytes', 1) if not all(c in alphabet for c in pat): log.fatal('Pattern contains characters not present in the alphabet', 1) offset = cyclic.cyclic_find(pat, alphabet, subsize) if offset == -1: log.fatal('Given pattern does not exist in cyclic pattern', 1) else: print offset else: want = args.count result = cyclic.cyclic(want, alphabet, subsize) got = len(result) if got < want: log.failure("Alphabet too small (max length = %i)" % got) sys.stdout.write(result) if sys.stdout.isatty(): sys.stdout.write('\n')
def main(): # Banner must be added here so that it doesn't appear in the autodoc # generation for command line tools p.description = banner + p.description args = p.parse_args() if args.format == 'default': if sys.stdout.isatty(): args.format = 'hex' else: args.format = 'raw' vals = get_tree('', pwnlib.shellcraft, []) if args.shellcode: vals = [(k, val) for k, val in vals if k.startswith(args.shellcode + '.') or k == args.shellcode] if len(vals) == 0: log.fatal("Cannot find subtree by the name of %r" % args.shellcode) elif len(vals) > 1: for k, _ in vals: print k exit() else: func = vals[0][1] if args.show: print func.__doc__ exit() defargs = len(func.func_defaults or ()) reqargs = func.func_code.co_argcount - defargs if len(args.args) < reqargs: if defargs > 0: log.fatal('%s takes at least %d arguments' % (args.shellcode, reqargs)) else: log.fatal('%s takes exactly %d arguments' % (args.shellcode, reqargs)) # Captain uglyness saves the day! for i, val in enumerate(args.args): try: args.args[i] = util.safeeval.expr(val) except ValueError: pass # And he strikes again! os = arch = None for k in args.shellcode.split('.')[:-1]: if k in context.architectures: arch = k elif k in context.oses: os = k code = func(*args.args) if args.format in ['a', 'asm', 'assembly']: print code exit() if args.format == 'p': print pwnlib.asm.cpp(code, arch = arch, os = os) exit() code = pwnlib.asm.asm(code, arch = arch, os = os) if args.format in ['s', 'str', 'string']: code = _string(code) elif args.format == 'c': code = _carray(code) elif args.format in ['h', 'hex']: code = _hex(code) elif args.format in ['i', 'hexii']: code = pwnlib.util.fiddling.hexii(code) + '\n' if not sys.stdin.isatty(): sys.stdout.write(sys.stdin.read()) sys.stdout.write(code)
def main(): # Banner must be added here so that it doesn't appear in the autodoc # generation for command line tools p.description = banner + p.description args = p.parse_args() if args.format == 'default': if sys.stdout.isatty(): args.format = 'hex' else: args.format = 'raw' vals = get_tree('', pwnlib.shellcraft, []) if args.shellcode: vals = [(k, val) for k, val in vals if k.startswith(args.shellcode + '.') or k == args.shellcode] if len(vals) == 0: log.fatal("Cannot find subtree by the name of %r" % args.shellcode) elif len(vals) > 1: for k, _ in vals: print k exit() else: func = vals[0][1] if args.show: print func.__doc__ exit() defargs = len(func.func_defaults or ()) reqargs = func.func_code.co_argcount - defargs if len(args.args) < reqargs: if defargs > 0: log.fatal('%s takes at least %d arguments' % (args.shellcode, reqargs)) else: log.fatal('%s takes exactly %d arguments' % (args.shellcode, reqargs)) # Captain uglyness saves the day! for i, val in enumerate(args.args): try: args.args[i] = util.safeeval.expr(val) except ValueError: pass # And he strikes again! os = arch = None for k in args.shellcode.split('.')[:-1]: if k in context.architectures: arch = k elif k in context.oses: os = k code = func(*args.args) if args.format in ['a', 'asm', 'assembly']: print code exit() if args.format == 'p': print pwnlib.asm.cpp(code, arch=arch, os=os) exit() code = pwnlib.asm.asm(code, arch=arch, os=os) if args.format in ['s', 'str', 'string']: code = _string(code) elif args.format == 'c': code = _carray(code) elif args.format in ['h', 'hex']: code = _hex(code) elif args.format in ['i', 'hexii']: code = pwnlib.util.fiddling.hexii(code) + '\n' if not sys.stdin.isatty(): sys.stdout.write(sys.stdin.read()) sys.stdout.write(code)