Esempio n. 1
0
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')
Esempio n. 2
0
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')
Esempio n. 3
0
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)
Esempio n. 4
0
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)