我有一个进程(Launch Daemon),它在 OS X 的根上下文中由 launchd 启动。该进程是代码签名的。如果我破坏了二进制文件,它仍然会再次加载。为了破坏二进制文件,我在十六进制编辑器中打开可执行文件,然后查找并替换任何字符串。有没有办法防止此进程在损坏时启动?
最佳答案
Apple 提供了一个 code signing framework这允许可执行文件检查自己的签名并测试应用程序是否已被篡改。
首先通过调用 SecCodeCopySelf 获取代码对象,然后使用检索到的 SecCodeRef
调用 SecCodeCheckValidity或 SecCodeCheckValidityWithErrors .
如果遇到有效性问题,是否退出取决于您的应用程序。由于它在根上下文中运行,它也可以从 launchd 中卸载自身。
请注意,验证应用程序所需的时间取决于其大小和文件数量。非常大的应用程序包(例如 XCode)可能需要大约 3 分钟,但小型应用程序几乎不会引起注意。
关于objective-c - 防止损坏的可执行文件在 OS X 上启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35860814/