非常感谢无私的郑佬分享某站的资源,看完 mach 相关章节后记录在 m1(arm) 下折腾远程进程注入的过程。
Mach 最初是由卡内基梅隆大学作为微内核开发的,现如今它是 macOS 内核 XNU 的核心。其中使用 task 的概念作为共享资源的最小单位,任务之间的通信通过基于单向通信通道的 Mach IPC 进行,这些消息在 port 之间传递,一个端口与之关联还有内核权限,任务可以通过端口权限发送或接收消息,端口权限决定任务可以执行哪些操作。
HOST_PORT
允许检索关于系统本身的各种信息。
HOST_PRIV_PORT
允许加载或卸载内核扩展。
TASK PORT
控制目标任务,可以读写它的虚拟内存,创建或停止线程。
由于任务端口非常强大,因此对它们的访问受到非常严格的控制。除了 com.apple.system-task-ports
是由 Apple 独有权限并不会授权给第三方应用之外还有如下几种情况可以使用任务端口:
目标应用程序拥有 com.apple.security.get-task-allow
授权。
如果目标应用程序不是 Apple 平台二进制文件,也没使用强化运行时(Hardened Runtime
)编译的,以 root 身份运行,就可以获得它的端口。
或者恶意程序带着com.apple.security.cs.debugger
调试工具授权,则在运行时弹出授权对话框需要用户的允许。
主要步骤如下: