MacOS на процессоре M1, похоже, не позволяет запускать модифицированные двоичные файлы. Например, простой 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, и я могу подписывать немодифицированные исполняемые файлы, но любой измененный двоичный файл отказывается подписывать.

Есть ли способ подписать эти двоичные файлы или временно отключить проверку подписи? Я должен упомянуть, что все это работает на моем MacBook Pro 2019 года (очевидно, x86), поэтому я думаю, что это как-то связано, в частности, с M1.

Благодарность!

1
zbaylin 11 Дек 2020 в 23:16

1 ответ

Лучший ответ

Это известная ошибка в инструменте codesign. Чтобы обойти это, сделайте копию измененного исполняемого файла, подпишите копию, затем замените исходный исполняемый файл подписанной копией, и он должен работать.

Дополнительные сведения см. здесь.

1
Andreas 26 Дек 2020 в 14:05