1.拷贝越狱手机/Developer/usr/bin目录下的debugserver到Mac电脑,在mac端输入
scp -P 2222 root@localhost:/Developer/usr/bin/debugserver ~/debugserver
2.对debugserver进行瘦身(iOS11可以不用瘦身,因为只支持64位构架的程序),在debugserver所在目录输入lipo -info debugserver . 在终端输入:lipo -thin armv7 debugserver -output debug-server
3.在xcode里新建一个plist文件
<plist version="1.0">
<dict>
<key>com.apple.springboard.debugapplications</key>
<true/>
<key>get-task-allow</key>
<true/>
<key>task_for_pid-allow</key>
<true/>
<key>run-unsigned-code</key>
<true/>
</dict>
</plist>
然后把plist文件拷贝到电脑的debugserver同一个目录下 ,在终端输入
codesign -s - --entitlements en.plist -f debugserver
可以给我们的debugserver赋上task_for_pid权限。
4.然后在终端里输入: codesign -d --entitlements - ./debugserver
查看授权文件描述, plist文件写入的东西
5.终端里输入: scp -P 2222 ./debugserver root@localhost:/usr/bin/debugserver
将debugserver拷贝到手机
6.ps aux 查看手机进程
7.Mac切换到手机 cd /usr/bin/ 以后, 输入chmod +x debugserver,给权限
10.debugserver *:1234 -a WhatsApp
或者
root# debugserver *:1234 -x auto
/var/containers/Bundle/Application/24550860-1E7B-4A59-9753-9E7040DF0DAA/WMMimi.app/WMMimi
通过usb-replay的方式连接debugserver,
(lldb) process connect connect://localhost:1234
报错了
lldb窗口报:
error: failed to get reply to handshake packet
debugserver窗口报:
error: rejecting incoming connection from ::ffff:127.0.0.1 (expecting ::1)
解决:
把debugserver启动试设置的监听 *:1234 改成 localhost:1234
root# debugserver localhost:1234 -x auto
/var/containers/Bundle/Application/24550860-1E7B-4A59-9753-9E7040DF0DAA/WMMimi.app/WMMimi
process connect connect://localhost:1234,
没做端口转发输入
process connect connect://IP
12.连接成功后,输入c继续,然后image list -o -f ,获取基地址
13.拷贝基地址,然后在Hopper里运行你砸完壳以后的 可执行文件,然后找你想调试的函数名,记录下这个函数名的偏移地址,
然后在终端输入br s -a ’基地址+0x偏移地址’,开始断点调试。
如果报错:
warning: failed to set breakpoint site at 0x00000000014cc35 for breakpoint 1.1: error: 0 sending the breakpoint request
先试一下用image list 获取基地址,因为跟image list -o -f获取的地址是不一致的,在打一下断点试试, 如果还是失败,那么用ida去获取mach-o 头的偏移量
br s -a ’基地址+0x偏移地址-0x100000000’ 设置断点成功,
使用
di --start-address '0x0000000100da4000+0x00000000014cc3e4' -count 10
查看,如果和hooper或者ida里的一致,说明打的断点的位置是正确的
如果不一致,那么你就需要用file 命令查看一下这个macho
file xxFramework
dynamically说明是动态库,那么image list 就去找动态库的加载地址(而不是主二进制的)下断点
Frameworks/xxramework.framework/xxFramework