在越狱的iPhone设置上使用lldb调试

封面

1,配置debugserver

iOS手机调试后,debugserver会存在于/Developer/user/bin/目录下。配置debugserver是指:给debugserver重签名,然后将重签名的文件放在iOS的/usr/bin目录下。

整个过程如下:

  • 将debugserver从手机上复制到电脑上,可以用scp命令进行拷贝,也可以用iFunBox软件
  • 在电脑上给debugserver重签名,需要额外使用xml文件标明权限,其xml文件可从这里下载,下载后将xml文下与debugserver放到一个目录下,然后运行命令:ldid -Sent.xml debugserver即可完成重新签名

iOS系统下,所有的程序都是需有正确的签名才能运行,签名保证文件的完整性,沙盒保证可执行文件不会越权访问未被授权的资源。上面的配置文件ent.xml则可以看成是沙盒的配置文件,即告诉沙盒,此可执行程序具有哪些权限,这样一个配置文件,在和签名计算绑定在一块的。从这个点上看,签名与沙盒一起构成了iOS系统的安全基础。更多签名机制,可以从这里了解更多

  • 将重签名的debugserver再拷回手机,注意拷回目录为/usr/bin,而不是之前的/Developer/user/bin,这样做的原因一个是/Developer目录不可写,另一个是/usr/bin目录是系统环境变量,其下的程序更方合使用。

  • 授予debugserver可执行权限 : chmod +x /usr/bin/debugserver

至此,debugserver准备完成,可以开始远程调试了。

2,在iOS上attach要被调试的程序。

在iOS上运行命令:debugserver *:1234 -a "SpringBoard"即可。正常情况下运行后结果如下所示: 此处输入图片的描述

lldb调试的整个结构是这样的:在iOS上使用debugserver程序attach本地(iOS)的进程,同时监听某一个端口,以便接受命令,执行并返回结果。而命令的发送者一般就是我们的Mac电脑上运行的lldb程序。

3,在OSX上运行lldb以进行调试

正如第二节所述,lldb的调试是OSX上的lldb做为一个客户端程序,通过网络向iOS上的程序发起Tcp连接(debugserver是Tcp服务的提供者)来完成的。理解了这些后,OSX端的操作就比较易懂了:

  • 进入lldb控制台,即在命令控制台下输入lldb
  • 通过lldb命令(process connect connect://<ios ip address>:9089)连接到iOS端的debugserver。输入的时候,将替换为真正的iPhone的IP地址。

此处输入图片的描述

如上图所示,我用的是localhost,是因为我将所有本地的1234的请求,转发起iPhone手机的1234端口了。这种USB连接调试的方式会更快,如果没有进行这一操作,换成手机的IP地址也是一样的,只是稍慢。


所属标签

无标签