def __init__(self, obj: dict): super().__init__(obj) self.readPermission = utils.get_item(obj, "readPermission", type=Permission, default={}) self.writePermission = utils.get_item(obj, "writePermission", type=Permission, default={})
def __init__(self, obj: dict): self.name = utils.get_item(obj, "name", type=str, default="") self.exported = utils.get_item(obj, "exported", type=bool, default=False) self.enabled = utils.get_item(obj, "enabled", type=bool, default=False) self.intents = utils.get_array_item(obj, "intents", type=IntentFilter, default=[])
def __init__(self, obj: dict): self.proto = utils.get_item(obj, "proto", type=str, default="") self.refCnt = utils.get_item(obj, "refCnt", type=int, default="") self.flags = utils.get_item(obj, "flags", type=str, default="") self.type = utils.get_item(obj, "type", type=str, default=[]) self.state = utils.get_item(obj, "state", type=str, default="") self.inode = utils.get_item(obj, "inode", type=int, default="") self.path = utils.get_item(obj, "path", type=str, default="") self.readable = utils.get_item(obj, "readable", type=bool, default=False) self.writable = utils.get_item(obj, "writable", type=bool, default=False) self.pid = utils.get_item(obj, "pid", type=int, default=False)
def __init__(self, obj: dict): super().__init__(obj) self.authority = utils.get_item(obj, "authority", type=str, default="") self.readPermission = utils.get_item(obj, "readPermission", type=Permission, default=Permission.default()) self.writePermission = utils.get_item(obj, "writePermission", type=Permission, default=Permission.default()) self.uriPermissionPatterns = utils.get_array_item( obj, "uriPermissionPatterns", type=PatternMatcher, default=[]) self.pathPermissions = utils.get_array_item(obj, "pathPermissions", type=PathPermission, default=[])
def on_script_message(self, script: FridaScript, message: object, data: object): """ 脚本消息回调函数,默认按照格式打印 :param script: frida的脚本 :param message: frida server发送的数据 :param data: frida server发送的data """ if utils.get_item(message, "type") == "send": payload = utils.get_item(message, "payload") if payload is not None and isinstance(payload, dict): # log单独解析 log = payload.pop("log", None) if log is not None: self.on_script_log(script, log) # event单独解析 event = payload.pop("event", None) if event is not None: self.on_script_event(script, event, data) # 解析完log,解析其他的 while len(payload) > 0: key, value = payload.popitem() self.on_script_send(script, key, value, data) # 字符串类型,直接输出 if not utils.is_empty(payload): logger.info(payload, tag="[*]") elif utils.get_item(message, "type") == "error" and utils.is_contain( message, "stack"): logger.info(utils.get_item(message, "stack"), tag="[!]", fore=Fore.RED) else: logger.info(message, tag="[?]", fore=Fore.RED)
def get_apk_path(self, package: str, **kwargs) -> str: """ 获取apk路径 :return: apk路径 """ self._ignore_capture_output(kwargs) timeout_meter = utils.TimeoutMeter(kwargs.pop("timeout", None)) if self.uid < 10000: out = self.shell("pm", "path", package, timeout=timeout_meter.get(), **kwargs) match = re.search(r"^.*package:[ ]*(.*)[\s\S]*$", out) if match is not None: return match.group(1).strip() obj = self.get_packages(package, basic_info=True, timeout=timeout_meter.get(), **kwargs) return utils.get_item(obj, 0, "sourceDir", default="")
def main(): parser = AndroidArgumentParser( description='show current running app\'s basic information') group = parser.add_mutually_exclusive_group() group.add_argument('-p', '--package', action='store_const', const=True, default=False, help='show current running package name') group.add_argument('-a', '--activity', action='store_const', const=True, default=False, help='show current running activity name') group.add_argument('--path', action='store_const', const=True, default=False, help='show current running package path') group.add_argument('--kill', action='store_const', const=True, default=False, help='kill current running package') group.add_argument('--apk', metavar='DEST', action='store', type=str, nargs='?', default=".", help='pull current running apk file') group.add_argument('--screen', metavar='DEST', action='store', type=str, nargs='?', default=".", help='capture screen and pull file') args = parser.parse_args() device = args.parse_device() if args.package: logger.message(device.get_current_package()) elif args.activity: logger.message(device.get_current_activity()) elif args.path: logger.message(device.get_apk_path(device.get_current_package())) elif args.kill: device.shell("am", "force-stop", device.get_current_package(), capture_output=False) elif "--apk" in sys.argv: package_name = device.get_current_package() logger.message("get current running package: {}".format(package_name)) package = utils.get_item( device.get_packages(package_name, basic_info=True), 0) if package is not None: logger.message("get current running package path: {}".format( package.sourceDir)) path = device.get_storage_path("{}_{}.apk".format( package.name, package.versionName)) dest = args.apk if not utils.is_empty(args.apk) else "." device.shell("mkdir", "-p", device.get_storage_path(), capture_output=False) device.shell("cp", package.sourceDir, path, capture_output=False) device.pull(path, dest, capture_output=False) device.shell("rm", path) elif "--screen" in sys.argv: now = datetime.datetime.now() path = device.get_storage_path("screenshot-" + now.strftime("%Y-%m-%d-%H-%M-%S") + ".png") dest = args.screen if not utils.is_empty(args.screen) else "." device.shell("mkdir", "-p", device.get_storage_path(), capture_output=False) device.shell("screencap", "-p", path, capture_output=False) device.pull(path, dest, capture_output=False) device.shell("rm", path) else: package = device.get_current_package() logger.message("package: ", package) logger.message("activity: ", device.get_current_activity()) logger.message("path: ", device.get_apk_path(package))
def __init__(self, obj: dict): self.host = utils.get_item(obj, "host", type=str, default="") self.port = utils.get_item(obj, "port", type=int, default=0)
def __init__(self, obj: dict): self.path = utils.get_item(obj, "path", type=str, default="") self.type = utils.get_item(obj, "type", type=str, default="literal")
def __init__(self, obj: dict): self.name = utils.get_item(obj, "name", type=str, default="") self.appName = utils.get_item(obj, "appName", type=str, default="") self.userId = utils.get_item(obj, "userId", type=int, default="") self.gids = utils.get_item(obj, "gids", type=str, default=[]) self.sourceDir = utils.get_item(obj, "sourceDir", type=str, default="") self.versionCode = utils.get_item(obj, "versionCode", type=str, default="") self.versionName = utils.get_item(obj, "versionName", type=str, default="") self.enabled = utils.get_item(obj, "enabled", type=bool, default=False) self.system = utils.get_item(obj, "system", type=bool, default=False) self.debuggable = utils.get_item(obj, "debuggable", type=bool, default=False) self.allowBackup = utils.get_item(obj, "allowBackup", type=bool, default=False) self.requestedPermissions = utils.get_array_item( obj, "requestedPermissions", type=Permission, default=[]) self.permissions = utils.get_array_item(obj, "permissions", type=Permission, default=[]) self.activities = utils.get_array_item(obj, "activities", type=Activity, default=[]) self.services = utils.get_array_item(obj, "services", type=Service, default=[]) self.receivers = utils.get_array_item(obj, "receivers", type=Receiver, default=[]) self.providers = utils.get_array_item(obj, "providers", type=Provider, default=[])
def __init__(self, obj: dict): super().__init__(obj) self.permission = utils.get_item(obj, "permission", type=Permission, default=Permission.default())
def __init__(self, obj: dict): self.name = utils.get_item(obj, "name", type=str, default="") self.protection = utils.get_item(obj, "protection", type=str, default="normal")
def main(): parser = AndroidArgumentParser(description='fetch application info') group = parser.add_mutually_exclusive_group(required=True) group.add_argument('-a', '--all', action='store_true', default=False, help='fetch all apps') group.add_argument('-t', '--top', action='store_true', default=False, help='fetch current running app only') group.add_argument('-p', '--packages', metavar="pkg", action='store', nargs='+', default=None, help='fetch target apps only') group.add_argument('--system', action='store_true', default=False, help='fetch system apps only') group.add_argument('--non-system', action='store_true', default=False, help='fetch non-system apps only') parser.add_argument('-b', '--basic-info', action='store_true', default=False, help='display basic info only') parser.add_argument( '-dang', '--dangerous', action='store_true', default=False, help='display dangerous permissions and components only') parser.add_argument('-o', '--order-by', metavar="field", action='store', nargs='+', default=['userId', 'name'], choices=[ 'name', 'appName', 'userId', 'sourceDir', 'enabled', 'system', 'debuggable', 'allowBackup' ], help='order by target field') args = parser.parse_args() device = args.parse_device() if args.top: packages = device.get_packages(device.get_current_package(), basic_info=args.basic_info) elif not utils.is_empty(args.packages): packages = device.get_packages(*args.packages, basic_info=args.basic_info) elif args.system: packages = device.get_packages(system=True, basic_info=args.basic_info) elif args.non_system: packages = device.get_packages(non_system=True, basic_info=args.basic_info) else: packages = device.get_packages(basic_info=args.basic_info) if not utils.is_empty(args.order_by): packages = sorted( packages, key=lambda x: [utils.get_item(x, k, default="") for k in args.order_by]) min_level = PrintLevel.min if args.dangerous: min_level = PrintLevel.dangerous_normal stream = PrintStream(min_level=min_level) for package in packages: printer = PackagePrinter(stream, package) if not args.dangerous: printer.print_package() printer.print_requested_permissions() printer.print_permissions() printer.print_activities() printer.print_services() printer.print_receivers() printer.print_providers() continue if package.is_dangerous(): printer.print_package() if package.has_dangerous_permission(): printer.print_permissions() if package.has_dangerous_activity(): printer.print_activities() if package.has_dangerous_service(): printer.print_services() if package.has_dangerous_receiver(): printer.print_receivers() if package.has_dangerous_provider(): printer.print_providers()