DFU模式下iPhone启动过程
说道这里,就不得不提到Pwned DFU模式.
Pwned DFU模式
pwned Boot ROM漏洞存在是非常罕见的。最出名的就是checkm8漏洞,它利用是一个 CVE ID 为 CVE-2019-8900 的bootrom漏洞,该漏洞利用 USB DFU 堆栈中的释放,它存在于 iOS、iPadOS、tvOS、watchOS、bridgeOS、audioOS 以及处理器介于 A5 和 A11处理器之间。bootrom级别的漏洞存在于闪存芯片里,无法通过软件更新补丁来修补。
处于Pwned DFU模式的设备,绕过了Apple的安全引导链的检查,允许加载自定义的文件。而所有加载的文件,都需要经过解密修补之后才能正确的被设备识别,并且加载到设备里。
二、制作RamDisk
🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸
既然知道了Ramdisk的原理以及它的作用,那么我们如何制作一个出来呢?
好在互联网发达的今天,很多东西不需要我们从头开始。很多优秀的iOS研究人员和爱好者,已经分享了他们的优秀工具和方法,我们只需要稍微理解并且按照步骤,就可以制作出适合的Ramdisk。
在这里,玄烨本篇文章将以danieltroger的telnetd_ramdisk为例子,详细分析和解释整个过程。如果你也想按照教程做,就需要一定的知识基础,需要更多的耐心和精力,失败可能随时发生。玄烨可能没有这个精力去解答或者指导你完成整个制作,需要自己更多专研。
支持iPhone5s、6、6s/6sp、SE、7/7p、8/8P、X
准备环境:MacOS 10.15~12.3
准备苹果电脑或者黑苹果系统(不支持虚拟机)
仅支持telnet远程,不支持SSH,没有SFTP.
🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇🍇
danieltroger的ramdisk也是基于msftguy 的 ssh_rd制作的,不过他特别强调无法让ssh正常起作用,所以使用telnet代替ssh来让这个ramdisk正常连接,从而开启远程通道。开始动手吧!
一、克隆拉取整个telnet-ramdisk项目。
打开电脑上的终端,输入命令执行:
cd ~/desktop/
git clone https://github.com/danieltroger/telnetd_ramdisk.git --recursive
肯会有错误,因此,可能需要良好的网络来支持github,才能下载完整个项目。或者下载玄烨已经克隆好的:telnet_ramdisk(提取码356655)解压密码dkxuanye.cn
二、在终端定位到文件夹目录,开始执行制作。
make_telnet_rd.php就是制作的主脚本,它的用法是:
-d 设备标识 (example: iPhone10,4)
-b 主芯片型号 (example: d201ap)
-v 用来制作 ramdisk 的iOS版本
-s shsh2文件(任何版本都可以)
-h 帮助
举例说明:
./make_telnet_rd.php -d iPhone10,6 -b D221AP -v 13.0 -s 13.0.shsh2
表示制作iPhone10.6的13.0版本的ramdisk 。爱思助手查看设备详情可以获取详细信息。
我如果要制作iPhone6s的ramdisk,那么我的命令是:
./make_telnet_rd.php -d iPhone8,1 -b N71AP -v 14.3 -s 15.5.shsh2
shsh2文件通过https://tsssaver.1conan.com/v2/网站获取。最新iOS15.5版本也可以。下载好以后,把shsh2文件重命名后,放入telnetd_ramdisk目录。
一开始肯定会有很多错误提示,这是正常现象,不要被这些错误吓到。毕竟这只是爱好者个人研发,不可能是完美的,每台电脑环境、版本也不同,出现的问题也不一样。如果是公司的官方发布的正式版,那样肯定问题很少,因为他们内部已经测试很多次了。
一开始需要下载安装很多工具运行必备的插件依赖dependencies,下载解压。缺什么就补什么
比如上图的问题,提示找不到firmwares.json。那么你下载这个firmwares.json,然后把Mac电脑的查看隐藏文件开启,把firmwares.json放入.cache文件夹内,然后再次运行命令。
如果前面的依赖插件缺少的文件都完整之后,脚本开始自动下载创建Ramdisk的必须文件,自动解密固件秘钥、重新打包整合。
当你能看到这个画面的时候,玄烨要恭喜你,已经成功了一半了,继续加油!
这里提示:是否需要添加和修改一些工具进ramdisk,默认回车就好。
当看到这个画面的时候,表示ramdisk已经制作完成,提示是否需要启动引导设备。输入yes,并且回车之后,就可以开始引导设备。
但,我一般会按Ctrl+c取消。
在目录下会有WD_iPhone8,1-N71AP-14.0_telnet_rd这样的文件夹,双击进去:
必须确认目录有以下6个文件:
iBSS、iBEC、devicetree.img4、kernelcache.img4、ramdisk、trustcache.img4
以上六个文件,缺一不可。如果有缺少文件,请检查终端报错的位置,再次运行命令。
到此,Ramdisk的制作完成了!完成度90%
🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯🥯
三、引导Ramdisk启动
===================================================================
现在来引导设备启动ramdisk,制作好的ramdisk支持iOS13.0~iOS15.5版本。当然也会有一些会启动不了,那就需要不断的调整、测试、修改文件,直到找到最完美的方案。
支持已经刷机最新iOS15.5的设备,也支持锁屏密码/停用界面的设备。
一、在telnetd_ramdisk目录内,此时生成了一个类似的bootrd_N71AP_14.3.sh启动脚本文件,玄烨建议修改一下脚本参数,再来运行它启动。
打开.sh启动脚本文件,如下图,对照我的修改sleep后面的数字,让脚本运行的更加合理。
连接iPhone/iPad设备到电脑,并且让设备进入DFU模式
终端输入:./bootrd_N71AP_14.3.sh
脚本开始自动运行,发送文件到设备,一切都完成之后,可以看到设备跑代码,最后停进度条画面。
如果脚本执行完,设备始终停留卡在恢复模式,那么是kernelcache内核文件存在问题。
按照下面这个链接的双启动文章里修补内核kernelcache
https://dualbootfun.github.io/dualboot/patching_bootchain.html
现在终端运行:iproxy 2323 23
,开启代理通道
再次新建打开一个终端,输入:telnet 127.0.0.1 2323
开启Telnet远程登录
用户名login: root
密码Password:alpine
成功登录之后,就可以看到手机系统了!
如果提示找不到Telnet,通过brew install telnet来安装。
💐恭喜你!完美运行Ramdisk!在不越狱的情况下,完美读取系统!
运行mount,可以看到已经挂载的分区。玄烨品果提示用户分区数据一般在/mnt2,还需要几步操作来挂载。
首先挂载加密分区
mount_apfs /dev/disk0s1s6 /mnt6
运行解密固件
/usr/libexec/seputil --load /mnt6/*/usr/standalone/firmware/sep*
最后挂载mnt2分区
mount_apfs /dev/disk0s1s2 /mnt2
提示:mount_apfs: volume could not be mounted: Resource busy!
这是正常情况,运行cd /mnt2
,再次运行ls
。恭喜你!至此大功告成!Ramdisk已经完美运行。
分享一些有用的路径:
iCloud账户:
/mnt2/mobile/Library/Accounts/
照片视频短信备忘录:
/mnt2/mobile/Media/
运营商配置文件:
/mnt2/mobile/Library/Carrier Bundles/Overlay
激活证书:
/mnt2/containers/Data/System/*/Library/activation_records(*代表其中的一个文件夹)
黑解ICCID证书:
/mnt2/wireless/Library/Preferences/com.apple.commcenter.device_specific_nobackup.plist
🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕
全部教程完毕!
玄烨原创文章!禁止转载