OSX FirstExtension 开发
作者:FloatingGuy 转载请注明出处:https://floatingguy.github.io/
说明
第一个 OSX 上的 Kernel Extension demo
参考:iOS架构-内核开发
从10.11开始Apple 对Kext 的安装变得更为严格。
从kext安装历史来看,10.11 之前可以通过sudo nvram kext-dev-mode=1 and reboot(重启电脑).
这种方式来加载 非开发者证书签名的 kext。
但是之后 只有2条路了(上面的方式相对 更不安全):
- 购买 Apple 开发者证书
- 完全关闭 SIP
关闭 SIP的方法:
- 重启电脑,重启过程中一直按着command + R 直到进入startup界面
- 打开Terminal输入csrutil disable
- reboot
代码展示(项目创建就算了)
|
|
开发测试:
在 10.12 上开发,然后拿到 10.11 关闭 SIP 的机器上测试。
编译安装 kext流程:
- uname -r 查看系統內核版本, 设置libkern版本
- sudo chown -R root:wheel HelloWorld.kext 更改權限
- sudo kextload HelloWorld.kext 加載內核擴展
- kextstat 查看當前內核擴展情況
- sudo kextunload HelloWorld.kext 卸載內核擴展
注意 kext 的 info.plist 中OSBundleLibraries ->com.apple.kpi.libkern
对应的版本号 是测试机上的 libkern 的版本(uname -a)
使用 kextutil 工具检测 kext 存在的bug
果然是关闭了 SIP 就可以 安装 kext, 已经显示 ‘allowing invalid signature xxx’
问题
如何查看 kext 的输入(日志)?
Todo:
- git 项目 提取 kext
- fuzz osx kernel — kext