iPhone变砖-记录一次无限菊花圈的不刷机抢救过程

起因

使用越狱机有七年多了,中间也换过几次手机,每次拿到新的iOS设备的时候想到的第一件事就是越狱,然后装上一些经典的插件。

昨天给手机安装iCleaner Pro的时候不小心锁屏了,等我要解锁时手机就突然注销,然后菊花圈一直在转,见此情况我也只能强制关机,重新启动到未越狱的状态;但是再次尝试越狱后还是会发生无限转圈的错误。

我把我这次的修复过程贴出来给大伙做个参考,虽然技术力不算太高但是仍然有用,想到曾经遇到这种问题我就直接刷机了居然感觉还有点亏,也给各位打个小小的预防针

设备情况

本人使用的iPhone 6s 64G iOS10.2,Yalu越狱,去年花了好久才从闲鱼上淘到的一部无锁无ID的iOS10设备,对正在阅读本篇文章的iOS10用户可能比较有帮助。
这个方法利用了Yalu的特性,因此我不能保证doubleH3lix这些是否也具备相同特性。

解决思路

考虑到是在安装插件的过程中发生的错误,因此我决定通过SSH来找到是什么地方出的问题,第一时间想到了爱思助手自带的打开SSH通道功能

打开SSH
通过其他设备连接
root身份登录
通过APT工具查看问题
通过dpkg查看问题
删除可能导致问题的文件
打包备份必要数据

爱思助手打开SSH通道后弹窗
正常的流程就是打开终端直接使用ssh命令连接到设备,但是这里出现的问题也很明显,根本无法连接,控制台返回如下:

(base) TorrekietekiMacBook-Pro:~ Torrekie$ ssh [email protected]:1025
ssh: Could not resolve hostname 127.0.0.1:1025: nodename nor servname provided, or not known

既然爱思助手的这个功能行不通,那就只能另辟蹊径了

在iOS10 Yalu越狱的设备上,一般不会被推荐安装OpenSSH,这是因为Yalu自带了一个叫做Dropbear的东西起到了替代作用
但是在Yalu的默认设置里面,它的ssh通道是仅面向本地(本机)的,我们并不能从另外一个设备去访问。

因此我们要对yalu102的ipa文件稍作修改,来实现局域网内的访问

重启恢复到未越狱状态后,我卸载了手机上已经安装的yalu102,并在电脑上找到yalu102的ipa文件,解压,找到dropbear.plist文件(/Payload/yalu102.app/dropbear.plist)

这个文件用于控制dropbear的启动项,在用户执行越狱操作之后,dropbear就会在后台启动。
Payload下的yalu102.app
这个就是我们要找的文件
使用plist编辑器(本人在用macOS所以直接用Xcode做示范了)打开,有一个ProgramArguments数组,展开后有5项,第五项就是对应ssh被打开后的端口设置

此处把127.0.0.1:22更改为22,保存
dropbear.plist


接下来的步骤就是打包了,因为我在使用macOS操作,要避免“归档实用工具”在打包时插入 __MACOSX文件夹,所以使用zip命令将已经修改好的文件打包
cd 你解压的位置
zip yalu.ipa * -r

正常返回如下
(注:注意查杀一下.DS_Store文件,这里还是不小心打包进去了)

(base) TorrekietekiMacBook-Pro:yl Torrekie$ zip yalu.ipa * -r
  adding: Payload/ (stored 0%)
  adding: Payload/.DS_Store (deflated 95%)
  adding: Payload/yalu102.app/ (stored 0%)
  adding: Payload/yalu102.app/_CodeSignature/ (stored 0%)
  adding: Payload/yalu102.app/_CodeSignature/CodeResources (deflated 77%)
  adding: Payload/yalu102.app/[email protected] (stored 0%)
  adding: Payload/yalu102.app/0.reload.plist (deflated 19%)
  adding: Payload/yalu102.app/[email protected] (deflated 0%)
  adding: Payload/yalu102.app/launchctl (deflated 70%)
  adding: Payload/yalu102.app/[email protected] (deflated 2%)
  adding: Payload/yalu102.app/[email protected] (deflated 0%)
  adding: Payload/yalu102.app/[email protected] (deflated 2%)
  adding: Payload/yalu102.app/AppIcon29x29~ipad.png (stored 0%)
  adding: Payload/yalu102.app/[email protected] (deflated 1%)
  adding: Payload/yalu102.app/[email protected] (deflated 1%)
  adding: Payload/yalu102.app/[email protected] (deflated 2%)
  adding: Payload/yalu102.app/Base.lproj/ (stored 0%)
  adding: Payload/yalu102.app/Base.lproj/Main.storyboardc/ (stored 0%)
  adding: Payload/yalu102.app/Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib (deflated 34%)
  adding: Payload/yalu102.app/Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib (deflated 44%)
  adding: Payload/yalu102.app/Base.lproj/Main.storyboardc/Info.plist (deflated 42%)
  adding: Payload/yalu102.app/Base.lproj/LaunchScreen.storyboardc/ (stored 0%)
  adding: Payload/yalu102.app/Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib (deflated 41%)
  adding: Payload/yalu102.app/Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib (deflated 33%)
  adding: Payload/yalu102.app/Base.lproj/LaunchScreen.storyboardc/Info.plist (deflated 42%)
  adding: Payload/yalu102.app/reload (deflated 59%)
  adding: Payload/yalu102.app/AppIcon40x40@2x~ipad.png (deflated 1%)
  adding: Payload/yalu102.app/AppIcon76x76@2x~ipad.png (deflated 2%)
  adding: Payload/yalu102.app/AppIcon83.5x83.5@2x~ipad.png (deflated 2%)
  adding: Payload/yalu102.app/yalu102 (deflated 70%)
  adding: Payload/yalu102.app/AppIcon29x29@2x~ipad.png (deflated 0%)
  adding: Payload/yalu102.app/AppIcon40x40~ipad.png (stored 0%)
  adding: Payload/yalu102.app/AppIcon20x20~ipad.png (stored 0%)
  adding: Payload/yalu102.app/dropbear.plist (deflated 13%)
  adding: Payload/yalu102.app/tar (deflated 43%)
  adding: Payload/yalu102.app/bootstrap.tar (deflated 64%)
  adding: Payload/yalu102.app/AppIcon20x20@2x~ipad.png (stored 0%)
  adding: Payload/yalu102.app/Info.plist (deflated 35%)
  adding: Payload/yalu102.app/PkgInfo (stored 0%)
  adding: Payload/yalu102.app/AppIcon76x76~ipad.png (deflated 1%)

命令执行正常的情况下,你可以在这个文件夹里面看到yalu.ipa,就是我们刚刚打包完成的文件。
下一步把这个ipa安装到设备
(我使用的签名工具是AltDeploy,其他工具亦可)
AltDeploy
安装完成后,前往iPhone>设置>Wi-Fi,查看手机当前所在局域网所分配的内网IP
Wifi设置
记住这个IP,接下来执行越狱操作,可以看见又开始无限转圈了


确保电脑与手机处在同网络下,我们ssh到手机,以root身份登录,目标位置就是刚刚记下的内网IP (root默认密码 alpine,建议各位登录后使用 passwd命令及时修改)
ssh root@目标位置

连接成功,说明dropbear正常工作

(base) TorrekietekiMacBook-Pro:yl Torrekie$ ssh [email protected]
The authenticity of host '172.31.16.77 (172.31.16.77)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.31.16.77' (ECDSA) to the list of known hosts.
[email protected]'s password: 
iPhone:~ root#

我首先做的一件事情是刷新一下软件源,不管有没有用,总还是一个好习惯

apt-get update

iOSAPT更新
apt-get可以正常工作,说明我们可以对插件执行下一步操作
当然我首先想到的是用apt-get remove卸载我刚刚安装的插件,不过因为我也没有记住这个插件的ID,所以只能另辟蹊径
(插件的ID可以在每个插件的预览页面底端找到)
(尽量不要下载明显被修改ID的插件,从作者官方源下载是首选)
例子
所以接下来我计划使用APT自带的检查工具来查找是否有哪些插件的安装配置不正常,结果dpkg自己的配置都有问题

apt-get check
iPhone:/var/mobile/Documents/CyDown root# apt-get check
E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem. 

不过大部分情况下,dpkg错误都会提示让你执行dpkg --configure -a,执行完之后通常也确实能自动修复一些问题,它能够检查出有哪些地方错了并告诉你

iPhone:/var/mobile/Documents/CyDown root# dpkg --configure -a
Setting up net.85819.ios.otrlocation (6.1.1-2) ...
No matching processes were found
/System/Library/LaunchDaemons/com.apple.AOSNotification.plist: The specified service path was not in the service cache
/Library/LaunchDaemons/com.apple.AOSNotification.plist: No such file or directory
/Library/LaunchDaemons/com.apple.icloud.findmydeviced.plist: No such file or directory
/System/Library/LaunchDaemons/com.apple.icloud.findmydeviced.plist: service already loaded
/System/Library/LaunchDaemons/com.apple.icloud.fmflocatord.plist: service already loaded
---------------------------
Please reboot your device!
---------------------------
Setting up com.exile90.icleanerpro (7.8.0) ...

如控制台返回所示,我在发生问题之前正在安装net.85819.ios.otrlocationcom.exile90.icleanerpro两个插件,dpkg将这两个问题插件进行了自动配置后,提示我重启设备。

至此,问题基本解决。
其实没有必要重启,所以我选择重新载入SpringBoard,执行如下命令

killall SpringBoard

紧接着,随着一声清亮的充电提示音发出,菊花圈成功地消除了下去,输入密码界面显示出来。
输入密码

总结

不管你的设备目前是否发生了问题,请一定要注意在发生问题之前提前做好准备,以便在任何异常发生时可以通过SSH访问手机,执行必要的操作。

安装插件时发生的错误通常会导致SpringBoard无法正常加载,遇到无限菊花圈不要惊慌,通过APT工具来进行插件管理(Cydia本质上就是一个可视化的APT工具)

熟练使用bash命令非常重要,当然如果不行的话还是要确保会用apt-get和dpkg,如果无论什么手段都无法挽回,可以及时将设备中重要数据打包导出,刷机处理。

发布了1 篇原创文章 · 获赞 0 · 访问量 43

猜你喜欢

转载自blog.csdn.net/qq_28236115/article/details/105330922