Mac OS:有没有办法嗅探没有内核的系统打开呼叫

时间:2018-07-22 23:47:50

标签: swift macos filesystems kernel-extension

我必须从Mac OS的任何位置打开文件,并且我想在文件在任何相关应用程序中打开之前进行一些操作。有什么办法可以嗅探系统打开的呼叫并保持一段时间并进行一些操作。

例如,我正在打开test.doc文件,该文件将在msword应用程序中打开,或者可以通过右键单击并选择打开其他应用程序。我想保持一段时间并想执行一些操作,然后再在我的text.doc文件上启动此ms word应用程序或任何相关应用程序(系统打开调用)。

Mac OS(C / C ++ / ObjectiveC / Swift)的编程语言是否有任何方法,而无需使用内核。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

据我所知,完全拦截/挂钩系统调用只能在kext中完成。

如果是针对特定应用程序的,并且该应用程序支持动态加载的插件,则可以编写一个钩住系统调用的插件。

原则上,即使应用程序不支持插件,也可以将代码注入到进程中并为该进程挂接open()syscall。 (例如使用mach_inject)的缺点是,例如用户双击Finder中的文件,这将启动应用程序并立即打开文件,您只有很短的时间窗可以注入代码。我认为没有一种方法可以仅使用用户空间代码来可靠地完成此操作。

答案 1 :(得分:1)

即使具有内核扩展,由于内核中的各种保护(例如KASLR),挂接syscall也不再可行。使用Mojave,由于SIP,代码注入将不再可行。唯一受支持的方法是使用Kernel Authorisation (KAuth) framework