Mac操作系统:有没有任何方法可以在没有内核的情况下嗅探系统打开调用



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

例如,我正在打开test.doc文件,该文件将在msword应用程序中打开,也可以通过右键单击并使用打开来选择任何其他应用程序。在对我的text.doc文件启动这个msword应用程序或任何相关应用程序(系统打开调用(之前,我想等待一段时间,并执行一些操作。

在Mac操作系统的编程语言(C/C++/ObjectiveC/Swift(中,有没有任何方法不去内核。

如有任何帮助,我们将不胜感激。

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

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

原则上,即使应用程序不支持插件,也可以将代码注入到进程中,并为该进程挂接open((系统调用。(例如,使用mach_inject(这样做的缺点是,如果用户双击Finder中的一个文件,然后启动应用程序并立即打开该文件,那么只有很小的时间窗口可以注入代码。我不认为只有用户空间代码就可以可靠地做到这一点。

即使有了内核扩展,由于内核中的各种保护,如KASLR,挂接系统调用也不再可行。有了Mojave,由于SIP,代码注入将不再可行。唯一支持的方法是使用内核授权(KAuth(框架。

相关内容

最新更新