当前位置: 首页 > 知识库问答 >
问题:

代码签名修改的二进制文件(Apple Silicon/M1)

鲍俊杰
2023-03-14

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

#import <stdio.h>

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

如果我用Clang编译并运行它,一切都会按预期进行。但是,如果我进入一个十六进制编辑器并更改'H'=

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

我认为这是因为M1上有更严格的代码签名限制(html" target="_blank">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有关。

谢啦!

共有1个答案

马煌
2023-03-14

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

有关更多详细信息,请参见此处。

 类似资料:
  • #include <stdio.h> #include <stdlib.h> void drawing (int n) { if (n != 0) puts ("Try again?\nAll you need is a dollar, and a dream."); else puts ("You win $3000!"); } int main (void) {

  • 本文向大家介绍Go递归修改文件名的实例代码,包括了Go递归修改文件名的实例代码的使用技巧和注意事项,需要的朋友参考一下 在生活中我们往往有这样的需求,就是从网上找的文件资源经常包含了一些无用信息,而且在它的子目录下也同样存在,如果我们手动一个个的修改的话会特别麻烦,也特别耗时,我们可以考虑把这件事交给计算机来做。 如下图,我的桌面有一个名为dir【我爱你】的目录,而且这个目录下的子目录和文件都包含

  • 本文向大家介绍python批量修改文件名的实现代码,包括了python批量修改文件名的实现代码的使用技巧和注意事项,需要的朋友参考一下

  • 我正在尝试为二叉搜索树类编写一种方法来修改平衡的普通树,这使得树仅在一侧具有节点。 从元素在不平衡树中出现的顺序来看,依序遍历(左、中、右)之间似乎存在某种关系。

  • 难道不应该从它的二进制文件中获得源代码吗?既然编译是将高级语言(源代码)转换为低级语言(机器代码)的过程,难道我们不能为了获得源代码而直接反转这个过程吗?如果没有,为什么?

  • 问题内容: 我的一些同事相信,将构建工件提交到Subversion存储库是一个好主意。争论在于通过这种方式,在测试机器上的安装和更新很容易-只需“向上”! 我敢肯定,有人反对这种不良做法,但我能想到的只是la脚的,例如“占用更多空间”。什么是最好的杀手级理由不这样做?而我们应该采取哪些其他方法呢? 如果这有所不同,则用于Java代码。一切都是从Eclipse编译的(没有自动PDE构建)。 当我说添