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)
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)
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)
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)
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