IDA 7.0 动态调试 iOS App
IDA 官方网站虽然提供了远程调试 iOS App 的教程,但是很多人实际操作仍然会遇到很多问题。参考 IDA 官方的教程 https://www.hex-rays.com/products/ida/support/tutorials/ios_debugger_tutorial.pdf,下面我们来亲自操作 IDA 如何调试 iOS App。
使用 Xcode 编写一个测试程序,在 main 函数中添加如下代码,获取可执行文件的路径。
1 2 3 |
NSString *exePath = [[NSBundle mainBundle] executablePath]; NSLog(@"exePath %@\n",exePath); |
在手机上运行之后,输出的路径如下:
1 2 |
exePath /var/containers/Bundle/Application/A0572F94-6D77-4DC8-AC10-81A4813B7B89/testUnicorn.app/testUnicorn |
定位到测试程序编译好的 app 文件的路径,将可执行文件拖到 IDA 加载,在 main 函数入口添加断点,如下图所示:
然后在 IDA 菜单选择 Debugger 点击 Select debugger,会提示一个对话框,选择 Remote iOS debugger,如下图所示:
然后在 IDA 菜单选择 Debugger 点击 Process options,如下图所示:
在弹出的对话框中,将 Applications 和 Input file 填写测试程序中获取到的 exePath,如下图所示:
然后在 IDA 菜单选择 Debugger 点击 Debug options,会显示一个 Debugger setup 的对话框,如下图所示:
点击 Set specific options,在弹出的 iOS configuration 对话框中输入 Symbols 文件的路径,具体的路径可以到 ~/Library/Developer/Xcode/iOS DeviceSupport 目录下查看,根据你手机相应的系统版本选择即可。在 Device 选对好需要调试的设备,如下图所示:
最后在 IDA 菜单选择 Debugger 点击 Start process 即可启动手机上的进程并进行调试,如下图所示。左侧显示的是反汇编代码窗口,右侧显示的是寄存器和栈信息。F7 是单步步入,F8 是单步步过。