一.debugserver重新签名,填加权限
1.把手机的debugserver
复制到桌面,所在手机路径如图
查看ldid有哪些功能
ldid
输出
usage: ldid -S[entitlements.xml] <binary>
ldid -e MobileSafari
ldid -S cat
ldid -Stfp.xml gdb
cd到桌面
cd ~/Desktop/
2.导出原来手机安装的debugserver
权限
ldid -e debugserver > debugserver.entitlements
双击打开,可以用Xcode查看其权限,后缀名为entitlements
,实际上是plist文件,如图
这个时候,这个debugserver只能调试通过Xcode安装的App,无法调试其他App,如果想要调试其他App,需要对debugserver重新签名,签上两个相关的权限
3.添加调试其他App的权限
get-task-allow
task_for_pid-allow
如图
4.添加好后,给debugserver重新签名
ldid -Sdebugserver.entitlements debugserver
5.验证重新签名后的debugserver是否有刚刚添加的权限
重新导出debugserver权限,给个新的名字new.entitlements
ldid -e debugserver > new.entitlements
查看如图,已经添加上
由于手机的Device->Develop->usr->bin目录是只读,所以无法用新签名的debugserver
替换原来的debugserver
但是可以把debugserver
放在Device->usr->bin目录,因为usr-bin目录已经在环境变量path里面,之前已经操作过
连接登录越狱手机
尝试指令
debugserver
输出
-sh: /usr/bin/debugserver: Permission denied
6.给debugserver
添加权限
chmod +x /usr/bin/debugserver
再次输入
debugserver
输出
debugserver-@(#)PROGRAM:debugserver PROJECT:debugserver-340.3.124 for arm64.
Usage:
debugserver host:port [program-name program-arg1 program-arg2 ...]
debugserver /path/file [program-name program-arg1 program-arg2 ...]
debugserver host:port --attach=<pid>
debugserver /path/file --attach=<pid>
debugserver host:port --attach=<process_name>
debugserver /path/file --attach=<process_name>
至此debugserver环境已经搭建好
二.如何让debugserver
附加到某个App上???
debugserver *:端口号 -a 进程
*表示主机地址为任意,相当于通配符
-a 相当于attach pid就是进程名称,比如微信的WeChat
三.如何让mac上的lldb连接到手机的debugserver进行调试App?
首先,mac电脑usb与手机的端口映射关系使用vim打开usb.sh
python ~/Documents/iOS/usbmuxd/tcprelay.py -t 22:10010 10011:10011
这样访问电脑上的10011相当于访问手机上的10011
重新连接登录手机
执行转发命令,可以看到有两个端口转发
Forwarding local port 10010 to remote port 22
Forwarding local port 10011 to remote port 10011
使用debugserver
执行监听调试微信命令
debugserver *:10011 -a WeChat
输出
debugserver-@(#)PROGRAM:debugserver PROJECT:debugserver-340.3.124
for arm64.
Attaching to process WeChat...
Listening to port 10011 for a connection from *...
现在点击微信上任意按钮,发现微信无法响应
接下来在终端上启动lldb
终端输入
lldb
接着输入
process connect connect://localhost:10011
过了一会约10秒
- Hook 1 (expr -- @import UIKit)
- Hook 2 (target stop-hook disable)
Process 22566 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
frame #0: 0x0000000182ae8fd8 libsystem_kernel.dylib`mach_msg_trap + 8
libsystem_kernel.dylib`mach_msg_trap:
-> 0x182ae8fd8 <+8>: ret
libsystem_kernel.dylib`mach_msg_overwrite_trap:
0x182ae8fdc <+0>: mov x16, #-0x20
0x182ae8fe0 <+4>: svc #0x80
0x182ae8fe4 <+8>: ret
Target 0: (WeChat) stopped.
一旦打印出thread #1, queue = 'com.apple.main-thread
,证明监听了WeChat成功了
WeChat程序现在属于断点模式
lldb终端输入指令c,去除断点
c
输出
Process 22566 resuming