通常正向开发,通过Xcode 调试手机是这样的:
1.Xcode 会给手机安装一个 debugserver
2.debugserver 依附于某个程序进程
3.Mac上Xcode 链接debugserver,并发送指令 , debugserver 对程序进行调试。
1. 首先USB连接手机 ,cd 到 /Developer/usr/bin下,我们会发现有个文件 debugserver
2.我们以虎牙为例,打开虎牙App,并找到进程名字 kiwi, 调用指令:
./debugserver *:12346 -a kiwi
12346 为debugserver 对外开放的端口,也可以写别的数字
这时候我们发现虎牙已经进入了断电模式,无法操作了
3.打开mac终端 执行 LLDB 就会进入断点模式下
然后再LLDB模式下 执行指令
process connect connect://172.20.10.9:12346
确保mac和手机是在同一个局域网下, 172.29.10.9为手机的联网的ip地址
这时候通过LLDB指令进行 手机调试了。
image list
以上是通过WiFi链接
之前写了个映射端口的脚本,
python2 /Users/evol/evolshells/python-client/tcprelay.py -t 22:12345
采用了一个脚本 进行映射 ,现在加一个端口映射 12346
python2 /Users/evol/evolshells/python-client/tcprelay.py -t 22:12345 12346:12346
然后重新执行
这样端口就映射好了
然后接下来重复上面的过程
./debugserver *:12346 -a kiwi
Mac终端进入 LLDB模式下 执行
process connect connect://127.0.0.1:12346
即可进入调试状态
可能有同学已经发现 每次cd到/Developer/usr/bin下 执行debugserver 不方便,能不能在任意地方都能执行呢?
第一步,在Xcode里找到对应版本的debugserver,我这里越狱手机是9.0.2系统,所以我这里的目录是
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/9.0
该文件夹下有个dmg 文件 双击打开,在usr/bin/ 目录下有个debugserver文件 ,将它拷贝到桌面来先。
第二步,给debugserver赋权限
终端到桌面目录下,执行ldid -e debugserver > debugserver.entitlements ,这样就会生成一个debugserver.entitlements 的plist文件
我们给plist文件添加两个字段
Key : task_for_pid-allow Value:为Boolean类型,YES
Key : get-task-allow Value:为Boolean类型,YES
然后执行 ldid -Sdebugserver.entitlements debugserver
这时候就可以把 debugserver 直接拷贝到手机的 /usr/bin 目录下
直接使用即可
实战项目是给虎牙我的界面 立即登录按钮 添加一个断点
第一步 通过Reveal找到该按钮的内存地址 (也可以通过之前的搜索查找)
第二步 定位到该按钮的target 和 action
为YYMyInfoViewController 该类的 myHeaderCellTap方法
第三步 动过之前安装的frida砸壳, sh dump.sh 虎牙直播 (我这里之前配置好的,没有的话看前面的 砸壳章节)
第四步 将ipa解压拿到执行文件 并进行 hopper分析
第五步 从hopper里搜索该方法的虚拟内存地址
第六步 在LLDB模式下 执行 image list 查看macho文件地址
然后 - 0x100000000 得到 ALSR地址
第七步 将第五步地址+ALSR地址相加 就得到该方法的内存地址
0x00000001001c4f88+0x0x0000000000008000
第八步 LLDB 如果在非断点模式下 则执行 process interrupt 进入断点模式
然后 执行 b -a 0x00000001001c4f88+0x0x0000000000008000
然后会显示 你已成功下好断点
c
continue 过一下
然后点击按钮 断点就生效了。。