对于一些安装不了的 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, 可以靈活運用搜索引擎
好的,谢谢