def add(args: list) -> None: """ Adds a new keychain entry to the keychain :param args: :return: """ if not _has_minimum_flags_to_add_item(args): click.secho( 'Usage: ios keychain add --key <key name> --data <entry data>', bold=True) return key = _get_flag_value(args, '--key') value = _get_flag_value(args, '--data') click.secho('Adding a new entry to the iOS keychain...', dim=True) click.secho('Key: {0}'.format(key), dim=True) click.secho('Value: {0}'.format(value), dim=True) runner = FridaRunner() runner.set_hook_with_data(ios_hook('keychain/add')) api = runner.rpc_exports() if api.add(key, value): click.secho('Successfully added the keychain item', fg='green') return click.secho('Failed to add the keychain item', fg='red')
def dump(args: list = None) -> None: """ Dumps credentials stored in NSURLCredentialStorage :param args: :return: """ hook = ios_hook('nsurlcredentialstorage/dump') runner = FridaRunner(hook=hook) api = runner.rpc_exports() data = api.dump() runner.unload_script() if not data: click.secho('No credentials found using NSURLCredentialStorage') click.secho('') click.secho(tabulate(data, headers="keys")) click.secho('') click.secho('Found {count} credentials'.format(count=len(data)), bold=True)