一.媒介debugserver
Xcode
之所以可以通过lldb
调试我们的App,是因为媒介debugserver,它负责接收lldb
指令,然后将lldb
指令给到app,最后app将结果通过debugserver
传给lldb
,反馈到我们的Xcode调试界面。
二.查看debugserver
默认手机位置是/Developer/usr/bin
,但是通过终端连接手机时,查看目录发现并没有 debugserver
文件-----what????
别急,这是因为你的手机没有使用Xcode进行调试过,当手机第一次连接到Xcode,通过Xcode-->Window-->Device
,用你的越狱手机调试(lldb
)程序的时候,才会将debugserver
从你的/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/9.1/DeveloperDiskImage.dmg/usr/bin/debugserver
安装到你的手机/Developer/usr/bin/
目录下:
你随便调试一个程序后,就会在/Developer/usr/bin/
目录下看到debugserver
,但是此时的debugserver
因为缺少task_for_pid
权限还是不可使用,通过Xcode
安装的debugserver
,只能调试自己的app,要想逆向调试别人的app,就需要修改debugserver
权限。
三.更改debugserver
权限
1.首先将iPhone
中的debugserver
通过iFunbox复制到电脑。
2.通过MachOView
,可以看到这是个胖二进制文件

3.瘦身
由于debugserver
是个胖二进制文件,我的越狱手机是iPhone5s是arm64
架构的,我们只要保留arm64
,使用如下lipo
命令:
lipo -thin arm64 ./debugserver -o ./debugserver_arm64
再次通过MachOView
查看

4.给debugserver
增加task_for_pid
权限
通过ldid
查看原来权限
ldid -e ./debugserver

将旧的权限输出到entitlement.plist
文件
ldid -e ./debugserver > ./entitlement.plist
在entitlement.plist
增加一个task_for_pid-allow

重签名debugserver
将改好的entitlement.plist
重签debugserver
ldid -Sentitlement.plist debugserver
再次查看debugserver
权限确认如下图所示即为添加成功

5.将debugserver
放回手机
现在的debugserver
已经可以调试其他app,这个时候需要注意两点:
a./Developer/usr/bin
目录下的debugserver
是只读文件,无法替换。
scp: /Developer/usr/bin/debugserver: Read-only file system
b.为了方便我们使用命令行操作方便,直接将debugserver
拷贝到/usr/bin/
目录下。
scp -P 12345 debugserver root@localhost:/usr/bin
查看权限 :

如果没有执行权限,请自行添加
chmod +x debugserver
此时登录手机-终端输入
debugserver
出现如下图,即为添加成功

四.调试程序
1.通过USB连接手机,首先要做端口映射,使电脑能正常通过对应端口连接电脑:
iproxy 1111 1111
2.登录手机,开启debugserver
debugserver *:1111 -a "WeChat"
其中* 代表当前设备, 1111 端口号, -a 添加, "WeChat" 想要附加的程序名称
3.电脑终端输入lldb
,然后连接手机
process connect connect://127.0.0.1:1111
或
process connect connect://localhost:1111
使用下面命令附加进程(先启动想要附加的APP),开启port端口,等待来自IP的mac上的lldb接入
连接后,即可使用lldb
调试三方App。
lldb
状态下进入断点命令:
process interrupt
网友评论