在 Mac OS X 中获取进程创建通知

Pet*_*ima 3 macos hook kernel-extension

我正在尝试为 Mac OS X 编写 kext,它会在任何进程启动时收到通知。

在 Windows 中,您可以通过调用 PsSetLoadImageNotifyRoutine(...) 并指定将在进程启动时调用的回调来完成此操作。这是记录的方式,它适用于从 Win 2k 开始的所有 Windows。

Mac 上有类似的吗?使用 kauth 进程侦听器似乎可以实现这一点,但是 OS X 中从未实现过进程范围。

另一种选择是挂钩 SYS_execve 和朋友,但这是未记录且不受支持的方式。我真的不想走这条路。

我不需要任何取消 - 只想在进程启动时收到通知,并获取它的 pid 和路径。

mit*_*ity 5

嗯,你的问题有点模棱两可。

“在任何进程启动时收到通知”恕我直言意味着fork系统调用,而不是execve. 但是,我不知道您是否可以fork通过任何官方 API收到通知。

如果这execve是您感兴趣的内容,请查看内核授权 (kauth) API

您可以在execve 执行之前注册KAUTH_SCOPE_VNODE并跟踪以KAUTH_VNODE_EXECUTE获取通知(并且可能通过回调的返回值拒绝它成功);或注册KAUTH_SCOPE_FILEOP并跟踪KAUTH_FILEOP_EXEC以在execve()执行后得到通知。