Mac App 删除 com.apple.quarantine 与 codesign 覆盖签名的区别? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
xiebruce
V2EX    程序员

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

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

    对于一些安装不了的 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  
    PRO
       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     Solana     2258 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 16:04 PVG 00:04 LAX 09:04 JFK 12:04
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86