首页
社区
课程
招聘
[原创]编译macOS Sonoma 14.4 XNU内核并运行调试
2024-5-24 03:20 2260

[原创]编译macOS Sonoma 14.4 XNU内核并运行调试

2024-5-24 03:20
2260

初级难度

只编译内核静态分析,或使用CodeQL辅助, 调试KDK的内核

环境配置

编译内核

使用darwin-xnu-build项目, 在项目目录使用编译参数执行

1
ARCH_CONFIG=X86_64 KERNEL_CONFIG=DEVELOPMENT MACHINE_CONFIG=NONE KC_FILTER="com.apple.EXBrightKext" ./build.sh -k

这项目使用脚本已经全自动下载官方的xnu内核源码并编译好内核了, 完全傻瓜化(编译的输出要留好, 加 > build.log)
*如需要CodeQL,把以上参数修改到codeql.sh

虚拟机运行macOS*

  • 安装qemu,通过项目OSX-KVM,OSX-KVM项目的openCore.qcow2使用qemu-img挂载EFI分区, 并使用OCAT修改一下OC的config.list, 勾选上FixupAppleEFIimages(这是qemu的EDK2项目的bug, 真机不用)
  • ./fetch-macOS-v2.py会自动下载最新的BaseSystem.dmg(安装和恢复模式的镜像,不是完整包),生成BaseSystem.img
  • 可以使用自己编译的内核.也可以替换官方KDK的内核,参照KDK目录下KDK_ReadMe.rtfd生成BootKernelExtensions.kc.development, 将系统启动参数kcsuffix=development也可以添加到OC的config.plist中,挂载BaseSystem.img把BootKernelExtensions.kc.development复制到/System/Library/KernelCollections
  • 启动qemu后可以使用lldb, gdb-remote调试内核

**现在可使用调试官方的KDK里的内核, 自己编译的内核缺少Tightbeam无法进入到系统桌面(Tightbeam模块苹果没有放到开源的XNU项目中),但也能进行大部分调试. 还有一个问题现在14.5发布了, 下载的BaseSystem.img可能是14.5, 相关的KDK和XNU源码要两三个月后才会发布.**

*因mac的这台内存不够, 在另一台ubuntu上跑的qemu


高级难度

在完成以上的情况下, 继续进行以下配置, (高级难度也可不需要本机安装KDK, 可在虚拟的系统中安装.)

高级环境配置

  • 通过项目OSX-KVM完整下载指定版本的完整安装包, 参考目录下的run_offline.md,到 mrmacintosh.com下载14.4的版本InstallAssistant.pkg, 并制作dmg, 再转成qemu的img.

  • 在qemu中安装macOS Sonoma 14.4.(需要预留至少30G的空间) 并安装KDK

高级难度的真正所在!: 构建Tightbeam模块

从官方的kernel.development中把缺少的Tightbeam模块相关函数代码转汇编, 缺少的函数可以用生成目录下的/build/xnu.obj/DEVELOPMENT_X86_64/symbolsets.plist对比官方KDK中的kernel.development中名为__LINKINFO,__symbolsets的section的内容.还要使用到capstone来对相关代码进行反汇编, 制作Tightbeam.s的汇编文件, 再修改相关引用.生成模块Tightbeam.o.

`

编译内核

  • 编译参数这里把KC_FILTER="com.apple.EXBrightKext"删除,这个模块依赖Tightbeam,因为已经解决了Tightbeam模块
  • 把Tightbeam加入到编译中, 可以修改XNU目录下makedefs/MakeInc.kernel
1
2
3
4
5
# 也可以从之前的build.log中找到
clang .... version.o -o ... /kernel.development.unstripped.noctf
# 添加上修改成
clang .... version.o Tightbeam.o -o... /kernel.development.unstripped.noctf
# 再执行strip等操作


使用自编译的内核进入系统和Apple store下载App都正常.

  • 调试自己编译的内核还可以查看具体所在的相关代码,比原来只有KDK更方便理解,如果需要好的理解代码,
  • *可以把KERNEL_CONFIG的DEVELOPMENT换成DEBUG, DEBU优化为-O0, DEVELOPMENT为-O2

*DEBUG版本需要解决不少错误
~


~
有人说为什么要还要搞黑苹果,新系统准备都不支持x86的CPU了,或是研究XNU有什么用, 不过就是因为苹果全面转向自己的Apple Silicon了 才需要研究, 新硬件驱动支持越来越紧迫. 除了window, 还有什么桌面系统是好用的, 你想说各种linux发行版本?国内换皮linux的所谓国产系统??
~
黑苹果, XNU内核交流可QQ: 3=1=0=4=1=9=0=6=2 (倒序)
~


~


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2024-5-25 19:24 被alice编辑 ,原因:
收藏
免费 1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回