
因B站不允许将文字超链接至外站,请到本文末尾查看所需资源的链接。
0x00
此教程基于华为畅享10 Plus(STK-AL00)编写。不同机型请自行变换步骤。
搞机有风险!搞机有风险!搞机有风险!没有救砖基础不要硬上!刷砖作者不负责!
众所周知,华为因其出色的保护机制让搞机佬们闻之色变。比如…
BL解锁困难(2018年解锁码获取通道就已关闭,麒麟平台甚至无解锁码)
system修改困难(较新款机型的system分区采用华为自研erofs,此文件系统天生只读,也就是说镜像一旦打包完成就无法进行写入操作,无法重挂载为rw模式)
分区编辑困难(华为的设备分区和安卓标准是毫不重合,比如没有boot分区,recovery分区分为了recovery_ramdisk_a、recovery_vendor_a、recovery_vbmeta_a三个部分,这在其它机型上从未有之)
… …所以各位搞机佬买华为之前一定要慎重,搞机买华为就是折磨自己。

但是搞机佬无所畏惧,华为搞机走起

0x01 解BL锁(适用于麒麟平台)
解BL锁之前我们要把手机降级到EMUI10版本以下,否则刷了无锁BL也没用。究其原因,应该是Android 10引入的“超级分区”机制允许手机厂商把启动代码写入动态分配的超级分区中,原来固化的fastboot分区被弃用。刷写超级分区里的fastboot应该也可以奏效,但我从EMUI9升级到EMUI10时升级失败,这事先鸽了。
降级操作要通过华为手机助手进行。
下载华为手机助手后,点击“系统更新”:

在升级按钮旁边有“切换到其它版本”的选项,我们通过那个选项将手机一步步降级到EMUI9(我手机已经降级到最低版本,没法截图),注意不能使用HiSuite Proxy之类的软件从过高版本系统一键降级到EMUI9,华为对跨版本降级做了限制,必须一版版降级。
前面提到,麒麟平台的华为是没有BL解锁码的,只能通过刷无锁BL解锁。
我们需要两个软件:HCU Client和DC-Phoenix,两个软件都需要加密狗或账号认证。这里推荐去闲鱼或淘宝之类的平台租用HCU账号,HCU Timed License和DC-Phoenix License是通用的。
然后,短接主板TP点进COM1.0模式。
第一步要先拆开手机后盖,我的方案是热风枪温度200℃,风速开满,对着手机边缘吹四五分钟,吸盘吸出一条缝(别想着从边缘硬抠,搞不下来)后撬棒接上,拆开手机。没有热风枪的小伙伴可以用吹风机代替。
拆后盖时要注意,如果你的手机是背部指纹,要注意保护指纹排线,搞断了就不好了。
拆开后盖后,拧下上屏蔽罩的螺丝,露出上部主板。有背部指纹排线的机型要用撬棒断开排线接口。

图片来自网络
关机后,查找你的机型对应的短接图,用金属镊子把那个点和旁边的屏蔽罩连起来。

图片来自网络
然后一手拿着镊子,一手长按电源键开机,约三秒后松开电源键。COM1.0模式下开机不振动。注意别插着数据线。
接着把手机连上电脑,打开设备管理器,如果看到“USB SER"的设备就说明短接成功。

图片来自网络
这时候不要急着打什么“牛逼驱动”,我打驱动打了一晚上都没搞好。

右键USB SER,点“更新驱动程序”→“浏览我的电脑以查找驱动程序”→“让我从计算机上可用的驱动程序列表中选取”→“端口(COM和LPT)”→厂商选“Huawei Incorporated”,驱动选“HUAWEI USB COM 1.0”。注意这里的驱动没有版本号。

图片不来自网络,下同
点下一页后,把弹出的不兼容提示关掉,驱动就正确安装了。下图表示COM1.0驱动已正确安装,图标上没有感叹号。

然后打开HCU Client登录账号,模式选“Fastboot / Xloader (HiSilicon only)”,切换到第二个选项卡,选择你的CPU型号,把FBLOCK和Bootloader lock都选成unlocked。不要点Reboot after repair,待会还要用。

选好之后点“Repair”,软件会给手机刷一个无锁BL。至此BL解锁完成。
0x02 Magisk Root
用HCU的账号登录DC-Phoenix,进eMMC Dump选项卡,点Read selected partitions,然后Read partitions list。

按住Ctrl键,然后点recovery_ramdisk_a、recovery_vbmeta_a、vbmeta_a,松开Ctrl键点Read partitions,软件会把这三个分区提取到软件根目录。我操作时引导验证自动关闭了,但为了防止出什么奇怪问题,还是提vbmeta重新关一下引导验证。
提取完成后,我们可以长按电源键10秒重启,可以在Update by TP选项卡里点Reboot,也可以走以下命令:
fastboot reboot 总之能重启就行。
重启后手机打开ADB调试,把提取出来的recovery_ramdisk_a传到手机上:
adb push /path/to/recovery_ramdisk_a.img /storage/emulated/0/Download/ 重启后在GitHub Release界面下载Magisk的安装包,在手机上通过Magisk修补镜像,这里不再赘述。
修补完成后,我们把修补过的镜像拉下来:
adb pull /storage/emulated/0/Download/magisk_patched_xxx.img /path/to/save.img 还是为防止出现什么奇怪问题,对于无法解FBLOCK(即HCU中输出Write FBLOCK for this model not supported)的机型,我推荐用DC-Phoenix刷临时无FBLOCK的BL。如果你认为你的机子有FBLOCK也可以动recovery、vbmeta这些东西…你可以逝一逝

打开DC-Phoenix,切换到Update by TP选项卡,点Load and temporally unlock bootloader

在下边的Bootloader files里选你的CPU型号,然后Do job,软件会刷入一个无FBLOCK的BL,重启失效。
用以下指令刷写patch过的recovery,顺便关闭引导验证:
#通过adb进入fastboot时注意,不能adb reboot fastboot。用户空间下的fastbootd在安卓10才引入。请adb reboot bootloader
fastboot flash recovery_ramdisk_a /path/to/save.img
fastboot --disable-verity --disable-verification flash vbmeta_a /path/to/vbmeta_a.img
fastboot --disable-verity --disable-verification flash recovery_vbmeta_a /path/to/recovery_vbmeta_a.img
#注意是verity不是verify
#别被_a后缀骗了,部分机型不支持AB槽
fastboot reboot 手机重启,打开Magisk App————
wdnmd, 版本获取失败?Magisk没刷上??
你个傻狗是不是在糊弄我啊??

我们的安装方式是“Magisk in Recovery”,按照官方文档,只有启动到Recovery时才会开启Magisk。
adb reboot recovery 如果操作正确,这个指令会重启到系统,而不是Recovery,以后的重启、关机等操作都会保持Magisk开启,不用重新进入Recovery。从eRecovery模式重启到系统时会掉面具,重新跑一遍上面的adb就好了。
现在打开Magisk App,就能获取到版本号了。

0x03 system扩容失败 & 救砖
此部分为错误示范。前导知识: 1. 华为在较新款机型的system分区都使用了自研的erofs文件系统。该系统一旦镜像制作完成便无法写入数据,只能读取,要修改数据只能重新制作镜像。所以,在adb shell里重新挂载system分区对erofs无效。 2. EMUI似乎将系统的部分组件放在了data分区下。自家recovery执行格式化时自然能认识,但第三方rec和fastboot不认。如果你打算继续使用EMUI,不要在第三方工具随手双清,轻则系统bug,重则砖。 3. 华为手机除了recovery,还有一个叫eRecovery的系统恢复模式。进入方法:关闭手机,USB线连接电脑(电脑无需操作,保证数据线能传输数据就行),按住电源键+音量上键开机。此模式下,你可以连接wifi热点(仅支持2.4GHz wifi)从服务器下载完整系统包进行系统恢复。刷机刷砖时,可以尝试eRecovery救砖。 4. 华为系统的分区表(也许是分区表)储存在一个叫ptable的分区里。华为卡刷包的base包里有ptable.img。 5. 使用parted操作分区前要先卸载对应分区。否则可能造成数据损毁。
此扩容方法为错误示范,请勿模仿。
既然开了BL,不刷个第三方系统不舒服啊。

可惜对华为设备的适配ROM少之又少。那怎么办呢?

Android 8.0引入了一个具有深远意义的功能————Project Treble。
在了解Project Treble之前,我们先了解一下它出现之前的系统更新流程:
谷歌把新系统源码推送到AOSP
芯片制造商(高通等)对源码进行修改,使新系统能在自家芯片上正常工作。
芯片制造商把修改过的源码下发给OEM,厂商根据自身需求进一步定制。
OEM对新系统进行测试。测试无误后通过OTA推送给用户。
但是芯片制造商有时也会碰到一些适配问题,OEM的开发进程有时也偏慢…整个过程花费的时间很长,导致安卓新版本发布后用户迟迟收不到推送。
Project Treble出现之前,厂商要对系统进行大量的底层更新、重构以及软件升级等操作,工作量巨大。而且每一版驱动和安卓版本是严格对应的,比如安卓6的驱动,放到安卓7上就无法使用。
Project Treble的作用就是解除这种限制,允许芯片厂商放出长期兼容的驱动,让它在以后的安卓版本中不经修改也能正常使用。而OEM的工作,就是在这层通用驱动上直接进行定制,缩短了工作量和适配时间。
随着Project Treble出现的,就是在安卓9及更高版本都适用的通用系统映像(Generic System Image,GSI)。它可以让Android OEM或ROM开发者进行设备测试,也可以让用户提前体验某个还没有进行适配的ROM。(跑的顺不顺利就不知道了)
这玩意好诶,搞一个玩玩。

啊…这…
还好提前备份了system_a,重新刷回去,系统正常启动。
后来进终端看了一下,system_a的大小只有1.8GB左右,而这个GSI有3GB多。
那得扩容一下system_a啊,就从userdata(即data分区)里分出4G塞给system_a。
因为我手机没有twrp,就直接从手机终端里分区吧

help还没打完手机就重启了...然后卡BL界面,手机无限重启...
这还了得,插线,电源键+音量上,进eRecovery恢复系统。起初一切都很顺利,但是…下包下到70%左右时…
eRecovery也崩溃重启了!

是不是哪里不对,把eRecovery搞坏了啊?
我刷面具之前备份过eRecovery和其它东西,全恢复过去看看

恢复完重启,等待奇迹————
eRecovery进不去了

重新连电池排线,短接进COM1.0,摆渡下个卡刷包开始救砖。
华为的卡刷包没有payload.bin,也没有各种img(除了base包里的ptable.img),所有刷机文件都在update.App里。找个软件解包App,fastboot开刷…嗯?

204KB的system,刷个毛线

但就是在解包的时候,我看见base包里有ptable.img。既然是调整分区把手机调砖了,那恢复一下ptable也许能行…?

重启之后进eRecovery,提示数据分区损坏严重。低格恢复系统之后手机正常开机,救砖成功

0x04 系统优化&精简&改造
既然GSI刷不了,那就在原系统上做点改造吧。
0x04+1 Xposed
既然装了Magisk,不带个Xposed咋行?Magisk App开启Zygisk,从LSPosed Release界面下个Zygisk版本的LSPosed,App界面刷入,114514岁的老奶奶都会的操作

但是在我手机上并没有自动安装LSPosed Manager。如果在你的机型上也没有自动安装管理程序,打开模块压缩包,里面有个manager.apk,手动安装即可。
为啥不用EdXposed?riru都停更了,用啥EdXp
0x04+2 谷歌服务
EMUI是没有内置谷歌框架的。这种情况下装谷歌服务的比较流行的办法是OpenGApps,但考虑到大部分华为机型都没有twrp适配,我们用microG安装。
按照microg_installer_revived仓库中README的指引,我们要先下载一个修补过的Play商店(https://nanolx.org/fdroid/repo/Phonesky_132.apk),然后把它放到/data/adb/Phonesky.apk。这一步最好不要用adb操作,adb似乎无权操作/data目录。建议用各种文件管理器进行复制,或者用Termux之类的终端模拟器进行操作。
放好Play商店之后,在MicroG的Release界面下载最新版的Magisk模块,App刷入即可。这个模块似乎不会自动安装microG Service Proxy,你还要去官网手动安装一下。
安装完Magisk模块,我们还要对microG进行签名伪造,否则其它应用程序不认。
在Github下载FakeGApps,LSPosed中启用,安装,定义域设置为系统框架。

对了,LSPosed不像EdXposed一样默认全局作用域,你每装一个模块都要手动设置它的作用域。不支持一键全选。
重启手机之后,打开桌面上的microG Settings里的Self-Check,所有选项都打勾就证明配置正确。如果有权限问题(开头是Permission的那些),点一下授权就好了。

退回软件界面,点Add Google Account,登录谷歌账号就能用谷歌服务了。记得魔法上网。
0x04+3 淦!华为桌面!
总是感觉EMUI自带的桌面不太好看,想装一个第三方桌面,但是选择默认程序的时候,桌面那一项只有华为桌面。后来去摆渡一查,原来是EMUI9为“改善手机体验保护用户的权益,不再让劣质第三方桌面为非作歹”,禁止了所有第三方桌面的使用。
那,用万能的adb处理一下?



pm指令所有和应用停用/启用(包括suspend,hide,disable-user这些)有关的操作我都试过了,竟没有一个起作用

那,动点粗,也就是说把system重挂载为rw,然后把/system/App中华为桌面对应的安装包删掉?
别想了,system分区是erofs

但是,动不了system分区,我们有Magisk啊!
Magisk的原理是,在系统启动时挂载自己的镜像,构建出了一个在system分区基础上能够自由添加、删除、修改的“平行空间”,所有操作都在系统启动时完成,没有对system进行任何修改。我们做个Magisk模块把华为桌面删掉,不就相当于把华为桌面移出/system了吗?
依照Magisk官方开发指南,编写module.prop内容如下:
id=FxxkHWLauncher
name=淦!华为桌面!
version=NoOneCares
versionCode=1
author=LtD0gE
description=淦!华为桌面! 然后在module.prop所在目录创建以下目录结构:

其中HwLauncher6.apk为空文件。
把module.prop和system文件夹打包成zip,Magisk刷入即可屏蔽华为桌面。
刷写前 一定 一定 一定 记得提前安装好一个第三方桌面!!!
刷写完成后重启手机,即可自动进入第三方桌面。这里我选择年度最佳Android / iOS应用开发商(?)微软推出的微软桌面。
0x04+4 系统精简
原版EMUI提供了花粉俱乐部,华为商城、智能搜索这些预装应用,我日常生活中用不到,但它又时不时推点广告,用root权限解决掉。
adb指令:
adb shell pm uninstall --user 0 <应用包名>
#如adb shell pm uninstall --user 0 com.huawei.browser卸载华为浏览器
#在手机终端执行时去掉adb shell
#记得开root权限,用su指令切换到root

你可以下载一个应用管理器(比如一个木函里的应用管理),看着系统应用列表,自己不想要哪个就执行指令卸载掉。
记得卸载这两个东西:
com.huawei.hwdetectrepair
com.huawei.recsys 卸载系统预装应用之后手机时常崩溃重启,今天起床发现卸载的应用又回到手机上。用Scene5查看进程列表发现了这两个进程,卸载后系统正常。
0x05
搞完记得用双面胶把手机后壳粘起来,靠你吹后盖留下的那点胶,打会原神就烧开了
不粘也无所谓,套个透明手机壳当作探索版后盖也不错

有了root权限,我们还能通过Scene、Konabess(麒麟平台无效)之类的软件超超频、干干温控之类的,反正我是root我是爹.jpg
小垃圾花几天时间算是写了篇日记吧,欢迎各位dalao指导 / 纠正 /嘲笑

华为手机助手下载:https://consumer.huawei.com/cn/support/hisuite/
HCU Client下载:https://hcu-client.com/
DC-Phoenix下载:https://www.dc-unlocker.com/file-list/DC-unlocker_softwares/DC_Phoenix
机型短接图下载:http://www.shuajibang.net/news/detail/39124
Magisk下载:https://github.com/topjohnwu/Magisk/releases/tag/v24.3
MicroG下载:https://github.com/nift4/microg_installer_revived/releases/tag/v2.6.2-0
FakeGApps下载:https://github.com/whew-inc/FakeGApps/releases