iOS逆向 | 如何通过LLDB实现动态调试

2,168 阅读1分钟

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

image.png
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逆向 | 动态调试常见问题>一文中,请自行翻阅。