Exemplo n.º 1
0
def disassemble(args):
    print(script_util.copyright)

    targets = script_util.findFiles(args.target, args.r, '.class')

    jar = args.path
    if jar is None and args.target.endswith('.jar'):
        jar = args.target

    out = script_util.makeWriter(args.out, '.j')
    if jar is not None:
        with zipfile.ZipFile(jar, 'r') as archive:
            readFunc = functools.partial(readArchive, archive)
            disassembleSub(readFunc, out, targets, roundtrip=args.roundtrip)
    else:
        disassembleSub(readFile, out, targets, roundtrip=args.roundtrip)
Exemplo n.º 2
0
def assemble(args):
    log = script_util.Logger('warning' if args.q else 'info')
    log.info(script_util.copyright)

    out = script_util.makeWriter(args.out, '.class')
    targets = script_util.findFiles(args.target, args.r, '.j')

    start_time = time.time()
    with out:
        for i, target in enumerate(targets):
            log.info('Processing file {}, {}/{} remaining'.format(target, len(targets)-i, len(targets)))

            pairs = assembleClass(target)
            for name, data in pairs:
                filename = out.write(name, data)
                log.info('Class written to', filename)
    print('Total time', time.time() - start_time)
Exemplo n.º 3
0
            filename = out.write(name, output.getvalue())
            if filename is not None:
                print('Class written to', filename)
                print(time.time() - start_time, ' seconds elapsed')

if __name__== "__main__":
    print(script_util.copyright)

    import argparse
    parser = argparse.ArgumentParser(description='Krakatau decompiler and bytecode analysis tool')
    parser.add_argument('-out', help='Path to generate files in')
    parser.add_argument('-r', action='store_true', help="Process all files in the directory target and subdirectories")
    parser.add_argument('-path', help='Jar to look for class in')
    parser.add_argument('-roundtrip', action='store_true', help='Create assembly file that can roundtrip to original binary.')
    parser.add_argument('target', help='Name of class or jar file to decompile')
    args = parser.parse_args()

    targets = script_util.findFiles(args.target, args.r, '.class')

    jar = args.path
    if jar is None and args.target.endswith('.jar'):
        jar = args.target

    out = script_util.makeWriter(args.out, '.j')
    if jar is not None:
        with zipfile.ZipFile(jar, 'r') as archive:
            readFunc = functools.partial(readArchive, archive)
            disassembleSub(readFunc, out, targets, roundtrip=args.roundtrip)
    else:
        disassembleSub(readFile, out, targets, roundtrip=args.roundtrip, outputClassName=False)
Exemplo n.º 4
0
    parser.add_argument('target',
                        help='Name of class or jar file to decompile')
    args = parser.parse_args()

    plugins = []
    if args.plugin is not None:
        for name in args.plugin:
            mod = __import__('Krakatau.plugins.user' + name, globals(),
                             locals(), ['create'], -1)
            plugins.append(mod.create())

    path = []
    if not args.nauto:
        print 'Attempting to automatically locate the standard library...'
        found = findJRE()
        if found:
            print 'Found at ', found
            path.append(found)
        else:
            print 'Unable to find the standard library'

    if args.path:
        for part in args.path:
            path.extend(part.split(';'))

    if args.target.endswith('.jar'):
        path.append(args.target)

    targets = script_util.findFiles(args.target, args.r, '.class')
    targets = map(script_util.normalizeClassname, targets)
    decompileClass(path, targets, args.out, plugins)
Exemplo n.º 5
0
        source = f.read()
    return assembleSource(source, basename)


if __name__ == "__main__":
    import argparse

    parser = argparse.ArgumentParser(description="Krakatau bytecode assembler")
    parser.add_argument("-out", help="Path to generate files in")
    parser.add_argument("-r", action="store_true", help="Process all files in the directory target and subdirectories")
    parser.add_argument("-q", action="store_true", help="Only display warnings and errors")
    parser.add_argument("target", help="Name of file to assemble")
    args = parser.parse_args()

    log = script_util.Logger("warning" if args.q else "info")
    log.info(script_util.copyright)

    out = script_util.makeWriter(args.out, ".class")
    targets = script_util.findFiles(args.target, args.r, ".j")

    start_time = time.time()
    with out:
        for i, target in enumerate(targets):
            log.info("Processing file {}, {}/{} remaining".format(target, len(targets) - i, len(targets)))

            pairs = assembleClass(target)
            for name, data in pairs:
                filename = out.write(name, data)
                log.info("Class written to", filename)
    print "Total time", time.time() - start_time