Mac App 删除 com.apple.quarantine 与 codesign 覆盖签名的区别?

2021-05-01 20:03:04 +08:00
 xiebruce

对于一些安装不了的 macOS app,经常使用这两招:

xattr -r -d com.apple.quarantine /path/to/xxx.app

codesign --sign - --force --deep /path/to/xxx.app

查资料,一般会说删除 com.apple.quarantine 属性是为了绕过公证。

而覆盖签名,解释大概是这样的:如果用一个横杠作为身份标识,那么特殊的(一种专门的,临时的)签名会生效,这种签名其实是根本不使用身份标识,而是完全识别一个代码实例。

我看有些 macOS 软件(特别是破解的),有时候用 xattr 删除 com.apple.quarantine 属性后还是无法运行,但是用 codesign 重签名后,就可以。

我想问一下做 macOS app 开发的童鞋,这两句具体有什么不同呀?特别是为什么有些软件删除那个属性后不行,但重签名后却可以运行,如果说删除那个属性是为了绕过公证,那重签名又是什么呢?感觉签名这个才是绕过公证呀,有点不太明白。

2094 次点击
所在节点    程序员
11 条回复
SingeeKing
2021-05-01 23:13:41 +08:00
苹果对于网络下载的文件会有额外验证,com.apple.quarantine 仅仅是删除了「来源于网络」这个标识
xiebruce
2021-05-01 23:16:23 +08:00
@SingeeKing 哦哦
xiebruce
2021-05-02 10:51:36 +08:00
还有没有小伙伴知道更多相关知识的呀?
ItzhacLea
2021-05-03 09:46:55 +08:00
当下载的文件有 com.apple.quarantine 属性时,就会触发 GateKeeper 和 Notarization 等检查;换句话说如果文件没有这个 flag 的话,系统就不会做如上检查。
xiebruce
2021-05-03 17:00:24 +08:00
@ItzhacLea 那`sudo spctl --master-disable` 这个启用任何来源,又跟这个有什么区别呢?如果不启用任何来源,app 首次打开就会受到“assessment subsystem(评估子系统)”的评估(man spctl 可以看到),以确认是否有恶意程序,不知道这个“assessment subsystem(评估子系统)”与你说的“assessment subsystem(评估子系统)”有什么区别?
xiebruce
2021-05-03 17:01:36 +08:00
@ItzhacLea 前面那句打错了,是“assessment subsystem(评估子系统)”与你说的“GateKeeper 和 Notarization 等检查”有什么区别?
ItzhacLea
2021-05-03 19:56:00 +08:00
@xiebruce hi,

man spctl 手册里提到的 assessment subsystem 是 GateKeeper 和 syspolicyd, 前者负责检查签名是否存在及有效,后者抉择是否放行 app 的启动。比如你的 GateKeeper 设置是 App Store only, 那么运行从网络上下载的 app 就会被 syspolicyd 拒绝。

Notarization 就是你在帖子里提到的公证。

xattr -rd com.apple.quarantine 主要是为了跳过公证检查
xiebruce
2021-05-03 20:20:29 +08:00
@ItzhacLea 哦哦,原来 man spctl 里有写,我虽然有大概看,但是没详细看,感谢提醒,我要好好仔细看看。
xiebruce
2021-05-03 20:35:33 +08:00
@ItzhacLea 不对呀,我全文搜索了,man spctl 里根本没有 gatekeeper 这个词呀(大写小写,单独 keep 这个单词都搜索了,根本没有),另外 syspolicyd 这个词也只出现了一次,是在 See Also 里面,啥也没错,就是 see also 而已

SEE ALSO
codesign(1), syspolicyd(1)
ItzhacLea
2021-05-03 21:18:36 +08:00
@xiebruce

hi, 可以靈活運用搜索引擎

xiebruce
2021-05-05 12:08:18 +08:00
@ItzhacLea 好的,谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/774539

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX