[原创]Windows使用IDA调试IOS应用

DeeLMind 2017-11-14 23:53 3346
以前调试IOS都是在Mac上面,但是Mac暂时坏了,但是又有需求调试IOS应用,老板发话,你能怎样,所以Windows开搞呗,以前一直自以为Windows不能调试IOS,但是仔细想想后发现,其实就是调试程序和被调试程序有通信就行了,所以应该是可以的,所以按照常规先找资料,但是很不幸的是,很少有Windows下调试IOS,几乎没有,看IDA帮助文档后自己研究终于可以啦。(越狱版本
  1. 第一步:
查找资料,IDA的帮助文档

  1. 第二步:
下载iFunBox Windows版本iFunBox-DownLoad
什么是iFunBox呢?看看下图就明白了,其实就是个强大的文件管理系统。

  1. 第三步:
想办法使调试器和IOS程序建立通信,Android调试的时候有一个android_server程序,IOS也有一个类似的叫做debugserver(附件下载),我们只要把debugserver 下载到我们手机里面,怎么放到我们手机里面呢,使用这个iFunBox就可以啦,然后想办法运行此程序就OK啦!
1)下载debugserver
2)运行debugserver
怎么运行它呢?我们使用iFunBox这个管理器,先用USB线插入电脑,然后可以看到iFunBox自动识别手机并且自动连接,如下图

你会看到有个SSH终端,但是要使用SSH登陆手机那么必须在手机上开启这个服务(就和你登陆Linux服务器一样样,你要登陆服务器,最起码服务器要开放对应端口吧),那么要怎么打开这个服务呢?我们需要在手机安装cydia这个软件,进而安装OpenSSH,然后就可以打开了,至于怎么安装cydia,这个网上很多教程,就不多说了。现在我们使用iFunBox的SSH终端登陆IOS。
登陆后找到你下载的那个debugserver程序授权并运行就可以。
例如:我的debugserver放到/Applications/debugserver这里了。
chmod 777 debugserver
./debugserver *:3333 -a "ps-name" (-a ps-id) (* 意思是所以ip地址都可以)

运行起来就ok啦。
  1. 第四步:
想办法使ida和目标进程进行通信,如果是Wifi的话,那么直接和调试android那样输入对应ip和端口就可以了,但是坑爹的是我没有Wife,只能用Usb线连接,但是USB又不能做IP这类的操作,所以现在总结一下,我们IDA调试器有了,目标IOS要调试的程序也有了,目标IOS要调试的IP和端口也有了,但是我们连接不上,所以想想办法将手机的3333端口映射到本机来,那不就OK了吗?所以我们使用一个小工具:

具体操作:tcprelay.py -t 3333:3333 就是把手机3333端口映射到本机的3333端口了,所以我们连接我们本机的3333端口就相当于连接手机的3333端口,所以我们就可以连接到手机啦。
  1. 第五步:
IDA里面设置

里面设置对应IP和我们转发的端口就OK啦!
例如:IP:127.0.0.1  PORT: 3333
总结:
  1. 下载iFunBox(文件操作)。
  2. 下载DebugServer,SSH连接手机。
  3. 运行DebugServer。
  4. 小工具端口转发。
  5. IDA调试。


推荐:论坛大聚会| 看雪安全开发者峰会将于7月21号火热来袭!

上传的附件:
最新回复 (10)
tDasm 2017-11-15 08:28
2
1、IDA是7.0版?如果IDA能调试IOS,那么就应该自带debugserver和端口转发工具。不需要再提供下载。
2、IOS要越狱?
cqzhou 2017-11-15 08:43
3
没手机的路过
龙飞雪 2017-11-15 11:00
4
顶一个,没越狱手机的路过~~
jgs 2017-11-15 11:30
5
收藏,回头试试,谢谢楼主提供方法
隔壁雷哥 2017-11-16 08:59
6
哇,兄弟,工具版本都不写,感觉挺敷衍的的文章
roysue 2017-12-6 10:12
7

For Fun:使用 IDA 调试 iOS 程序的步骤

原文地址: http://blog.csdn.net/proteas/article/details/78083512

前提要求

1、熟悉基本的 IDA 操作。

2、会对手机进行越狱。

3、从手机上拷贝文件到电脑,从电脑上拷贝文件到手机。

4、会使用 ldid 对 debugserver 签名,增加权限。

5、会使用工具(如:iproxy)映射手机端口。

6、了解如何使用 LLDB 调试应用,可以参考我 15 年写的文章:《在非越狱设备上使用LLDB 调试第三方 App》。

实验环境

64 位 iOS

映射端口

iproxy 11022 11022 DEVICE_UUID

附加、调试 iOS App

1、将 /Applications/Calculator.app/Calculator拷贝到电脑上。

2、使用 IDA 64 加载Calculator。

3、在手机上启动 Calculator。

4、找到 Calculator 的 PID:

ps aux |grep Calculator

假设 PID 为:692

5、确定 Calculator 的加载基址:

vmmap 692

如上图加载基址为:0x1000b0000

6、在 IDA 中将 Calculator 的基址改为:0x1000b0000

 

7、在手机上配置debugserver:

debugserver *:11022 --attach=692

执行结果如下图:

 

8、回到 IDA 中选择 Debugger:Remote GDBdebugger

  ---> 

9、启动调试器:

10、配置调试器:

点击 OK。

点击 YES。

11、打开反汇编窗口,在-[Calculator.AppDelegateapplicationDidEnterBackground:] 函数上设置断点:

12、按 F9 继续执行:

13、在手机按 Home 键,将应用切后台,断点命中:

如上是调试iOS 应用的流程,调试 iOS 系统服务的流程也一样。

总结

IDA 调试 iOS 程序的主要问题:没有办法自动处理 ASLR,造成整个调试过程很不顺畅,还不如在 LLDB 中调试。

解决方法:

1、自己为 IDA 写一个调试增强插件,自动计算 ASLR,自动 Rebase。

2、将目标 MachO 的 PIE 属性去掉,不过印象中内核中有检查,在新系统中不一定可以去掉。


wu形之刃 2017-12-27 21:48
8
xuexile
loveqiao 2018-1-4 16:53
9
roysue For Fun:使用 IDA 调试 iOS 程序的步骤原文地址: http://blog.csdn.net/proteas/article/details/78083512前提要求1 ...
vmmap是哪来的?自己写的吗?
DeeLMind 2018-1-16 11:21
10
隔壁雷哥 哇,兄弟,工具版本都不写,感觉挺敷衍的的文章
太忙了,没顾上,不好意思,以后会注意的
crazyearl 2018-3-17 22:49
11
调试IOS,  收藏
返回