gpt4 book ai didi

objective-c - 从 Mac 应用程序可执行文件中删除代码签名

转载 作者:行者123 更新时间:2023-12-01 22:10:54 25 4
gpt4 key购买 nike

我有一个已签名的 Mac 应用程序可执行文件。我使用代码签名的可执行文件的内容初始化了 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

从崩溃日志中可以清楚地看出,它是由于无效的代码签名而崩溃的。我没有该应用程序的源代码,我只是想修复某人旧应用程序中的一些错误。

所以我的问题是如何删除 Objective C 中二进制文件的代码签名?

最佳答案

感谢所有道德传道者,感谢你们照亮了我的人生,展示了人生的道德之路。 😏

据我所知,这根本没有很好的记录,但您也许可以通过以下方式删除代码签名:

      codesign --remove-signature appName

替代方式:

修补解密的文件(删除 LC_CODE_SIGNATURE)—————————————————————————————

在继续之前,请确保您已精简文件(同上 --arch i386)。

要删除代码签名,您需要执行以下步骤:注意:Intel Mach-O 二进制文件以 0xCEFAEDFE 开头 PPC Mach-O 二进制文件以 0xFEEDFACE 开头

    • 修改加载命令的数量(从偏移0x10/16开始,4B大小)。

    • 如果加载命令是例如0x2C 减去 0x1 -> 0x2B。

    • 修改加载命令的大小(从偏移 0x14/20 开始,4B 大小)。
    • 请记住,对于 Intel,您需要交换字节才能获取值...如果它读作 FC 17 00 00 它实际上是 0x000017FC
    • 从值中减去 0x10 或 16。在上面的例子中 -> 0x000017EC
    • 再次交换字节(对于 Intel)。因此 0x000017EC 是 EC 17 00 00
    • 修改 LC_CODE_SIGNATURE 加载命令条目中的 16 个字节。将它们替换为 16 x 0x00。此条目在 Intel 上以 0x1D000000 开头,在 PPC 上以 0x0000001D 开头。
    • 这会修改加载命令 (8B) 和加载命令 (8B) 的内容。在这种情况下,总共的加载命令应该始终是:英特尔:0x1D00000010000000PPC:0x0000001D00000010
    • 删除实际的代码签名。在 Intel 和 PPC 上均以 0xFADE0CC0 开头。将整个代码签名替换为 0x00 字节。

关于objective-c - 从 Mac 应用程序可执行文件中删除代码签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44872071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com