对于一些安装不了的 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 开发的童鞋,这两句具体有什么不同呀?特别是为什么有些软件删除那个属性后不行,但重签名后却可以运行,如果说删除那个属性是为了绕过公证,那重签名又是什么呢?感觉签名这个才是绕过公证呀,有点不太明白。
1
SingeeKing 2021-05-01 23:13:41 +08:00
苹果对于网络下载的文件会有额外验证,com.apple.quarantine 仅仅是删除了「来源于网络」这个标识
|
2
xiebruce OP @SingeeKing 哦哦
|
3
xiebruce OP 还有没有小伙伴知道更多相关知识的呀?
|
4
ItzhacLea 2021-05-03 09:46:55 +08:00
当下载的文件有 com.apple.quarantine 属性时,就会触发 GateKeeper 和 Notarization 等检查;换句话说如果文件没有这个 flag 的话,系统就不会做如上检查。
|
5
xiebruce OP @ItzhacLea 那`sudo spctl --master-disable` 这个启用任何来源,又跟这个有什么区别呢?如果不启用任何来源,app 首次打开就会受到“assessment subsystem(评估子系统)”的评估(man spctl 可以看到),以确认是否有恶意程序,不知道这个“assessment subsystem(评估子系统)”与你说的“assessment subsystem(评估子系统)”有什么区别?
|
6
xiebruce OP @ItzhacLea 前面那句打错了,是“assessment subsystem(评估子系统)”与你说的“GateKeeper 和 Notarization 等检查”有什么区别?
|
7
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 主要是为了跳过公证检查 |
8
xiebruce OP @ItzhacLea 哦哦,原来 man spctl 里有写,我虽然有大概看,但是没详细看,感谢提醒,我要好好仔细看看。
|