深入理解Electra文件系统:越狱后文件结构与传统方案对比分析
【免费下载链接】electraElectra iOS 11.0 - 11.1.2 jailbreak toolkit based on async_awake项目地址: https://gitcode.com/gh_mirrors/elec/electra
Electra是一款针对iOS 11.0 - 11.1.2系统的越狱工具包,基于async_awake漏洞实现。越狱后,iOS设备的文件系统会发生显著变化,为用户带来更多自定义和系统访问权限。本文将深入剖析Electra越狱后的文件结构,并与传统iOS文件系统进行对比分析,帮助新手用户全面了解越狱前后的文件系统差异。
传统iOS文件系统的限制
未越狱的iOS设备采用封闭的文件系统架构,普通用户无法访问系统核心目录和文件。苹果通过严格的沙盒机制限制应用程序的访问范围,每个应用只能在自己的沙盒目录内读写数据,无法跨应用访问或修改系统文件。这种限制虽然保证了系统的安全性和稳定性,但也极大地限制了用户对设备的自定义和控制能力。
Electra越狱对文件系统的改造
Electra越狱通过一系列复杂的技术手段,突破了iOS的沙盒限制,对文件系统进行了深度改造,主要体现在以下几个方面:
根目录重新挂载为可读写
在传统iOS系统中,根目录(/)通常以只读方式挂载,防止用户和应用程序对系统文件进行修改。Electra越狱通过修改内核参数和挂载标志,将根目录重新挂载为可读写模式。这一过程在electra/the fun part/fun.c文件中实现,核心代码如下:
// Remount / as rw - patch by xerub with nosuid patch added by coolstar uint64_t _rootvnode = find_rootvnode(); uint64_t rootfs_vnode = rk64(_rootvnode); uint64_t v_mount = rk64(rootfs_vnode + offsetof_v_mount); uint32_t v_flag = rk32(v_mount + offsetof_mnt_flag); v_flag = v_flag & ~MNT_NOSUID; v_flag = v_flag & ~MNT_RDONLY; wk32(v_mount + offsetof_mnt_flag, v_flag & ~MNT_ROOTFS); char *nmz = strdup("/dev/disk0s1s1"); int rv = mount("apfs", "/", MNT_UPDATE, (void *)&nmz); printf("remounting: %d\n", rv);通过这段代码,Electra将根目录的挂载标志修改为可读写,使得后续的文件操作和系统修改成为可能。
新增/bootstrap目录
Electra越狱后会在根目录下创建一个名为/bootstrap的新目录,作为越狱环境的核心文件系统。这个目录包含了大量越狱所需的工具、二进制文件和配置文件,如electra/bootstrap/binaries/unjailbreak.sh等。/bootstrap目录的主要作用是:
- 提供越狱环境所需的基础工具和命令
- 存储越狱相关的配置文件和脚本
- 作为越狱后新增文件和目录的挂载点
文件权限和访问控制的修改
为了实现对系统文件的访问和修改,Electra越狱还对文件权限和访问控制进行了调整。例如,在electra/the fun part/fun.c中,通过修改进程的凭据(ucred)来提升权限:
// Properly copy the kernel's credentials so setuid(0) doesn't crash uint64_t kern_ucred = 0; KCALL(find_copyout(), kern_proc+0x100, &kern_ucred, sizeof(kern_ucred), 0, 0, 0, 0); uint64_t self_ucred = 0; KCALL(find_copyout(), our_proc+0x100, &self_ucred, sizeof(self_ucred), 0, 0, 0, 0); KCALL(find_bcopy(), kern_ucred + 0x78, self_ucred + 0x78, sizeof(uint64_t), 0, 0, 0, 0); KCALL(find_bzero(), self_ucred + 0x18, 12, 0, 0, 0, 0, 0); setuid(0);这段代码将当前进程的凭据替换为内核进程的凭据,从而获得root权限,实现对系统文件的完全访问和控制。
Electra越狱后的文件结构
Electra越狱后的文件系统在保留原有iOS目录结构的基础上,新增和修改了部分关键目录和文件。以下是一些重要的目录和文件及其功能:
/bootstrap目录
如前所述,/bootstrap是Electra越狱环境的核心目录,包含了大量越狱所需的工具和文件。例如:
/bootstrap/bin:存放各种二进制工具,如tar、rm等/bootstrap/Library/LaunchDaemons:存放启动守护进程的配置文件,如dropbear.plist/bootstrap/usr:存放用户级别的工具和库文件
/Library/Themes
Electra越狱后新增了/Library/Themes目录,用于存放主题文件。这个目录通常通过符号链接指向/bootstrap/Library/Themes,方便用户管理和更换主题:
unlink("/Library/Themes"); symlink("/"BOOTSTRAP_PREFIX"/Library/Themes", "/Library/Themes");/usr/lib/SBInject
/usr/lib/SBInject目录用于存放SpringBoard注入相关的文件,是实现主题和插件功能的关键目录之一。Electra通过以下代码管理这个目录:
if (!file_exists("/usr/lib/SBInject")) { rename("/"BOOTSTRAP_PREFIX"/Library/SBInject", "/usr/lib/SBInject"); symlink("/usr/lib/SBInject","/"BOOTSTRAP_PREFIX"/Library/SBInject"); } else { rv = posix_spawn(&pd, "/bootstrap/bin/rm", NULL, NULL, (char **)&(const char*[]){ "rm", "-rf", "/"BOOTSTRAP_PREFIX"/Library/SBInject", NULL }, NULL); waitpid(pd, NULL, 0); symlink("/usr/lib/SBInject","/"BOOTSTRAP_PREFIX"/Library/SBInject"); }传统方案与Electra文件系统的对比
| 特性 | 传统iOS文件系统 | Electra越狱文件系统 |
|---|---|---|
| 根目录权限 | 只读 | 可读写 |
| 系统文件访问 | 受限制 | 完全访问 |
| 自定义主题支持 | 不支持 | 支持,通过/Library/Themes |
| 第三方插件支持 | 有限 | 全面支持,通过SBInject等机制 |
| 命令行工具 | 有限 | 丰富,包含在/bootstrap/bin等目录 |
| 文件权限控制 | 严格的沙盒机制 | 可自定义,支持root权限 |
通过对比可以看出,Electra越狱后的文件系统在功能和灵活性上有了质的飞跃,为用户提供了更多自定义和控制设备的能力。
总结
Electra越狱通过修改根目录挂载方式、新增核心目录和调整文件权限等手段,彻底改变了iOS的文件系统结构。这种改变虽然带来了一定的安全风险,但也为用户提供了前所未有的自定义和控制能力。对于新手用户来说,了解Electra越狱后的文件系统结构,有助于更好地使用和管理越狱设备,充分发挥越狱带来的优势。
如果你想深入了解Electra的实现细节,可以查阅项目源代码,特别是electra/the fun part/fun.c等核心文件。同时,也可以参考项目的官方文档docs/getting-started.md,获取更多关于Electra越狱的使用和开发信息。
【免费下载链接】electraElectra iOS 11.0 - 11.1.2 jailbreak toolkit based on async_awake项目地址: https://gitcode.com/gh_mirrors/elec/electra
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考