iOS15免越狱SSH-RamDisk的技术原理分析、制作指南

编者注:想写这篇文章已经好久了,终于有时间来做这件事。本篇文章中,玄烨将分析和介绍Ramdisk的原理以及实现过程,篇幅可能会比较长。

一、原理分析

🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽🌽

RamDisk(内存盘)

A ramdisk is what iTunes boots to upgrade the firmware and the NOR, and in the case of the iPhone and 3G iPad, it upgrades the baseband.

iPhone维基百科的解释是ramdisk是iTunes启动刷机时,例如iPhone、iPad全新刷机写入固件和刷写NOR闪存芯片时的引导盘。ramdisk存在于IPSW固件当中,并且分为Restore Ramdisk和一个Update Ramdisk。

说的简单点,ramdisk其实是一个准系统环境,相当于Windows安装系统的PE环境,亦或者相当于MacOS安装系统时的Recovery环境。这么说,相信你肯定能理解了。

玄烨查阅了更多的资料,上面提到:加载ramdisk内存盘时,不会对用户分区的数据进行任何更改,因此,它可以绕过或禁用设备上的安全性。

说道这里,不得不提一下Apple设备一种特殊模式状态:

DFU 模式,它允许iPhone、iPad设备与 iTunes 连接,而无需加载iOS系统或引导加载程序。也就是说在DFU模式下,可以与设备进行数据传输。

🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲

此后,而在此基础上演变而来的SSH-Ramdisk,具备更多的功能。因为有SSH的通道,可以对iPhone的系统数据进行更多的操作、文件的修改。

早期的iOS版本中,很多越狱都利用了这一特点,比较著名的就是Redsn0w越狱工具。如果你留心关注过越狱过程,其中就有一项Ramdisk加载。玄烨很喜欢这个大菠萝,非常经典的画面。
msftguy早期也发布过一款基于Java环境的,自动创建和载入SSH-Ramdisk工具,它支持iPhone4的任何版本。如果你对此感兴趣,可以看他的博客原文。它支持A4芯片运行,支持iOS5、6、7版本,可以挂载mnt2分区。

🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀

前面用小篇幅介绍了ramdisk的起源以及它的基本作用,让我们大概清楚了它的主要功能。

Ramdisk在2022年的新功能:

1,可以拯救白苹果崩溃的手机,如果是因为内存满而导致无法开机,可以删除一些无用的数据,让设备正常开机。

2,如果是忘记锁屏密码或者/停用界面的设备,可以通过备份数据文件,重新刷机还原文件来解救手机。

3,如果是忘记iCloud密码或者被骗登录别人账户,可以删除账户数据,来让设备重新正常使用。

4,如果是卡贴机,可以备份iccid完美黑解证书。

通过将自定义 ramdisk 加载到内存中,以此来访问iOS文件系统。并不会更改用户数据,因此不会破坏原本的数据。

但是,iPhone安全规则阻止我们加载自定义 ramdisk。那么该如何实现?

我们可以通过利用一个Boot ROM漏洞来实现这一点,如下图所示:

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。

在这里,玄烨本篇文章将以danieltrogertelnetd_ramdisk为例子,详细分析和解释整个过程。如果你也想按照教程做,就需要一定的知识基础,需要更多的耐心和精力,失败可能随时发生。玄烨可能没有这个精力去解答或者指导你完成整个制作,需要自己更多专研。

danieltroger的Ramdisk的Github开源页面

支持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

🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕

全部教程完毕!

玄烨原创文章!禁止转载

为您推荐