在早期的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,如图9所示

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

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

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

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

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

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

图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
2.  一旦将进程挂起之后重启启动进程已经卡死了,没有任何的响应。
由于上面的两个问题导致现在ida虽然可以附加到进程或者启动独立的进程进行调试,但是实际的效果并不理想。明显是一锤子买卖,一旦暂停就完全死翘翘了,这也就是在文章开始处提到的那个问题。所以对于上面的两个问题哪位大大有好的解决办法还望不吝赐教

IDA + GDBServer实现iPhone程序远程调试相关推荐

  1. [转]IDA + GDBServer实现iPhone程序远程调试

    源地址:http://bbs.pediy.com/showthread.php?t=138472 IDA + GDBServer实现iPhone程序远程调试 By:obaby 在早期的IDA中包含了一 ...

  2. IDA + GDBServer实现iPhone程序远程调试 (手机远程)

    在早期的IDA中包含了一个iphoneserver的程序,这个程序就是配合IDA实现远程调试的.但是在最新版的IDA中这个东西已经不复存在了,因而下载的破解版的IDA中没有那个文件并不是被删除掉了,而 ...

  3. Eclipse-cdt 配合 gdbserver 进行 arm 程序远程调试

     做嵌入式Linux开发也不用再羡慕windows程序员VS集成开发环境的强大,我们同样能够搭建出给力的IDE. 今天在这里记录一下我使用Eclipse-cdt,gdb,gdbserver搭建 ...

  4. Android* 操作系统上的应用程序远程调试

    作者:robert-mueller Android* 操作系统应用程序远程调试 Android* Debug Bridge Android Debug Bridge (ADB) 是一种命令行工具,可处 ...

  5. 「小程序JAVA实战」 小程序远程调试(九)

    在开发javaweb应用的时候,如果遇见一个问题都会调试,debug,在火狐和谷歌浏览器的时候我们也可以使用断点的方式调试js,小程序可以吗?肯定是可以的!小程序的调试也可以在手机端进行远程调试.源码 ...

  6. 【GDB】gdbserver的使用,远程调试开发板

    0.将gdbserver拷贝到目标板子上 注:gdbserver在交叉编译工具目录/debug-root/usr/bin下 可用file命令查看 --------------------------- ...

  7. Android* 操作系统应用程序远程调试

    Android* Debug Bridge Android Debug Bridge (ADB) 是一种命令行工具,可处理主机上的调试程序(通常为 GDB* 或 DDMS*(Dalvik* 调试监测程 ...

  8. AptanaStudio3+PHP程序远程调试的方法和步骤

    php是执行在服务器上的脚本程序,通常调试bug,直接在浏览器页面就可以打印出错误信息,凭此基本能解决所有bug,但是有时候,可以说大多数时候,php会直接处理客户端的请求,作为数据接口传递数据,没有 ...

  9. 设备厂商Plc远程上下载程序远程调试运维

    应用场景:设备制造商的产品一般都是销往全球各地的,这样就会导致工程师维护设备的困难,可能一年三百六十五天,工程师有两百多天是在外面的,而且要是远一点的地方,可能来回就要两三天,而真正维修设备的时间可能 ...

最新文章

  1. 百行代码打造一个DI容器(支持瞬时生命周期、单利生命周期、构造函数自动注入、属性自动注入、字段自动注入)...
  2. Kubernetes 稳定性保障手册 -- 日志专题
  3. 双十一最新预测:这个连续多年夺第一的省份2020会被超越吗?
  4. 自然语言处理期末复习(6)话题模型
  5. Rafy 框架 - 使用 SqlTree 查询
  6. (13)Verilog程序结构-基本语法(一)(第3天)
  7. 读书笔记《Java开发技术-在架构中体验设计模式和架构之美》
  8. 计算机文化基础考试 名词解释,《计算机文化基础》模拟试卷.doc
  9. python2.7安装
  10. 《Android框架揭秘》——导读
  11. MySQL函数大全,MySQL常用函数汇总
  12. 2022年全新UI聚合支付系统四方源码4月最新更新安全升级修复XSS漏洞和补单漏洞新增诸多实用功能完美版
  13. Tor源码 -- 启动模块
  14. PG逻辑复制的REPLICA IDENTITY设置
  15. 世界电影经典《第七封印》
  16. 普罗米修斯 Prometheus
  17. 大数据需要学习什么?
  18. 开源项目精选推荐-杨小杰工具箱(YoungxjTools)
  19. Java 中String构造方法
  20. 化学实验室装修验收标准SICOLAB

热门文章

  1. Linux系统简介分区基础命令(ADMIN01-2)
  2. 怎么用matlab分解因式,MATLAB因式分解
  3. Mysql建表——报错1005
  4. 32位驱动安装到64位操作系统时出错
  5. mysql万能标签调用字段_万能循环(Loop)标签与万能调用(SQL)标签
  6. @Before有啥用
  7. 阳关林场的前世今生:结合锁眼卫星(Keyhole[KH])发掘“阳关林场”55年来的变化
  8. Android 高清加载长图或大图方案
  9. Codeforeces #710 div3题解报告
  10. PTA——二分法求多项式单根