OSX系统内核扩展开发Demo

Posted By Zyp on 2019-06-19
教程

可以通过Mac系统的内核扩展做很多事情,这里总结些能够实现的功能。

文件访问拦截

官方文档

官方sample

使用苹果在10.4后引入的Kauth(Kernel Authorization)实现。

Kauth里的Vnode Scope,会回调所有的文件系统操作给KEXT中注册的回调函数,包括读写、执行、删除等,并且可以由KEXT决定是否拒绝访问。

重要函数

1
2
3
4
5
6
kauth_listen_scope 注册一个监听器

#define KAUTH_RESULT_ALLOW (1)
#define KAUTH_RESULT_DENY (2)
#define KAUTH_RESULT_DEFER (3)
3个返回值,用来区分是否拒绝访问。

网络访问拦截

官方文档

官方sample

使用苹果的NKE机制(Network kernel extensions)实现,NKE就是描述与网络栈交互或扩展网络栈的KEXT。

使用NKE中的socket filter实现网络访问拦截。

重要函数

1
2
3
4
5
sflt_register 注册一个filter

对于TCP,设置2个回调函数返回值为非0
sf_connect_in_func sf_connect_in;
sf_connect_out_func sf_connect_out;