前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IDA + GDBServer实现iPhone程序远程调试

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

作者头像
obaby
发布2023-02-24 10:36:53
1.5K0
发布2023-02-24 10:36:53
举报
文章被收录于专栏:obaby@mars

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/

* 本文标题: 《IDA + GDBServer实现iPhone程序远程调试》

* 本文链接:https://cloud.tencent.com/developer/article/2223576

* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


分享文章:

相关文章:

  1. IDA调试Windows 内核
  2. IDA 6.1调试驱动
  3. 使用VMWare GDB和IDA调试Windows内核
  4. 实战IDA PE+ DLL脱壳
  5. IDA Pro Appcall功能浅析
  6. IDA + Debug 插件 实现64Bit Exe脱壳
  7. iOS下的NPK资源解包
  8. Two 64bit Debuggers
  9. IDA Unicode字符串自动解析注释插件2.0 (支持MachO ,PE等)
  10. Nanomite – Graphical Debugger for x64 and x86 on Windows
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011年8月9日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • IDA + GDBServer实现iPhone程序远程调试
    • 相关文章:
    相关产品与服务
    远程调试
    远程调试(Remote Debugging,RD)在云端为用户提供上千台真实手机/定制机/模拟器设备,快速实现随时随地测试。运用云测技术对测试方式、操作体验进行了优化,具备多样性的测试能力,包括随时截图和记录调试日志,稳定的支持自动化测试, 设备灵活调度,用例高效执行, 快速定位产品功能和兼容性问题。云手机帮助应用、移动游戏快速发现和解决问题,节省百万硬件费用,加速敏捷研发流程。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档