def main(): parser = argparse.ArgumentParser(description='A tool that hook all apps you need') parser.add_argument('regexps', type=str, nargs='*', help=r'Regexps for the apps you want to hook such as "^com\.baidu\.", ' r'empty for hooking all apps') parser.add_argument('-i', '--install', action='store_true', help='install frida server to /data/local/tmp automatically') parser.add_argument('-p', '--port', type=int, help='reverse tcp port, if specified, manipulate iptables automatically') parser.add_argument('-v', action='store_true', help='verbose output') args = parser.parse_args() if args.v: LOGGER.setLevel(logging.DEBUG) # set log os.makedirs(LOG_DIR, mode=0o700, exist_ok=True) log_filename = time.strftime('%Y-%m-%d_%H-%M-%S.log') log_file = open(os.path.join(LOG_DIR, log_filename), 'a', encoding='utf-8') logger_handler = ColorizingStreamHandler(log_file) logger_handler.setFormatter(FORMATTER) LOGGER.addHandler(logger_handler) Adb.start_server() try: t = WatchThread(args.install, args.port, args.regexps, True) t.start() t.join() except KeyboardInterrupt: LOGGER.info('shutdown, thank you for using frida skeleton') except Exception as e: LOGGER.error(e)
def start(self): try: if options.list: for device in Adb.devices().out.split('\n')[1:]: print(device) sys.exit(0) level = logging.DEBUG if options.verbose else logging.INFO coloredlogs.install(level=level) # set log os.makedirs(LOG_DIR, mode=0o700, exist_ok=True) log_file = open(os.path.join(LOG_DIR, LOG_FILENAME), 'a', encoding='utf-8') coloredlogs.install(level=level, stream=log_file) # set handling interrupt exceptions signal.signal(signal.SIGTERM, self.shutdown) signal.signal(signal.SIGINT, self.shutdown) Adb.start_server() watch_thread = WatchThread() try: watch_thread.start() while True: time.sleep(1) except MainExit: while True: try: self.log.info( 'shutdown command received, wait for clean up please...' ) watch_thread.terminate() while watch_thread.is_alive(): time.sleep(1) break except MainExit: pass except (KeyboardInterrupt, InterruptedError): pass self.log.info('thank you for using, bye!')
def __init__(self): parser = argparse.ArgumentParser(description='A tool that hook all apps you need') parser.add_argument('regexps', type=str, nargs='*', help=r'Regexps for the apps you want to hook such as "^com\.baidu\.", ' r'empty for hooking all apps') parser.add_argument('-i', '--install', action='store_true', help='install frida server to /data/local/tmp automatically') parser.add_argument('-p', '--port', type=int, help='reverse tcp port, if specified, manipulate iptables automatically') parser.add_argument('-v', action='store_true', help='verbose output') args = parser.parse_args() try: self.log = logging.getLogger(self.__class__.__name__) level = 'DEBUG' if args.v else 'INFO' coloredlogs.install(level=level) # set log os.makedirs(LOG_DIR, mode=0o700, exist_ok=True) log_filename = time.strftime('%Y-%m-%d_%H-%M-%S.log') log_file = open(os.path.join(LOG_DIR, log_filename), 'a', encoding='utf-8') coloredlogs.install(level=level, stream=log_file) # set handling interrupt exceptions signal.signal(signal.SIGTERM, self.shutdown) signal.signal(signal.SIGINT, self.shutdown) Adb.start_server() watch_thread = WatchThread(args.install, args.port, args.regexps) except (KeyboardInterrupt, InterruptedError) as e: self.log.info(e) sys.exit(-1) try: watch_thread.start() while True: time.sleep(1) except MainExit: while True: try: self.log.info('shutdown command received, wait for clean up please...') watch_thread.cancel() break except MainExit: pass # waiting for sub threads while True: try: while True: self.should_we_exit() time.sleep(1) except MainExit: try: n = len(thread_manager.thread_map) if n > 0: self.log.info('running sub threads: {}, wait a second please'.format(n)) except MainExit: pass