You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Mach-O可执行文件后触发SIGKILL,如何正常执行?

问题分析

你遇到的核心问题是Apple Silicon macOS的AMFI(Apple Mobile File Integrity)机制在严格校验代码签名:修改二进制后原签名的完整性被破坏,而手动替换哈希无法修复签名——因为Mach-O的代码签名是一个完整的加密签名块,不是单个可替换的哈希值,它包含了文件各段的哈希摘要,且由私钥签名,单纯修改哈希字段根本过不了加密校验。

解决方法

以下两种路径可解决问题,根据你的实验场景选择:

方法一:临时禁用AMFI(快速测试用)

这是最快让修改后的二进制运行的方式,仅适合本地学习实验:

  • 重启Mac,按住电源键直到进入恢复模式
  • 打开终端,执行命令:
    csrutil disable --no-internal
    
  • 重启系统后,修改后的c.out即可正常执行
  • 实验完成后务必恢复安全机制,重新启用AMFI:
    csrutil enable
    

方法二:重新签名二进制(合规方式)

如果不想关闭系统安全校验,可给修改后的二进制重新签名:

  1. 创建自签名代码签名证书:
    • 打开「钥匙串访问」→ 顶部菜单「证书助理」→「创建证书」
    • 名称填MyTestSigner,证书类型选「代码签名」,勾选「让我覆盖这些默认值」,按引导完成创建
  2. 用codesign工具重新签名c.out:
    codesign -s "MyTestSigner" --force --deep c.out
    
  3. 执行签名后的c.out即可正常运行
为什么替换哈希没用?

Mach-O的LC_CODE_SIGNATURE加载命令对应的签名数据块包含:

  • 文件各代码段、数据段的哈希摘要
  • 签名者的证书链
  • 用私钥对上述内容生成的数字签名
    你手动替换的只是其中一个片段,无法匹配整个签名块的加密校验逻辑,AMFI依然会判定签名无效。

内容的提问来源于stack exchange,提问作者Kirkland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:26:00