1、越狱设备并设置启动参数无法立即调试iOS内核。这是因为Apple工程师不想让发现漏洞更容易。因此,我们必须先越狱设备才能设置正确的引导参数并应用适当的内核补丁。使用RedSn0w越狱iOS设备的过程已在其他地方广泛讨论,但是使用该工具时添加适当的启动参数至关重要。您可以通过转到附加功能->更多->首选项->启动Args来实现。在文本框中,您应该输入以下字符串“ debug = 0x8f -v wdt = 0”。这些参数依次告诉内核:使用特殊标志以调试模式启动以详细模式启动在禁用看门狗定时器的情况下进行引导,因此可以在任意时间暂停执行而不会被杀死。现在启动时,设备将在启动时停止,并等待您连接调试器。
2、使用SerialKDPproxy现在,该设备已停止并等待连接调试器,我们需要启动serialKDPproxy。用法只是./SerialKDPProxy。例如,对我来说就是./SerialKDPProxy /dev/tty.usbserial-AH00NR2W。此后,应该有各种调试消息从设备输出到控制台。您还可以在设备启动之前运行此程序,并且会有大量的输出,这将帮助您显示设备打开时真正发生的事情。例如,将显示内核幻灯片,这将使我们能够确定函数地址。
3、与GDB附加由于serialKDPproxy现在正在按照我们想要的方式转发连接。现在,连接到内核非常简单。首先,您需要使用以下命令启动gdb。gdb -arch armv7。这告诉gdb,它将调试iOS设备,而不是具有i386体系结构的OS X应用程序。在gdb提示符下之后,连接所需要做的就是键入target remote-kdp,然后附加localhost。您应该得到一个回复,说您已连接。如果没有,请确保输入正确的引导参数,并确保您已将serialKDPproxy连接到正确的设备。
4、基本调试能力您现在基本上具有了gdb通常具有的所有相同功能。您可以使用命令p *(int *)address在内存地址中获取内容,也可以使用以下命令设置内容设置{int}= val。您还可以使用x / i addr在一个函数中反汇编代码或反汇编。您还可以使用命令信息寄存器查看所有寄存器。断点也可以通过命令break *(addr)设置。这些都是可以正常工作的标准gdb命令。
5、设置断点的示例假设您正在分析OSUnserializeXML函数对于一个漏洞,您想知道在特定时间调用堆栈时的状态。您可以使用静态分析来查看IDA Pro之类的程序中内核的汇编,以了解其外观。或者,您可以直接在IDA中找到OSUnserializeXML函数的地址,然后将其添加到在启动时已打印到串行控制台的内核幻灯片中,以找到该函数的真实地址,然后在此处设置一个断点。然后,当它被调用时,执行将停止,您将拥有完全的控制权来分析正在发生的事情