二进制修改后未加载 OSX 用户级应用程序首选项(plist)

逆向工程 操作系统 修补 二进制编辑 苹果系统
2021-06-29 06:27:19

我正在处理一个需要修改现有 OSX 应用程序dylib二进制文件的项目(几个字节来纠正过时的 URL)。我无权访问应用程序源代码和代码签名证书。修补应用程序后,一切正常,只是它不会plist~/Library/Preferences.

如果我这样做,即使没有修补/修改应用程序:

codesign -s "Local Codesign" -f ./lib<name>.dylib

并执行它不从中读取其属性的应用程序

~/Library/Preferences/<application id>.plist

包括以前打开的文件或连接的服务器。如果我复制回原件(开发人员签名),dylib那么一切正常:再次读回属性。

一件奇怪的事情:即使我的本地签名二进制plist文件无法读取文件,如果我更改某些内容,更改也会被写回。因此,如果这是与 OSX 安全相关的东西,它似乎只会影响读取。

现在我的问题和假设:

  • 当我假设这是某种 OSX 安全机制确保plist无法从非同一开发人员签名的二进制文件访问应用程序数据时,我是否正确如果是,为什么它只能写入和保护读取?
  • 在修改 OSX 二进制文件时,你们有没有发现类似的问题?
  • 我该如何调试这种行为?
  • 是的:任何解决方案?

欢迎任何意见和反馈。

1个回答

我可以通过谷歌搜索错误消息找到一些提示,例如:

https://stackoverflow.com/a/40705362/422797

看起来它与 plist 无关,但可能与程序使用的某些安全 API(例如钥匙串访问或SecCodeCheckValidity)有关。显然,操作系统根据文件的 vnode 缓存签名信息,如果您就地替换它会使签名无效。链接的答案提出了一些解决方法。