1、连接iPhone手机
ssh root@123.123.12.123
2、找到启动的进程
ps aux
3、找到目标进程,根据进程名称进行调试
debugserver localhost:1234 -a jinchengmingcheng
或 根据进程号进行调试
debugserver localhost:1234 -a jinchenghao即PID例如6666
此时终端结果
debugserver-@(#)PROGRAM:LLDB PROJECT:lldb-123.3.23
for arm64.
Attaching to process jinchengmingcheng...
Listening to port 1234 for a connection from localhost...
Waiting for debugger instructions for process 0.
注意:如果此时不用usb调试,需把localhost改为*或对应手机IP地址,
命令如下:
debugserver *:1234 -a jinchengmingcheng
但这样经常报错
lldb报错:
error: failed to get reply to handshake packet
debugserver报错:
error: rejecting incoming connection from
4、用usb调试,因为wifi调试非常慢,且经常报错,所以这里做端口转发后,再连接
4.1、下载http://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.bz2
4.2、进入cd到下载usbmuxd-1.0.8.tar.bz2的目录中,并执行如下命令
tar xjfv usbmuxd-1.0.8.tar.bz2
cd usbmuxd-1.0.8/python-client
python tcprelay.py -t 1234:1234
执行结果
Forwarding local port 1234 to remote port 1234
Incoming connection to 1234
Waiting for devices...
Connecting to device <MuxDevice: ID 456 ProdID 0x7890 Serial 'jfieaojgiajgieiajgiajgijafiojeihguabghfhuehfuaeufu' Location 0x12340000>
Connection established, relaying data
Connection closed
5、新建终端
lldb
6、连接
(lldb) process connect connect://localhost:1234
注意:如果此时不做端口转发,即不走第4步,需要把localhost改成真实的手机IP地址,
可以用如下命令
process connect connect://123.123.12.123:1234
但这样经常遇到连接失败,报错如下
error:failed to get reply to handshake packet
等一会就会出现
Process 6985 stopped
* thread #1, stop reason = signal SIGSTOP
frame #0: 0x00000001b29000f4 libsystem_kernel.dylib`mach_msg_trap + 8
libsystem_kernel.dylib`mach_msg_trap:
-> 0x1b29000f4 <+8>: ret
libsystem_kernel.dylib`mach_msg_overwrite_trap:
0x1b29000f8 <+0>: mov x16, #-0x20
0x1b29000fc <+4>: svc #0x80
0x1b2900100 <+8>: ret
Target 0: (picsmagicartae) stopped.
此时输入
c
能让程序继续运行响应外部事件
内存真实地址 = Hopper或IDA中获取的方法对应的地址 + 模块加载的基地址
7、对内存真实地址设置调试断点
b 0x000000000008932c
最后注意:
实际操作中发现,上述方法有时仍然报错
error:failed to get reply to handshake packet
此时 先用真机和XCode自己编译一个程序,然后先用上述方法调试自己编译的程序,成功后,再去编译从App Store上下载的其他程序,成功率有提高。