macOS kexts可以向特定进程注入代码吗(像mach_inject一样)?

时间:2018-12-17 13:43:07

标签: objective-c macos kernel-extension

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

此操作的目的是在特定应用程序的窗口顶部添加一些视觉效果。也许有一个更简单的解决方案,例如Accessibility API? 谢谢!

1 个答案:

答案 0 :(得分:3)

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

相关问题