iOS逆向系列-动态调试
2019-05-21 13:41 iCoderHong 阅读(792) 评论(0) 编辑 收藏 举报Xcode调试App原理
Mac安装了Xcode Xcode的安装包中包含了debugserver 可执行类型的Mach-O文件,iPhone第一次连接Xcode调试会将Xcode中的debugserver安装到iPhone上。
debugserver在Xcode路径:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/9.1/DeveloperDiskImage.dmg/usr/bin/debugserver
debugserver安装到手机路径:/Developer/usr/bin/debugserver
debugserver *:端口 -a App进程 使用iPhone的某个端口启动debugserver服务附加到某个App进程 监听LLDB指令。
Mac内置的LLDB可以远程连接iPhone上的debugserver服务发送LLDB指令
动态调试任意APP
Xcode安装到手机中的debugServer只能调试Xcode安装的App,如果需要调试任意的App需要对debugserver重新签名。
如果希望调试其他APP,需要对debugserver重新签名,签上2个调试相关的权限
- get-task-allow
- task_for_pid-allow
如何给debugserver签上权限
iPhone上的/Developer⽬目录是只读的,⽆无法直接对/Developer/usr/bin/debugserver⽂文件签 名,需要先把debugserver复制到Mac
通过ldid命令导出⽂文件以前的签名权限
ldid -e debugserver > debugserver.entitlements
给debugserver.plist⽂文件加上get-task-allow和task_for_pid-allow权限
通过ldid命令重新签名
ldid -Sdebugserver.entitlements debugserver
将已经签好权限的debugserver放到/usr/bin⽬目录,便便于找到debugserver指令
让debugserver附加到某个APP进程
远程连接iPhone 执行指令
debugserver *:端⼝口号 -a 进程
在Mac上启动LLDB,远程连接iPhone上的debugserver服务
启动LLDB
$ lldb
(lldb)
连接debugserver服务
(lldb) process connect connect://⼿手机IP地址:debugserver服务端⼝口号
使⽤用LLDB的c命令让程序先继续运⾏行行
(lldb) c