我有一个签名的mac app可执行文件。我用代码签名可执行文件的内容初始化NSMutableData
。然后我修改了可执行文件的一部分,并保存了修改后的可执行文件。当我尝试使用此修改后的可执行文件运行原始应用程序时,应用程序崩溃了。
崩溃日志是,
System Integrity Protection: disabled
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_CRASH (Code Signature Invalid)
Exception Codes: 0x0000000000000001, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: Namespace CODESIGNING, Code 0x2
从崩溃日志中可以清楚地看到它因代码签名无效而崩溃。 我没有应用程序的源代码,我只是想在别人的旧应用程序中修复一些错误。
所以我的问题是如何在目标c中删除二进制代码签名?
答案 0 :(得分:5)
对于所有的道德传教士,感谢我的生活,并展示了生活的道德道路。
根据我所知,它根本没有完整记录,但您可以通过以下方式删除代码签名:
codesign --remove-signature appName
替代方式:
修补解密文件(删除LC_CODE_SIGNATURE) ------------------------------
确保在继续之前已将文件缩小(ditto --arch i386)。
要删除代码签名,您需要执行以下步骤: 注意:Intel Mach-O二进制文件以0xCEFAEDFE开头 PPC Mach-O二进制文件以0xFEEDFACE
开头修改加载命令的数量(从偏移量0x10 / 16开始,4B大小)。
如果加载命令是例如0x2C减去0x1 - > 0x2B访问。