For Fun:使用 IDA 调试 iOS 程序的步骤
2017-09-25 11:39
204 查看
前提要求
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 |
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 属性去掉,不过印象中内核中有检查,在新系统中不一定可以去掉。
相关文章推荐
- iOS --- 使用NSAssert来调试程序
- 使用 Instruments 做 iOS 程序性能调试
- vc6.0中使用console输出的调试程序的解决步骤
- iOS Sprite Kit教程之使用帮助文档以及调试程序
- 使用IDA调试apk的so的步骤
- IOS 使用NSAssert()和NSParameterAssert调试程序
- iOS 使用断言NSAssert()调试程序错误
- iOS 使用断言NSAssert()调试程序错误
- 使用IDA调试Android原生程序
- 使用WinDBG + SOS调试.Net程序的一般步骤
- DPM程序在windows下调试失败,解决步骤 (使用程序为DPM voc-release3.1)
- iOS Sprite Kit教程之使用帮助文档以及调试程序
- 使用IDA调试android下的linux程序
- [IOS 开发] 使用断言NSAssert()调试程序错误
- 使用IDA调试android下的linux程序
- windows下使用IDA远程调试linux(ubuntu)下编译的程序
- iOS Sprite Kit教程之使用帮助文档以及调试程序
- iOS 断言 NSAssert的使用 调试程序错误
- Eclipse+PDT使用Zend Debugger来调试php程序的步骤
- 如何使用Visual C++调试程序?【转贴】