非完美越狱手机,尝试所有方法仍不成功后可以重启手机尝试,我也不知道为啥,但是重启后就能成功~~
1.越狱手机上的目录 /Developer/usr/bin/debugserver本身就只有arm64架构,所以直接拷贝到/var/root或者/bin/目录下,不需要瘦身;
2.给debugserver签名
执行./debugserver *:12345 -a [process name]
遇到 error: failed to attach to process named: "" unable to start the exception thread
两种方式
一种ldid
ldid -Sent.plist/-Sent.xml debugserver
一种是直接codesign
codesign -s "085C04530D0208CB6A5A99E1C63E6539FED37339" --entitlements ent.plist -f debugserver
-s后面跟的一串是证书标记的信息,通过下面命令可以获得
security find-identity -v -p codesigning
也可以用后面那部分可读的信息,证书类型+名字("iPhone Developer: XXXXXX (9UB92*****)"),只要能区分出keychain里的不同证书就好。
然而失败了,scp命令拷贝到手机/usr/bin目录下,执行得到killed:9
然后搜索说ent.plist 不完全的,因此找了一份颇为完全的
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.backboardd.debugapplications</key>
<true/>
<key>com.apple.backboardd.launchapplications</key>
<true/>
<key>com.apple.diagnosticd.diagnostic</key>
<true/>
<key>com.apple.frontboard.debugapplications</key>
<true/>
<key>com.apple.frontboard.launchapplications</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
<key>com.apple.springboard.debugapplications</key>
<true/>
<key>com.apple.system-task-ports</key>
<true/>
<key>get-task-allow</key>
<true/>
<key>platform-application</key>
<true/>
<key>run-unsigned-code</key>
<true/>
<key>task_for_pid-allow</key>
<true/>
<key>com.apple.private.skip-library-validation</key>
<true/>
<key>com.apple.private.security.no-container</key>
<true/>
</dict>
</plist>
尝试用codesign签名后仍然失败,怀疑证书权限这些信息是不是没有签上去
codesign -vv -d debugserver
用上面查看二进制文件或.app文件的证书信息,发现签成功了
ldid -e debugserver
ent.plist所包含的各种权限也都有
可执行权限 chmod +x 和 chmod 777都尝试了一遍还是不行
看到有说用这个可以的
/usr/bin/ldid -P -K/usr/share/jailbreak/signcert.p12 -Sent.plist -M /Applications/test12.app/test12
其实这条命令跟codesign+证书签名应该是一样的,所以这应该不是原因
最后再一篇文章里发现发现说要重启手机,我最开始想这是不是有点傻,之前做过都没有说要重启手机的,而且11.4是非完美越狱,重启后我就得再越狱一遍,太麻烦了,但是尝试了各种方法无果后想着死马当活马医吧,所以还是重启了
然后发现重启后竟然就可以了,一把心酸泪~
3.lldb使用
1)先转发端口
./tcpreplay.py -t 12345:12345
2)在越狱手机上监听端口
debugserver 127.0.0.1:12345 -a "程序名(ps -e获得)"
最开始指定IP地址时用的localhost:12345有问题,rejecting incoming connection from ::ffff:127.0.0.1 搜索说是最好具体指定换成了127.0.0.1
3)在mac终端输入lldb,再输入
process connect connect://127.0.0.1:12345
这命令有点耗时,可能出现python错误(ImportError: cannot import name _remove_dead_weakref),在当前终端输入export PATH=/usr/bin:$PATH 切回系统自带python即可
4)终于连上了,就可以像在Xcode一样lldb调试了,只是在设置断点后发现程序抛出异常跑步下去了~~
搜索了下lldb忽略异常的方法,发现要 修改debugserver的代码,感觉有点复杂,暂时放弃了。
唉,其实MonkeyDev进行lldb调试是很好用的,只是这个会修改二进制文件,为了查看从appstore下载的app原生态的信息准备lldb直接调,发现还是问题多多,后续查看是否有其它解决办法吧~
最后我发现把问题问清楚后答案就出来了~
参考文章:
[iOS调试进阶]让lldb在遇到EXC_BAD_ACCESS之后能继续执行进入signal_handle