V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiebruce
V2EX  ›  程序员

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

  •  
  •   xiebruce ·
    xiebruce · 2021-05-01 20:03:04 +08:00 · 2394 次点击
    这是一个创建于 1306 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    xiebruce
        11
    xiebruce  
    OP
       2021-05-05 12:08:18 +08:00
    @ItzhacLea 好的,谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3898 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:20 · PVG 18:20 · LAX 02:20 · JFK 05:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.