IDA + GDBServer实现iPhone程序远程调试

IDA + GDBServer实现iPhone程序远程调试

By:obaby

在早期的IDA中包含了一个iphoneserver的程序,这个程序就是配合IDA实现远程调试的。但是在最新版的IDA中这个东西已经不复存在了,因而下载的破解版的IDA中没有那个文件并不是被删除掉了,而是本来就没有,*^_^*。所以一直以来调试iPhone上的二进制程序只能悲催的使用ssh+gdb进行调试,虽然调试器的功能还算可以,但是每次调试都需要设置显示,只能使用命令进行控制,因而用起来还是不是十分爽。

其实网上关于IDA实现ios设备远程调试的文章从网上也是可以找到的,但是说的都不是十分具体。本文主要是介绍下IDA实现远程iPhone程序调试的方法,当然这样调试还存在一些问题,如果大家有什么好的解决方案还请不吝赐教。

需要注意的是要想调试ios设备上的程序并不是简单的吧gdbserver拷贝到ios设备上行就可以了,此时如果使用gdbserver启动进程将得到类似如图1所示的提示信息:

图1

提示文件没有找到,但是如果设备曾经链接过xcode进行过程序调试则不会出现下面的情况。这是因为xcode在进行程序调试的时候会将所需要的文件拷贝到Develop目录下,这样的话不论gdbserver在哪个目录下程序都是可以正常执行的。同样在上面的命令中看到的debugserver是苹果自己编译的一个gdbserver调试服务器,而实际使用则基本是没有任何的差异和影响的。

首先来配置下设备上的调试环境,从xcode的/Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.2目录下找到DeveloperDiskImage.dmg文件,而3.2则是对应的ios设备上的系统版本,在DeviceSupport目录下通常会包含如如2所示的版本列表:

图02

在实际的调试过程中只需要选择相应的版本就可以了。在每个目录下都存在一个DeveloperDiskImage.dmg文件,用ultraiso打开这个文件可以看到如图3的文件目录列表:

图3

在调试的过程中需要将整个dmg文件下的所有目录和文件拷贝到设备上的/Developer目录下,如图4所示。这一步可以使用ios的文件管理工具,或者使用winscp上传文件,不建议使用后者,太卡了~,如果使用过xcode开发调试过程序那么这个目录下的所有东西应该都是存在的,可以无需手工复制。

图4

另外还需要在设备上安装ssh服务端,这个直接从cydia源中安装即可。最后就是程序的调试了。

在这里的调试可以使用预先分析文件和直接attach的方式进行调试。直接attach的方式比较简单一些,使用ssh客户端连接到设备(需要无线网络支持,如果木有,那我也冇办法哦~),在win下可以使用putty。

登录后默认会在root目录下,如图5所示。

切换到/Develop/usr/bin/目录下,给debugserver增加执行权限,如图6所示。

图6

现在就可以执行一个程序了,以AppleAssistantHD为例,执行./debugserver port:2008 /var/mobile/Applications/ABDEE3BA-02BE-4251-A57B-ECC363813133/AppleAssistantHD.app/AppleAssistantHD,此时debugserver会执行目标程序并且同时打开一个端口监听远程连接,如图7所示

图7

现在就可以运行ida链接远程调试器了。执行ida直接点go进入到程序界面即可,如图8所示。

图8

进入之后点击菜单的Debugger->Attach->Remote GdbDebuger,如图8所示

执行之后将会打开如图10所示的调试器附加窗口。

图10

在Hostname中输入设备的ip,port中输入debugserver的监听端口。点击Debug options打开调试选项,如图11所示。

图11

执行Edit exceptions打开异常处理选项窗口,如图12所示。

图12

编辑11号异常,去掉stop program的勾,如图13,否则在调试的过程中会非常的痛苦。

图13

关闭所有的设置窗口,现在就可以进行附加了,点击ok之后将会弹出如图14所示的进程列表。

图14

选择进程id为0的进程进行附加,如果成功将会弹出如图15所示的窗口。

图15

现在就可以进行调试了,如图16所示。

图16

上面的是直接attach的方法,这种方法能看到的只有内存数据,所以在实际的调试中并不是最好的方法。另外一种方式是直接用ida载入文件之后采用链接远程调试器的方式。首先将调试器设置为Remote gdb debuger然后编辑ida的Debug application setup:gdb设置,如图17所示:

图17

在application和input file中输入设备上的文件的绝对路径,其余的设置与attach的方式是完全一致的。设置完成之后就可以启动调试器了,此时会提示已经有远程进程在被调试,是否附加到,如图18.

图18

点击yes之后就可以进行调试了,如果附加成功将会弹出提示信息。这样调试的时候代码看起来还是比较清晰的,如图19

图19

虽然现在可以调试了,但是还有几个问题。也是我现在没有处理掉的:

  1. 在静态分析的时候设置的断点会变为无效,如图20所示;

图20

  1. 一旦将进程挂起之后重启启动进程已经卡死了,没有任何的响应。

由于上面的两个问题导致现在ida虽然可以附加到进程或者启动独立的进程进行调试,但是实际的效果并不理想。明显是一锤子买卖,一旦暂停就完全死翘翘了,这也就是在文章开始处提到的那个问题。所以对于上面的两个问题哪位大大有好的解决办法还望不吝赐教。

更多信息参考看雪的讨论:http://bbs.pediy.com/showthread.php?t=138472 

PDF下载:http://dl.dbank.com/c0x3g91rwc 

☆版权☆

* 网站名称:obaby@mars
* 网址:https://h4ck.org.cn/
* 个性:https://oba.by/
* 本文标题: 《IDA + GDBServer实现iPhone程序远程调试》
* 本文链接:https://h4ck.org.cn/2011/08/ida-gdbserver-iphone-debug/
* 短链接:https://oba.by/?p=3032
* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


分享文章:

猜你喜欢:

12 comments

  1. Firefox 5 Firefox 5 Mac OS X 10.6 Mac OS X 10.6 cn广西百色市西林县 电信

    IPad是4.3.4版本 我用IFunBox在ipad上找不到developer 是不是要越狱过的?

    1.  
      Opera 11 Opera 11 Windows XP Windows XP cn福建省厦门市 联通

      yes,是要越狱的设备才有权限访问整个文件系统的。如果不越狱的话什么都装不上~

  2. Sogou Explorer Sogou Explorer Windows 7 Windows 7 cn北京市 鹏博士BGP

    大虾,AppleAssistantHD这个应用是您自己写的吧?应该是自己签过名或者有证书之类的吧?哈哈,我尝试调试一个从app store下载的应用,是无法open process的

    1.  
      Opera IBIS 12 Opera IBIS 12 Windows 7 Windows 7 cn福建省厦门市思明区 电信/厦门同步网络有限公司(软件园二期望海路10号之三3F)

      哈哈,这个东西还真不是我写的,你要用合适的gdb,否则是无法启动的。

  3. Sogou Explorer Sogou Explorer Windows 7 Windows 7 cn北京市 鹏博士BGP

    能把AppleAssistantHD这个app发我一下吗?实在不行我就安装黑苹果去搞这个文件了)(DeveloperDiskImage.dmg

  4. Sogou Explorer Sogou Explorer Windows 7 Windows 7 cn北京市 网联光通

    这种调试方法确实有点问题,现在我在尝试用gdb远程调试了。GDB调试出现No symbol table is loaded. Use the “file” command. 修改版的gdb共享我一份吧,哈哈

    1.  
      Opera 12 Opera 12 Windows XP Windows XP cn福建省厦门市 电信

      那个找不到符号是正常的,好像有个开源项目一直更新的,你可以搜索下。

  5. Google Chrome 20 Google Chrome 20 Windows 7 Windows 7 cn广东省广州市 电信

    假如想调试别人的APP。这种方法可行吗?

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注