Xcode动态调试的原理
Xcode动态调试的原理,涉及到两个工具,LLDB以及debugserver。
debugserver一开始存放在 Xcode里面,当 Xcode识别到手机设备时, Xcode会自动将 debugserver安装到 iphone上,然后通过LLDB与debugserver的交互,来实现真机动态调式。
如何做到动态调试任意APP
手动给任意APP增加debugserver,使用终端的LLDB与之交互。
实现流程
1.连接越狱的手机。
2.使用iFunBox在/Developer/usr/bin的目录下找到debugserver,拖到桌面。
3.打开终端,进入桌面路径,使用以下命令导出权限。
ldid -e debugserver > debugserver.entitlements
4.使用Xcode打开debugserver.entitlements,增加两条新的权限。
get-task-allow
task_for_pid-allow
5.新增权限后,需要使用以下命令重新签名,然后将已经签好权限的 debugserver放到/usr/bin目录,便于找到 debugserver指令。
ldid -Sdebugserver.entitlements debugserver
6.登录到手机root环境,通过以下指令,让 debugserverp附加到某个APP进程,端口号自定义,进程是监听APP的进程ID或名称。
debugserver *:端口号 -a 进程
7.新开一个终端窗口,启动LLDB,远程连接 iphone上的 debugserver。
// 输入lldb,启动lldb
lldb
// 远程连接debugserver
process connect connect://手机IP地址:端口号
8.连接成功后,监听的APP属于断点状态,使用LLDB的C命令可以让程序继续运行。
补充说明
1.默认情况下/ Developer/usr/bin/ debugservert缺少ー定的权限,只能调试通过 Xcode安装的APP,无法调试其他APP,如果希望调试其他APP,需要对 debugserverg重新签名。
2.配置过程中,我遇到的问题已写入<iOS逆向 | 动态调试常见问题>一文中,请自行翻阅。