本漏洞实现原理均为转载,仅用于学习交流使用。因不当操作造成设备损坏概不负责。

前言

一觉醒来,刷机圈直接爆了

骁龙8g2及以上的CPU有一个启动时漏洞,可以选择以宽容模式的SELinux启动。执行fastboot oem set-gpu-preemption-value 0 androidboot.selinux=permissive即可。

其次,是小米的一个申必漏洞,可以以Root权限执行任何命令。

最后,是骁龙8E5的严重漏洞,因这一代新加了一个efisp分区,但第三方OEM厂商(如国内粮厂定制ROM)没有做该分区的校验,因此只要有了Root权限就能往分区里塞东西。

换句话说,小米搭载8e5的手机,都可以免解锁 BL 进行刷机。

38解锁节来了

呐,金凡,你现在是什么心情?

KernelSU的作者维术也在微信发布了最新版KSU的“越狱模式”演示,比先前网上传的一键脚本方便很多。

复现

文件下载

需要用Github Action中的文件:kernel: enforcing selinux at late-load mode · tiann/KernelSU@63bcb1b

下载manager,将APK发一份到手机上安装好,随后再将APK当成压缩包解压,找到lib/arm64-v8a/libksud.so,解压出来备用,待会要发到手机上。

还需要一个修补LSP的脚本fix_lspd.sh,在mi_nobl_root/fix_lspd.sh at main · xunchahaha/mi_nobl_root

运行KSU

重启手机到fastboot:adb reboot bootloader

这里要注意,不能直接adb reboot fastboot,这样子进入的是FASTBOOTD,而非FASTBOOT

第一个是Bootloader内的fastboot,第二个是recovery(userspace)内的fastboot

对于新的动态分区设备,AOSP指出,应当用fastbootd来刷写分区。但我们现在要绕过Bootloader做事,应该用fastboot,所以要进入Bootloader。

然后执行:

1
2
fastboot oem set-gpu-preemption 0 androidboot.selinux=permissive
fastboot continue

开机后打开KernelSU管理器,如果显示SELinux状态为宽容则正常。

杀掉KernelSU后台,连上电脑,进入ADB:

1
2
3
4
5
6
7
8
9
10
# 推送必要文件
adb push libksud.so /data/local/tmp/
adb push fix_lspd.sh /data/local/tmp/

# 给予运行权限
adb shell chmod 777 /data/local/tmp/libksud.so
adb shell chmod 777 /data/local/tmp/fix_lspd.sh

# 运行
adb shell service call miui.mqsas.IMQSNative 21 i32 1 s16 "/data/local/tmp/libksud.so" i32 1 s16 'late-load' s16 '/sdcard/ksulog.txt' i32 60

其中用到的内部漏洞命令格式为:

1
service call miui.mqsas.IMQSNative 21 i32 1 s16 "[命令]" i32 1 s16 "[参数列表]" s16 '[输出路径]' i32 [超时]

等待两分钟,然后打开KSU,不出意外的话,就会显示 [越狱模式]

安装 Zygisk 和 LSP

Zygisk 和 LSP 的相关介绍可以在 当我们在谈论Root时,我们究竟在谈论什么?③ 找到。

下载 Zygisk Next:Dr-TSNG/ZygiskNext: Standalone implementation of Zygisk

LSP需要根据安卓版本选择。目前A16版本使用内测版的LSP-it正常,版本为v1.9.2-it (7467)

首先在KSU的超级用户管理界面给上shell以root权限,方便ADB直接操作。

在KSU内安装两个模块后,无需重启,只需在ADB内以超级用户权限执行:

1
ksud post-fs-data

随后等软重启结束后下拉刷新,可以看到模块安装完毕。后续安装新KSU模块也可以用这种方式免重启加载。

安装完毕!

禁止刷入一切修改只读分区的模块,否则会导致AVB校验不通过、重启变砖!

激活 LSP

有时候执行完上一步后,Zygote会出现注入异常。需要运行下面指令:

1
2
3
adb shell
su
/data/local/tmp/fix_lspd.sh

随后等待重启刷新即可。如果一切正常,就能看到Zygote注入成功,且LSP模块正常加载。

记得进入Zygisk Next的配置页面,将“排除列表策略”修改为“仅还原挂载”,并根据需求选择是否开启匿名内存和链接器。

安装LSP模块后,若模块作用域包含系统框架,按理来说需要重启。为了不丢失Root,只在ADB内以超级用户权限重启Zygote即可:

1
setprop ctl.restart zygote

隐藏环境

新版本的KSU支持越狱模式,在越狱激活后会自动给SELinux上锁到enforcing

安装TrickyStore KSU 模块以修复TEE;安装HMA-OSS LSP模块以隐藏应用。

安卓系统启动时的ro.boot.selinux=permissive是没办法修改的,一定会被检测出来。

模块与应用

系统增强类:HyperCeiler

游戏优化类:AsoulOpt

万能工具箱:爱玩机

调度优化:Scene

界面美化:Capsulyric

充电调整:FreePPS

常用应用模块:QAuxiliary、FunBox

后记

以前那些“小米首发高通CPU”都弱爆了,首发漏洞才是水火无敌。

每当我以为刷机圈没热度的时候,小米总能整个大活。从之前的HyperOS解锁名额收紧,到绕过账号绑定解锁,再到彻底关闭解锁通道,再到旗舰机免解锁一键刷机……

我骂小米,但我还用小米,因为他真能解锁。

不知道这最后的狂欢还能持续多久?

童年那个刷机包与模块满天飞、天天折腾卡刷与线刷的时代,可能再也不会回来了。