技术解析

Mac App 删除 com.apple.quarantine 与 codesign 覆盖签名的区别?
0
2021-06-02 17:38:42
idczone

对于一些安装不了的 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 开发的童鞋,这两句具体有什么不同呀?特别是为什么有些软件删除那个属性后不行,但重签名后却可以运行,如果说删除那个属性是为了绕过公证,那重签名又是什么呢?感觉签名这个才是绕过公证呀,有点不太明白。


苹果对于网络下载的文件会有额外验证,com.apple.quarantine 仅仅是删除了「来源于网络」这个标识

哦哦

还有没有小伙伴知道更多相关知识的呀?

当下载的文件有 com.apple.quarantine 属性时,就会触发 GateKeeper 和 Notarization 等检查;换句话说如果文件没有这个 flag 的话,系统就不会做如上检查。

那`sudo spctl --master-disable` 这个启用任何来源,又跟这个有什么区别呢?如果不启用任何来源,app 首次打开就会受到“assessment subsystem(评估子系统)”的评估(man spctl 可以看到),以确认是否有恶意程序,不知道这个“assessment subsystem(评估子系统)”与你说的“assessment subsystem(评估子系统)”有什么区别?

前面那句打错了,是“assessment subsystem(评估子系统)”与你说的“GateKeeper 和 Notarization 等检查”有什么区别?

hi,
man spctl 手册里提到的 assessment subsystem 是 GateKeeper 和 syspolicyd, 前者负责检查签名是否存在及有效,后者抉择是否放行 app 的启动。比如你的 GateKeeper 设置是 App Store only, 那么运行从网络上下载的 app 就会被 syspolicyd 拒绝。
Notarization 就是你在帖子里提到的公证。
xattr -rd com.apple.quarantine 主要是为了跳过公证检查

哦哦,原来 man spctl 里有写,我虽然有大概看,但是没详细看,感谢提醒,我要好好仔细看看。

不对呀,我全文搜索了,man spctl 里根本没有 gatekeeper 这个词呀(大写小写,单独 keep 这个单词都搜索了,根本没有),另外 syspolicyd 这个词也只出现了一次,是在 See Also 里面,啥也没错,就是 see also 而已
SEE ALSO
codesign(1), syspolicyd(1)


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


好的,谢谢

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服