wei_2016 2019-08-27 13:34 采纳率: 0%
浏览 160

Mac root 级别的应用,怎么跳过授权操作普通用户的default keychain?

1.这是一个root级别的mac app。
2.需要操作其他普通用户的default keychain。
3.需要跳过授权过程,直接操作。

我用了以下的方法:

SecKeychainOpen
SecKeychainItemCreateFromContent
SecKeychainFindGenericPassword
SecKeychainItemDelete

现在的问题就是:
怎么能做到不需要授权就能操作其他普通用户的default keychain?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-31 11:57
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要实现这个功能,你需要使用Objective-C的CFPreferencesCopyStringCFPreferencesSetString方法来读取和设置默认密码。但是请注意,这可能会违反安全标准,因为这些方法允许你访问用户账户的信息。

    以下是一个示例代码:

    NSString *defaultKeychainPath = @"/Library/Preferences/com.apple.keychain";
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    
    NSString *keychainName = @"com.example.appname";
    NSString *password = @"your_password_here";
    
    [NSKeyedArchiver archivedDataWithRootObject:keychainName];
    NSData *data = [NSKeyedUnarchiver unarchiveObjectWithData:[NSData dataWithBytes:nil length:0]];
    
    // 寻找并打开默认的Keychain文件
    SecItemRef itemRef = SecKeychainItemCreateFromContent(data, nil);
    
    if (itemRef) {
        // 获取键值对列表
        NSArray *items = SecItemCopyItems(itemRef);
    
        for (int i = 0; i < items.count; ++i) {
            SecItemRef item = items[i].ref;
            if ([items[i].string isEqual:keychainName]) {
                // 设置新密码
                SecItemSetValue(item, password, sizeof(password), kSecAttrValue);
                SecItemRelease(item);
                break;
            }
        }
    
        // 保存更改
        SecItemRelease(itemRef);
    }
    
    // 关闭Keychain服务
    SecItemRelease(itemRef);
    

    这段代码首先获取到默认Keychain路径,然后尝试查找指定名称的Keychain文件。如果找到了,它会创建一个新的密钥,并将其与指定的密码关联起来。最后,它会关闭Keychain服务。

    注意:这段代码可能无法在所有环境中工作,因为它涉及到敏感信息的处理,例如密钥、密码等。如果你需要在生产环境中使用此代码,请确保遵循相关法律法规和公司政策。

    评论

报告相同问题?

悬赏问题

  • ¥15 Attributeerror:super object has no attribute '__sklearn_tags__'_'
  • ¥15 逆置单链表输出不完整
  • ¥15 宇视vms-B200-A16@R启动不了,如下图所示,在软件工具搜不到,如何解决?(操作系统-linux)
  • ¥500 寻找一名电子工程师完成pcb主板设计(拒绝AI生成式答案)
  • ¥15 关于#mysql#的问题:UNION ALL(相关搜索:sql语句)
  • ¥15 matlab二位可视化能否针对不同数值范围分开分级?
  • ¥15 已经创建了模拟器但是不能用来运行app 怎么办😭自己搞两天了
  • ¥15 关于#极限编程#的问题,请各位专家解答!
  • ¥20 win11账户锁定时间设为0无法登录
  • ¥45 C#学生成绩管理系统