目的
在macOS 使用lldb借助USB接口传输ssh通信协议远程调试iphone app
测试环境
- iphone6 12.4(已越狱)
- macOS 10.15.5 Catalina
- lldb 1103.0.22.4
步骤1
iproxy 2222 22
:端口转发- 打开一个新命令窗口
ssh -p 2222 root@127.0.0.1
:执行后进入到iphone命令窗口debugserver -x backboard *:1234 /path/to/app/executable
:先启动进程然后注入,注入后会挂起进程- or
./debugserver *:1234 -a "YourAPPName"
:注入已运行进程 - 打开一个新命令窗口
iproxy 1234 1234
- 打开一个新命令窗口
lldb
(执行后进入lldb命令窗口)platform select remote-ios
process connect connect://localhost:1234
q1- 接下来就可以输入调试命令操作了
调试
c
:继续运行r
:重启si
:指令级步入ni
:指令级步过return
:退出子函数(测试好像没有这个命令)breakpoint set -a 0x012345
:在函数地址下断dis -a 0x12345
:从某地址开始反汇编- eg
dis -a $pc
:从当前欲要执行地址开始反汇编 image list
:获取执行文件基址- or
image list -f -o WhatsApp
:增加过滤选项
script:导入python脚本4
command srcipt import pyFilePath
voltron:调试辅助工具(for macOS)
git clone https://github.com/snare/voltron.git
cd voltron
./install.sh
:这里执行之后会返回一个entry path,稍后会用到- 打开一个新命令窗口
lldb
command srcipt import {entry path}
:entry path 就是上面的,执行之后会显示voltron loaded
voltron init
- 打开一个新窗口
voltron view register
:显示寄存器窗口q2voltron view stack
:显示堆栈窗口q2voltron view disasm
显示汇编窗口q2voltron view backtrace
:显示调用栈q2- 切换到lldb窗口
platform select remote-ios
process connect connect://localhost:1234
q1- 这时再切换到voltron窗口就可以看到效果了
问题
- q1.
error: rejecting incoming connection from ::ffff:127.0.0.1 (expecting ::1)
将*:1234中的’*'改成127.0.0.12 - q2.
Exception getting memory from debugger: NameError("name 'xrange' is not defined>
将克隆地址切换到https://github.com/jonasmr/voltron.git
3 - q3.
参考
- [1] 2018-08-10更新-LLDB常用命令–飘云整理
- [2] IOS越狱12.4之后debugger使用lldb连不上
- [3] fix xrange when using python 3 in lldb. fixes disassembly & registers…
- [4] 脚本模版