def run_redex(args, exception_formatter=None, output_line_handler=None): # This is late, but hopefully early enough. _init_logging(args.log_level) state = prepare_redex(args) if exception_formatter is None: exception_formatter = ExceptionMessageFormatter() run_redex_binary(state, exception_formatter, output_line_handler) if args.stop_pass: # Do not remove temp dirs sys.exit() finalize_redex(state) if __name__ == "__main__": keys = {} try: keystore = join(os.environ["HOME"], ".android", "debug.keystore") if isfile(keystore): keys["keystore"] = keystore keys["keyalias"] = "androiddebugkey" keys["keypass"] = "******" except Exception: pass args = arg_parser(**keys).parse_args() validate_args(args) with_temp_cleanup(lambda: run_redex(args), args.always_clean_up)
import os from pyredex.utils import with_temp_cleanup from tools.bytecode_debugger.inject_debug_lib import run_debug_injector def arg_parser(): description = "Injects bytecode-level debug information into an APK" parser = argparse.ArgumentParser( formatter_class=argparse.RawDescriptionHelpFormatter, description=description ) parser.add_argument("bin_path", help="Path to program binary") parser.add_argument("input_apk", help="Input APK file") parser.add_argument( "-o", "--output_apk", nargs="?", type=os.path.realpath, default="out.apk", help="Output APK file name (defaults to out.apk)", ) parser.add_argument("-s", "--keystore", nargs="?", default=None) parser.add_argument("-a", "--keyalias", nargs="?", default=None) parser.add_argument("-p", "--keypass", nargs="?", default=None) return parser if __name__ == "__main__": args = arg_parser().parse_args() with_temp_cleanup(lambda: run_debug_injector(args))