Esempio n. 1
0
 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={})
Esempio n. 2
0
 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=[])
Esempio n. 3
0
 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)
Esempio n. 4
0
 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=[])
Esempio n. 5
0
    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)
Esempio n. 6
0
    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="")
Esempio n. 7
0
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))
Esempio n. 8
0
 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)
Esempio n. 9
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")
Esempio n. 10
0
    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=[])
Esempio n. 11
0
 def __init__(self, obj: dict):
     super().__init__(obj)
     self.permission = utils.get_item(obj,
                                      "permission",
                                      type=Permission,
                                      default=Permission.default())
Esempio n. 12
0
 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")
Esempio n. 13
0
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()