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

2022-03-25 17:28:29 +08:00
 12101111

程序是 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 的二进制文件没有用苹果的开发者签名。

1929 次点击
所在节点    macOS
16 条回复
ngn999
2022-03-25 17:34:32 +08:00
我下午刚给这个项目提了个 pr ,支持了 apple silicon ,你按最新的 readme 来的吗?
ngn999
2022-03-25 17:38:16 +08:00
我这边的情况是可以用命令行 build 跑起来。用 Qt Creator 能 build ,但 run 时,crash 在 dyld ,应该也是签名问题,但自己双击,运行也没毛病
12101111
2022-03-25 17:56:07 +08:00
我自己改的 goldendict.pro 文件,和你的 pr 一模一样. 从命令行跑或者是双击运行都是报错一样的错误,但是删了这个文件就好使了
12101111
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
2022-03-25 18:17:24 +08:00
我没印象有依赖这个库。
可能我 qt 是从 qt 官网装的。
lindt99cocoa
2022-03-25 19:29:46 +08:00
@12101111 APFS 只对元数据有校验和,对数据没有,很难算得上可靠,不如 btrfs 和 zfs
ngn999
2022-03-25 21:22:13 +08:00
楼主你能直接用 Qt Creator 把这个 GoldenDict.app 跑起来吗?
我这发现, build 成功, 但 Run 失败, 报 crash, 还不是签名的问题

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

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

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

真不行,就重启系统!
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
2022-03-29 07:36:00 +08:00
@nonwill 你就算技术再高,但是这做事,说话也太缺德了。
我听到过很多中国开发者在开源里的缺德事,你打破了我的想像。

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

和狗咬,一嘴毛,算了,还是 block 了。
nonwill
2022-03-29 08:07:11 +08:00
@ngn999 当然了,你超脱于“缺德”之列,高尚至此 -- 已几无无德可言,剃了毛的狗,过分也不过如此。所谓“嘴上无毛,办事不牢”,送你吧,哈哈哈
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
2022-05-11 15:35:03 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/842896

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX