如何调试iOS内核
ios内核调试不像win和linux内核调试那么简易,操作起来比较麻烦,本文介绍如何进行ios内核的调试,word版如何调试iOS内核.rar
如何调试iOS内核
转载请保证文章完整并注明来源
本文对如何调试iOS(iPhone OS)内核进行简单的介绍,讲述iOS内核调试的环境搭建,调试步骤等。
iOS是用XNU内核,XNU for mac的代码可以从苹果官方下载到,当然不是最新版的。XNU内核有既相互独立又相互交互的三个组件构成,这三个组件是:Mach、BSD、IOKit。
首先,是硬件与软件的准备。
硬件方面,一台越狱的设备是必需的,建议用iPhone4(注iPad2或iPhone4S由于采用的是苹果A5的cpu,它的bootrom目前还没有公开漏洞,不能用红雪设置引导参数,不能使用它来调试)。内核调试数据线,该数据线含有USB转串口的电路,可以参考文献1来自己焊接,本人制作好的调试线如下图,限于篇幅这里不对如何制作调试线展开讨论。一台电脑,可为台式机或笔记本,mac更佳。

软件方面,虚拟机VMware,mac操作系统比如Lion,XCode等。
其次,是环境的搭建。
Mac环境,由于iOS的内核调试要在mac操作系统平台下进行,所以首先要搭建mac环境,最好用真实的mac机,也可用虚拟机,本文为方便没有mac的朋友,以虚拟机为例进行讲述,用真实mac机的朋友可根据具体的情况随机应变。具体步骤如下,先在电脑上装虚拟机(如VMware)软件,然后在虚拟机里面装mac操作系统(比如Lion),装好mac系统后下载XCode并装上。如果觉得这样太麻烦的话,可直接从电驴下载装好Lion的虚拟机。
有了mac环境后,在mac操作系统里装好USB转串口芯片的驱动程序(可从http://www.ftdichip.com/Drivers/VCP.htm下载),装好驱动后就可用ls /dev/tty.usb*来看一下有没有把串口识别出来。识别出来后如下面的图所示。然后下载本文附带的SerialKDPProxy程序源代码SerialKDPProxy_m.rar(该源码是由Albert_liuwei从参考文献1提供的SerialKDPProxy修改而来,特此声明),并make一下,你懂的。将得到的SerialKDPProxy文件cp到/bin下,这样不用每次都要切换到这个目录下才能执行。

最后,搭建好了环境后就可以进行调试了,主要有三个步骤:
一是运行串口代理程序,用下面的命令行。
SerialKDPProxy /dev/tty.usbserial-A900c0xb
这里的tty.usbserial-A900c0xb要替换为在你的系统上具体的设备名,上文ls /dev/tty.usb*的结果。
二是用红雪设置引导参数。该步骤可以在物理主机Windows系统下面进行,因为命令行涉及到一个几百M的文件,复制到虚拟机里比较麻烦。可以在Win下用下面的命令行。
redsn0w.exe -i "D:\Apple\iPhone3,1_4.3.3_8J2_Restore.ipsw" -j -a "-v debug=0x09"
该命令输入完毕回车后,红雪会让你按它的提示进入dfu模式。进入dfu后稍等一下,会看到小菠萝人在手机屏幕上。看不到的话,可能是进入dfu模式出错。
接下来切换到mac环境工作,进入虚拟机环境之前要确认USB转串口的设备前点的钩已钩上。如下图:

三是用gdb调试ios内核。所用的命令行参数如下:

gdb -arch armv7 (gdb) target remote-kdp (gdb) attach 127.0.0.1
在win下面。串口从设备管理器里看出来是COM8.代理程序用这个命令行:./SerialKDPProxy.exe /dev/com8
启动gdb的命令是 ./arm-apple-darwin-gdb.exe
其它的都是和se的ppt像一样。
至于具体怎么调试,熟悉linux下用gdb进行调试的朋友能相当熟练地调试,也可以参考本人的另一文章《iOS如何利用ARM的MMU进行地址映射》。
最后
感谢DarkMage(dm557),Windknown,Daniel,Albert_liuwei,cd-team及各位朋友!
参考文献:
1. SysScan-Singapore-Targeting_The_IOS_Kernel.pdf(可输入google找到)
2. http://www.cd-team.org/wp-content/uploads/2011/09/PWN你的iOS设备_New.ppt
如何调试iOS内核.rar
