objective-c - macOS kexts 能否将代码注入(inject)特定进程(就像 mach_inject 那样)?

标签 objective-c macos kernel-extension

虽然 mach_inject 是一种方便(但有风险)的解决方案,可将您的一些代码注入(inject)其他应用程序(主要用于自定义 Finder),但自 10.11 以来它不再起作用。 是否有可能通过使用某种 kext 实现相同的功能?

这样做的目的是为特定的应用程序在窗口之上添加一些视觉效果。也许有更简单的解决方案,比如 Accessibility API? 谢谢!

最佳答案

使用kext,你当然可以获得任何进程的任务句柄;这是自 SIP 以来不再适用于用户空间的部分。可以使用 task_get_special_port(task, TASK_KERNEL_PORT, &task_port) 将 kext 中的 task_t 指针转换为特殊端口,然后可以使用 将其发送到用户空间任务>mach_msg_send_from_kernel()。一旦你在用户空间中有了端口,你就可以做一些常见的事情,比如在目标任务中分配、读取和写入内存等。但是,如果目标任务设置了非常严格的代码签名标志,任何在内存中执行代码的尝试未签名的页面将因进程崩溃而失败。这意味着它不适用于大多数 Apple 自己的应用程序。正如您提到的,除代码注入(inject)之外的其他方法可能更简单、更安全。

关于objective-c - macOS kexts 能否将代码注入(inject)特定进程(就像 mach_inject 那样)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53816479/

相关文章:

eclipse - ld : Symbol(s) not found… but they are there…

kernel - USBInterfaceOpen总是报kIOReturnExclusiveAccess错误

macos - 将无代码 KEXT 迁移到无代码 DEXT

objective-c - 如何在 Cocos2D 中的移动 Sprite 上添加文本?

ios - 如何检查核心数据中是否存在对象

html - 在 CSS 中使用 @font-face 使用 OS 9 资源分支字体

process - 处理来自 KEXT 的进程信息

ios - 分配只读属性

ios - 无法以编程方式覆盖 UIButton 选项

python - 如何让 Python 和 distutils 在 Mac OS X 上使用正确的 SDK?