gpt4 book ai didi

macos - 即使应用程序在白名单中,AXIsProcessTrustedWithOptions 也返回 NO

转载 作者:行者123 更新时间:2023-12-04 12:11:33 30 4
gpt4 key购买 nike

我们有一个需要访问辅助功能 API 的 Mac App Store 应用程序。从 10.9 Mavericks 开始,对于想要使用辅助功能 API 的应用程序有一个系统白名单(系统偏好设置 → 安全性和隐私 → 辅助功能)。

在为我们的应用程序测试更新时,我们注意到从旧版本升级后,系统告诉我们我们无权使用 Accessibility API( AXIsProcessTrustedWithOptions 返回 NO ),即使我们的应用程序在白名单中,选中了复选框。一旦我们取消选中并重新选中权限,一切正常。

显然,这对我们来说不是一个可以接受的升级方案,尤其是因为可访问性白名单在系统偏好设置中隐藏得如此之深,无法从代码中访问。

这是系统bug吗?有已知的解决方法吗?我们会接受在大更新后必须重新检查辅助功能权限 - 将您的用户导航到系统偏好设置只是为了看到已经选中的复选框,而该功能没有工作,这很糟糕。

更新:

在第一次升级后启动期间,系统在控制台中提示:

16/03/15 06:47:10,343 tccd[190]: Unable to verify code signing identity of com.company.app:  code failed to satisfy specified code requirement(s)
16/03/15 06:47:10,350 universalAccessAuthWarn[401]: AccessibilityAPI: pid 471, is not allowed to access the accessibility API. Path: /path/to/app

奇怪的是,一旦未选中并重新选中可访问性白名单上的权限复选框,即使二进制文件相同,在后续启动期间控制台中也没有错误。

我已经深入了解了实现访问白名单 ( /Library/Application Support/com.apple.TCC/TCC.db ) 的 SQLite 数据库。 access table 上有一个 csreq看起来像一些应用程序指纹/哈希 blob 的列:
$ sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db 'select client, quote(csreq) from access'
com.apple.dt.Xcode|X'…'
com.apple.AccessibilityInspector|X'…'
com.ourcompany.app|X'…'

(引用的哈希被替换为“...”。)

现在,如果我安装旧版本的应用程序并运行它,系统会计算一个哈希值并将其存储在 csreq 中。柱子。如果我执行新应用程序版本的全新安装,我会得到不同的哈希值。

当我安装旧版本然后将其删除时,该列仍包含旧版本的哈希值。这可能是问题的根源吗?因为当我将列设置为 NULL 时在更新应用程序之前,一切正常。计算新的哈希值,可访问性 API 检查返回 YES正如它应该。

Same issue in a different app在 GitHub 上。

最佳答案

有一种叫做指定需求的东西(见 Code Signing Guide)。粗略地说,这是系统用来确定两个应用程序包是否代表同一个应用程序的一组标准,安全方面。可以使用 codesign -dvv --req - YourApp.app 显示指定的需求命令。在我们的例子中,指定的需求检查失败,因为旧的应用版本是使用与开发版本不同的证书进行签名的。

换句话说,当尝试用开发版本替换 Mac App Store 版本时,安全检查将因证书不匹配而失败,您将不得不重新检查某些应用程序权限。据我所知,当您通过 Mac App Store 分发和安装相同的构建时,这不会发生。

关于macos - 即使应用程序在白名单中,AXIsProcessTrustedWithOptions 也返回 NO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29078325/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com