iOS逆向-动态调试

动态调试

将程序运行起来,通过断点,打印等方式,查看参数,返回值,函数调用流程等

Xcode动态调试原理

xcode 的编译器发展历程:GCC --> LLVM

xcode 的调试器发展历程:GDB --> LLDB

LLDB 通过 debugserver 来调试app。debugserver 存放在xcode里面,当xcode识别到手机设备时,会自动将debugserver安装到iPhone上。

在Xcode中路径 :/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/9.1/DeveloperDiskImage.dmg/usr/bin/debugserver

Xcode只能调试通过Xcode安装的APP

debugserver权限

默认情况下debugserver缺少一定权限,只能调试通过Xcode安装的app,无法调试其他APP

如果需要调试其他APP,需要对debugserver重新签名,签上两个调试相关的权限,get-task-allowtask_for_pid-allow

将签好权限的debugserver放到/usr/bin目录,便于找到debugserver指令

让debugserver附加到APP上

debugserver *:端口号 -a 进程
  • *:端口号
    • 使用iPhone的某个端口启动debugserver服务(只要不是保留端口即可)
  • -a 进程
    • 输入app的进程信息(进程ID或者进程名称)

Mac启动LLDB,链接手机上debugserver服务

启动lldb

lldb

链接debugserver服务

(lldb) process connect connect://手机IP地址:debugserver服务端口号

使用lldb的c命令,让程序先继续运行

接下来即可使用LLDB命令调试App

通过debugserver启动APP

debugserver -x auto *:端口号 APP的可执行文件路径

你可能感兴趣的:(iOS逆向-动态调试)