在OS X 10.13上签名旧Director projector:修改__LINKEDIT段
解决旧Director Projector的CodeSign问题:修复被附加资源破坏的Mach-O结构
问题背景
我最近碰到了个挺棘手的代码签名问题,对象是一款没法重新发布的旧Director projector——既拿不到原始源码,也找不到对应的Director软件来重新生成程序。
未签名时的运行情况特别奇怪:
- 双击运行时,Finder会弹出「Where is...」窗口,询问嵌入资源的位置
- 但直接在终端里运行
Contents/MacOS下的二进制文件,手动解压末尾附加的归档后,程序就能正常启动
签名时遇到的错误
尝试用codesign签名时,直接抛出错误:
main executable failed strict validation
加上--no-strict选项后,又出现新的报错:
__LINKEDIT segment does not cover the end of the file
我推测是二进制文件末尾附加的资源归档破坏了Mach-O文件的结构,导致签名工具无法识别正确的文件边界。
已尝试的无效方案
- 用
macho_edit工具修改__LINKEDIT段,没有效果 - 用
jtool工具调整相关参数,也没能解决问题
问题更新与后续计划
- 更新1:调整__LINKEDIT段的
File Size和VM Size后,签名还是失败,报错变成了:file not in an order that can be processed - 更新2:参考PyInstaller的类似问题解决方案,发现需要同时修正两个关键部分:
- __LINKEDIT段的相关参数
LC_SYMTAB中的字符串表大小
接下来打算按照这个思路尝试修改,看看能不能完成签名。
内容的提问来源于stack exchange,提问作者jaygooby
相关产品推荐
相关产品推荐

