协同设计修改后的二进制文件(Apple Silicon/M1)
Codesigning modified binaries (Apple Silicon/M1)
M1 处理器上的 macOS 似乎会阻止 运行ning 修改二进制文件。例如,一个简单的 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 特别有关。
谢谢!
这是 codesign
工具中的一个已知错误。要解决此问题,请复制修改后的可执行文件,签署副本,然后将原始可执行文件替换为已签署的副本,它应该可以工作。
有关详细信息,请参阅 here。
M1 处理器上的 macOS 似乎会阻止 运行ning 修改二进制文件。例如,一个简单的 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 特别有关。
谢谢!
这是 codesign
工具中的一个已知错误。要解决此问题,请复制修改后的可执行文件,签署副本,然后将原始可执行文件替换为已签署的副本,它应该可以工作。
有关详细信息,请参阅 here。