美文网首页
mac os 内核调试

mac os 内核调试

作者: ldzSpace | 来源:发表于2019-03-24 13:29 被阅读0次

一 需求和目的:

逆向的时候出现内核方法, 想要更进一步调试, 因为ios 的内核调试比较困难
所以找了折中的方案,调试macos 内核

二: 调试准备

1: macos 主机上安装虚拟机 VMware funsion, 自己google安装步骤
2: 下载镜像
  目前我能找到的镜像都是dmg, 而且都是存放百度网盘的, 下载速度慢的可以, 限速限的真是够可以的,【我没时间,如果哪个热心的红领巾把它给逆了,记得传一份给我】没有办法只有自己制作iso 镜像, 可以看下一篇文章macos系统镜像iso 的制作, 注意虚拟机和主机系统应该一致,否者会出现各种恶心问题, 比如: 调试能断下来,按continue 后 ,但是无法进入桌面
3: 下载KDK (内核调试工具): 下载地址: https://developer.apple.com/download/more/
  一定要根据系统版本来确定KDK 的版本,使用命令行: sw_vers | grep BuildVersion 来查看系统编译版本, 或者使用界面查看


5: 接下来关闭SIP[系统正当性保护模式]
 它禁止让软件以root的身份在mac 上运行 ,这是osx 10.11 系统以后才有的机制
关闭SIP: 首先要进入恢复模式, 很多资料说系统重启, 按住Command +R 进入恢复模式, 尝试过, 根本进不去, 我怀疑Command+R 对虚拟机是无效的, 在虚拟机软件上找到了这个

启动到固件: 会进入到下面的界面: 上下键移动到enter setup

然后选中Boot from a file 继续下一步:

然后选中Recovery HD 继续下一步:

然后选中com.apple.recovery.boot 继续下一步!!

选中boot efi:继续, 随后会进入到苹果启动界面,最后进入恢复模式, 然后来到下面的界面, 选中实用工具

然后打开终端, 输入csrutil disable, 会提示你成功关闭
重启后, 进入到系统后, 终端输入csrutil status ,查看SIP 是否关闭,如下图:

6: 虚拟机中替换成调试内核
替换内核: KDK是安装在/Library/Developer/目录下, 注意: 一定是从根目录下开始查找这个Library,否则找不到, 将目录下的kernel.development 拷贝到/System/Library/Kernels/中
即终端中执行命令:

 sudo cp /Library/Developer/KDKs/KDK_10.12.6_16G29.kdk/System/Library/Kernels/kernel.development /System/Library/Kernels/

7: 然后输入命令设置boot-args ,使用nvram 将虚拟机设置成调试模式:

 sudo nvram boot-args="debug=0x141 kext-dev-mode=1 kcsuffix=development pmuflags=1 -v"
1>>boot-args:系统的启动参
2>>debug=0×141,表示系统可以进行远程链接调试
3>>kext-dev-mode=1允许加载未签名kext
4>>kcsuffix=development 允许我们启动系统,通过development,与之前我们copy到/Systems/Library/Kernel下的kernel.development对应,如果我们之前拷贝的是kernel.debug,那么这里填kcsuffic=debug
5>>pmuflags=1关闭定时器
6>>-v显示内核加载信息.

8: 在清除kext缓存 sudo kextcache -invalidate / 目的是让虚拟机系统的kext cache无效,使用新的内核调试.

9: 重启虚拟机即可, sudo reboot

10: 重启之后 , 系统会来到下面的界面, 这里就是等待外部主机进行调试

11: 需要源码调试的话: 现在虚拟机中查询xnu 的版本命令uanme -v ,这里我的版本为: xnu-3789.70.16~2
源码地址: https://opensource.apple.com/tarballs/xnu/
找到对应的版本源码: 下载后, 放入到主机中/Library/Cache/com.apple.xbs/xnu/中,如果没有这个目录自己创建

12: 外部使用命令行:输入kdp-remote 虚拟机ip

注意事项:
1>上述的内核调试是有问题的:
一旦内核启动并且调试器继续运行,内核就不能再从调试器中停止。所以我们需要重新设置:

$sudo nvram boot-args="debug=0x144 kext-dev-mode=1 kcsuffix=development pmuflags=1 -v"

之后如果想再运行时断下,就在虚拟机中按组合键就可以重新调试

Command-Option-Control-Shift-Escape

原因: 0x141: DB_DBG_POS_CORE && DB_ARP && DB_HALT , 0x144:DB_DBG_POS_CORE && DB_ARP && DB_NMI [即可以运行是中断]

2> 连上后, 出现Waiting for link to become available 的情况很多, 就是一直在等待,原因: 我安装VMware Tools 必须推出了OS Base System,进而到值会出现上述问题
解决方案: 可以重启一下CD/DVD, 当然看到要重新安装系统,则可以退出就行

相关文章

  • mac os 内核调试

    一 需求和目的: 二: 调试准备 1: macos 主机上安装虚拟机 VMware funsion, 自己...

  • iOS 系统架构

    概述 Mac系统是基于Unix内核的图形化操作系统,Mac OS 和 iOS 系统架构的对比分析发现,Mac OS...

  • Android、iOS、Mac OS相关

    安卓与Linux内核的关系 Mac OS和iOS是两个不同的系统 Linux 和Mac OS都是继承Unix设计风...

  • 移动端之Chrome远程调试

    原理 安卓远程调试支持所有操作系统(Windows,Mac, Linux, and Chrome OS.)中调试,...

  • Lesson1

    什么是iOS Core OS。mac OS操作系统是BSD Unix内核 Core Service。核心服务层,对...

  • Mac OS X 内核

    背景 内核协作着硬件和软件之间的输入和输出。它是操作系统最关键的一部分,正是因为它,程序开发者可以不需要考虑底层硬...

  • MAC OS 内核保护

    sudo chmod 777 /usr/bin 提示没权限开机按 Command+R命令行输入 csrutil d...

  • iOS开发 - 四层系统架构

    引言Mac系统是基于 Unix 内核的图形化操作系统。Mac OS 和 iOS 系统架构的对比分析发现,Mac O...

  • Tower for Mac 3.5.1 Git客户端

    Tower mac版是运行在mac os系统上的基于Linux 内核开发的Git客户端。Tower可以让Git更简...

  • Mac OS 上配置Android studio的真机调试环境

    转发: Mac OS 上配置Android studio的真机调试环境 0:下载并安装androidfiletra...

网友评论

      本文标题:mac os 内核调试

      本文链接:https://www.haomeiwen.com/subject/rqhuvqtx.html