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

程序报错 SIGKILL (Code Signature Invalid), 但是 codesign 说 adhoc 签字正常,这是为什么

  •  
  •   12101111 · 2022-03-25 17:28:29 +08:00 · 2191 次点击
    这是一个创建于 982 天前的主题,其中的信息可能已经有所发展或是发生改变。

    程序是 https://github.com/xiaoyifang/goldendict 用了 homebrew 预编译的 qt6 ,启动就被 kill

    对着 dlopen 打断点:

    * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
        frame #0: 0x00000001872a929c libdyld.dylib`dlopen
    libdyld.dylib`dlopen:
    ->  0x1872a929c <+0>:  mov    x2, x1
        0x1872a92a0 <+4>:  mov    x1, x0
        0x1872a92a4 <+8>:  adrp   x8, 363711
        0x1872a92a8 <+12>: ldr    x0, [x8, #0x670]
    Target 0: (GoldenDict) stopped.
    (lldb) memory read -s1 -fY -c100 $x0
    0x600003e02510: 2f 6f 70 74 2f 68 6f 6d 65 62 72 65 77 2f 43 65  /opt/homebrew/Ce
    0x600003e02520: 6c 6c 61 72 2f 71 74 2f 36 2e 32 2e 33 5f 31 2f  llar/qt/6.2.3_1/
    0x600003e02530: 73 68 61 72 65 2f 71 74 2f 70 6c 75 67 69 6e 73  share/qt/plugins
    0x600003e02540: 2f 69 6d 61 67 65 66 6f 72 6d 61 74 73 2f 6c 69  /imageformats/li
    0x600003e02550: 62 71 6d 6e 67 2e 64 79 6c 69 62 00 00 60 00 00  bqmng.dylib..`..
    0x600003e02560: 30 0b 23 00 00 60 00 00 04 00 00 00 00 00 00 00  0.#..`..........
    0x600003e02570: 00 00 00 10                                      ....
    (lldb) c
    Process 90687 resuming
    zsh: killed     lldb ./GoldenDict.app/Contents/MacOS/GoldenDict
    
    > codesign --deep --verify --verbose /opt/homebrew/Cellar/qt/6.2.3_1/share/qt/plugins/imageformats/libqmng.dylib
    /opt/homebrew/Cellar/qt/6.2.3_1/share/qt/plugins/imageformats/libqmng.dylib: valid on disk
    /opt/homebrew/Cellar/qt/6.2.3_1/share/qt/plugins/imageformats/libqmng.dylib: satisfies its Designated Requirement
    > codesign -d -vvv /opt/homebrew/Cellar/qt/6.2.3_1/share/qt/plugins/imageformats/libqmng.dylib
    Executable=/opt/homebrew/Cellar/qt/6.2.3_1/share/qt/plugins/imageformats/libqmng.dylib
    Identifier=libqmng-55554944be625159fd4d3997b75cdc5985adb4cd
    Format=Mach-O thin (arm64)
    CodeDirectory v=20400 size=841 flags=0x2(adhoc) hashes=20+2 location=embedded
    Hash type=sha256 size=32
    CandidateCDHash sha256=57b38992a7af811c43affc257ac3425b7030d36d
    CandidateCDHashFull sha256=57b38992a7af811c43affc257ac3425b7030d36dc5ccc8f43c6c4eae8bf9292b
    Hash choices=sha256
    CMSDigest=57b38992a7af811c43affc257ac3425b7030d36dc5ccc8f43c6c4eae8bf9292b
    CMSDigestType=2
    CDHash=57b38992a7af811c43affc257ac3425b7030d36d
    Signature=adhoc
    Info.plist=not bound
    TeamIdentifier=not set
    Sealed Resources=none
    Internal requirements count=0 size=12
    

    brew reinstall qt 也没有用

    因为这个mng 图片格式 根本没人用,我就删了这个文件,然后程序就起来了,但是还是觉得很奇怪,好像 adhoc 签名不是用于分发的?为什么 homebrew 的二进制文件没有用苹果的开发者签名。

    16 条回复    2022-05-11 15:35:03 +08:00
    ngn999
        1
    ngn999  
       2022-03-25 17:34:32 +08:00 via iPhone
    我下午刚给这个项目提了个 pr ,支持了 apple silicon ,你按最新的 readme 来的吗?
    ngn999
        2
    ngn999  
       2022-03-25 17:38:16 +08:00 via iPhone
    我这边的情况是可以用命令行 build 跑起来。用 Qt Creator 能 build ,但 run 时,crash 在 dyld ,应该也是签名问题,但自己双击,运行也没毛病
    12101111
        3
    12101111  
    OP
       2022-03-25 17:56:07 +08:00
    我自己改的 goldendict.pro 文件,和你的 pr 一模一样. 从命令行跑或者是双击运行都是报错一样的错误,但是删了这个文件就好使了
    12101111
        4
    12101111  
    OP
       2022-03-25 18:03:04 +08:00
    看来是这个文件坏了

    > codesign --verify --verbose /opt/homebrew/opt/libmng/lib/libmng.2.dylib
    /opt/homebrew/opt/libmng/lib/libmng.2.dylib: invalid signature (code or signature have been modified)
    In architecture: arm64

    一直有传闻 apfs 会坏文件, 看来我是遇上了
    ngn999
        5
    ngn999  
       2022-03-25 18:17:24 +08:00 via iPhone
    我没印象有依赖这个库。
    可能我 qt 是从 qt 官网装的。
    lindt99cocoa
        6
    lindt99cocoa  
       2022-03-25 19:29:46 +08:00   ❤️ 1
    @12101111 APFS 只对元数据有校验和,对数据没有,很难算得上可靠,不如 btrfs 和 zfs
    ngn999
        7
    ngn999  
       2022-03-25 21:22:13 +08:00
    楼主你能直接用 Qt Creator 把这个 GoldenDict.app 跑起来吗?
    我这发现, build 成功, 但 Run 失败, 报 crash, 还不是签名的问题

    但是如果在 Run 的配置里, 设置 Run as root user 则又能成功.在 Finder 里找到 .app 双击能也成功运行.
    ngn999
        8
    ngn999  
       2022-03-25 21:22:47 +08:00
    自带的一个 QWebEngine 的 demo 直接 run 起来没问题.
    ngn999
        9
    ngn999  
       2022-03-25 22:19:23 +08:00
    啊,弄了半天发现问题了, 默认的 Run 的环境变量是和 Build 用的一样的, 但是会多设置 DYLD_LIBRARY_PATH 和 DYLD_FRAMEWORK_PATH, 把这两个给 unset 掉就好了.
    :(
    upwell
        10
    upwell  
       2022-03-26 21:58:58 +08:00
    @12101111
    想不起来是什么原因了,可以重启一下系统可能就会好,好像是说系统的安全策略,命令行的工具,如果是替换的,binary 变了,就会报这个问题。

    遇到过两次了,自己编译的程序,cp 过去替换,运行的时候就会被系统 kill 掉,但是把原来的删除掉,再 mv 过去就不会有问题。

    brew reinstall qt
    可能不会删除 binary ,可以先 uninstall 掉,然后看看 binary 有没有被删除掉,如果没有的话就删除掉,然后再安装。

    真不行,就重启系统!
    nonwill
        11
    nonwill  
       2022-03-28 23:42:48 +08:00
    应 @ngn999 “大佬”邀,也来凑个热闹:

    客观的讲,对 GoldenDict 的官方版本代码的评价,我“比较”认同某词典论坛“帮主”的认定:shi 山
    客观的讲,我对 GoldenDict 的官方版本设计的评价,水平很高

    对 GoldenDict 的官方版本中的一些问题,主要出在那堆“shi 山”上,这里不做具体分析,GoldenDict++ 所修复的问题(非改进内容),90 都在那堆“shi 山”上。

    个人对 xiaoyifang 版本当前实现(代码质量)的评价:“shi 山++” -- 更甚之处是将 GoldenDict 原有的良好的设计给破坏掉了,所以不可能变得更好。我对 xiaoyifang 的评价是:有问题都可能是 Qt 的问题,还可能是 WebEngine 的问题,还可能是 iconv 的问题...,可能吗?一切皆有可能,哈哈哈

    @ngn999 是大佬啦,您的能力应不亚于鄙人与 xiaoyifang 的,屈尊在这里讨论这样的问题令在下敬佩至极。
    ngn999
        12
    ngn999  
       2022-03-29 07:36:00 +08:00 via iPhone
    @nonwill 你就算技术再高,但是这做事,说话也太缺德了。
    我听到过很多中国开发者在开源里的缺德事,你打破了我的想像。

    xiaoyifang 好好地在做升级,提 pr ,你用不着在 pr 里各种咬人。不想好好帮忙的话,闭嘴就好了。
    ngn999
        13
    ngn999  
       2022-03-29 07:43:08 +08:00 via iPhone
    @nonwill 这样的本来直接 block 了就算了,但是看了他在其他网站的评论,实在有点过分。没忍住

    和狗咬,一嘴毛,算了,还是 block 了。
    nonwill
        14
    nonwill  
       2022-03-29 08:07:11 +08:00
    @ngn999 当然了,你超脱于“缺德”之列,高尚至此 -- 已几无无德可言,剃了毛的狗,过分也不过如此。所谓“嘴上无毛,办事不牢”,送你吧,哈哈哈
    nonwill
        15
    nonwill  
       2022-03-29 10:29:34 +08:00
    @ngn999 抱着学习的态度 View 了下大佬您 Macbook_scroll_issue 的实现: https://github.com/ngn999/goldendict/commits/bugfix/Macbook_scroll_issue

    可问大佬啊,您不用 Qt 的信号槽,而用回调,您这里回调较信号槽有什么优势呢?
    nonwill
        16
    nonwill  
       2022-05-11 15:35:03 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2600 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:50 · PVG 18:50 · LAX 02:50 · JFK 05:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.