【问题标题】:Codesigning modified binaries (Apple Silicon/M1)对修改后的二进制文件进行协同设计(Apple Silicon/M1)
【发布时间】:2021-03-23 06:20:27
【问题描述】:

M1 处理器上的 macOS 似乎会阻止修改后的二进制文件运行。例如,一个简单的 C hello world:

#import <stdio.h>

int main(void) {
  printf("Hello World!\n");
}

如果我用 Clang 编译并运行它,一切都会按预期工作。但是,如果我进入十六进制编辑器并更改 'H' => 'h'(或其他一些微不足道的东西),内核会立即发送 SIGKILL,即

➜  ~ ✗ ./a.out
[1]    943 killed     ./a.out

我认为这是因为 M1 (https://eclecticlight.co/2020/08/22/apple-silicon-macs-will-require-signed-code/) 上有更严格的代码签名限制,但如果我尝试使用自签名证书对修改后的二进制文件进行签名,我会收到一个相当难以描述的错误:

➜  ~ ✗ codesign -s zbaylin a.out
a.out: the codesign_allocate helper tool cannot be found or used

我知道codesign_allocate 在我的PATH 中,我可以签署未修改 可执行文件,但任何已修改的二进制文件都拒绝签署。

有什么方法可以对这些二进制文件进行签名,或者暂时禁用签名检查?我应该提到,所有这些都适用于我的 2019 MacBook Pro(显然是 x86),所以我认为这与 M1 尤其有关。

谢谢!

【问题讨论】:

  • 您找到解决方案了吗?

标签: macos codesign apple-silicon


【解决方案1】:

这是codesign 工具中的一个已知错误。要解决此问题,请复制修改后的可执行文件,对副本签名,然后用签名副本替换原始可执行文件,它应该可以工作。

更多详情请见here

【讨论】:

    猜你喜欢
    • 2021-03-29
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 2022-01-10
    • 1970-01-01
    • 2021-03-02
    相关资源
    最近更新 更多