目录
- 一、刷机预备
- 二、刷机
-
- [2.1 刷最新原版](#2.1 刷最新原版)
- [2.2 Pixel6设备安卓16降级15](#2.2 Pixel6设备安卓16降级15)
- [2.3 刷定制系统](#2.3 刷定制系统)
- 三、Root
-
- [3.1 为什么要Root?](#3.1 为什么要Root?)
- [3.2 为什么选择APatch?(Root方案对比)](#3.2 为什么选择APatch?(Root方案对比))
- [3.3 APatch Root操作流程](#3.3 APatch Root操作流程)
- [📅 四、下一期预告](#📅 四、下一期预告)
- [🔙 五、 回到总纲](#🔙 五、 回到总纲)
一、刷机预备
刷机方式分类 :在逆向工程中,我们通常采用 线刷。
| 方式 | 别名 | 特点 | 逆向视角 |
|---|---|---|---|
| 线刷 | Fastboot 刷机 / 救砖 | 彻底。通过数据线连接电脑,重写所有分区(包括 Bootloader, Radio, System)。 | 首选 。搞坏系统后的 "后悔药",也是升级/降级系统的标准姿势。 |
| 卡刷 | Recovery 刷机 | 便捷。通过手机恢复模式刷入 .zip 包(如 LineageOS)。 | 常用于刷入第三方 ROM 或补丁包(如 Magisk.zip)。 |
刷机包分类:
-
线刷包 (Factory Images) :官方提供的完整镜像,包含手机运行所需的一切。下载地址 :Google Developers - Factory Images 一个完整的 Google 官方线刷包解压后,主要由以下三部分组成:
- Bootloader-img: 引导程序(相当于电脑的 BIOS)
- Radio-img: 基带固件(负责 WiFi, 蓝牙, 4G/5G 信号)
- Image.zip: 系统镜像集合(包含 boot.img, system.img, vendor.img 等)
- ⚠:如果你只刷了系统(System)而没更新 Bootloader 或 Radio,手机可能会无法开机或信号丢失。建议始终使用 flash-all 脚本进行完整线刷。
-
OTA 包:增量更新包,通常用于系统在线升级,不适合逆向救砖。
官方系统 vs AOSP:
-
官方系统 (Stock ROM) :包含 Google 全家桶 (GMS)。版本类型:user 版(发布版,权限受限,也就是我们买到手的样子)

-
AOSP (Android Open Source Project) :安卓开源项目编译的原生系统,默认无 Google 服务。版本类型:可以是 user 或 userdebug 或 eng 版。逆向优势:userdebug 版自带 adb root 权限,系统更加开放,方便调试。但现在一般都使用 user 版,后续使用 Apatch 进行 root 即可。
刷机前的 "开锁" 操作 (Hands-on):在对手机进行任何操作前,必须先建立 ADB 连接。
-
开启开发者选项。进入 设置 ⇒ 关于本机 ,连续点击 版本号 (Build Number) 7次,提示
"您现在处于开发者模式"

-
开启 USB 调试。进入 设置 ⇒ 系统 ⇒ 开发者选项 。开启 USB 调试 (USB Debugging) 。连接电脑,手机弹出
"是否允许 USB 调试?",点击确定:


-
验证连接,在电脑终端输入:adb devices。成功 :显示 设备序列号 device。失败:显示 unauthorized(未在手机点允许)或为空(驱动没装好)。

将 USB 线拔掉(我的手机在开启 USB 调试前就一直和电脑连着的),重新插,弹出下面的对话框,勾选
"一律允许使用这台计算机进行调试"前面的复选框,然后点击允许:

手机点允许后,再次执行命令:

-
进入 Bootloader 模式 (关键) ,这是刷机的
"手术台"。方法 A (推荐) :手机开机状态下,输入命令:adb reboot bootloader。方法 B (硬解) :手机关机状态下,长按电源键 + 音量下键。
-
安装 Google USB 驱动(bootloader 模式下才能看到下面的现象哦),AndriodStudio 中即可下载,在之前文章中已经讲解了如何勾选,这里不再进行赘述。首先按快捷键 Win+R 打开运行窗口输入 devmgmt.msc 命令,并单击确定按钮打开设备管理器,如下图所示:

在 Windows 设备管理器中查看 USB 连接的手机,如下图所示:

选中,右键:





再看设备管理器中,已经 ok 了:

二、刷机
2.1 刷最新原版
准备好系统:

刷机常规步骤: 进入到 bootloader 模式,双击 flash-all.bat 即可。防止黑砖的高级操作:为了防止 Bootloader 损坏导致彻底变砖,老鸟通常会将 Bootloader 同时刷入两个槽位:
bash
fastboot --slot=other flash bootloader bootloader.img
# 我们这里是
fastboot --slot=other flash bootloader bootloader-oriole-slider-16.3-13642543.img
原理:手机里有两套系统分区,Slot A 和 Slot B。平时你用 A,升级时系统会在后台悄悄更新 B,重启后切换到 B。如果 B 启动失败,自动切回 A。先进入 bootloader 模式,并且看是否能正常识别设备:
bash
adb reboot bootloader # 我这里本来就是bootloader模式了,就不执行这条命令了
# 查看设备是否能正常识别: fastboot devices
C:\Users\Administrator\Desktop\oriole-bp3a.250905.014>fastboot devices
# 能看到说明识别正常
23241FDF60030X fastboot
防止黑砖操作:
bash
C:\Users\Administrator\Desktop\oriole-bp3a.250905.014>fastboot --slot=other flash bootloader bootloader-oriole-slider-16.3-13642543.img
Warning: skip copying bootloader_b image avb footer (bootloader_b partition size: 0, bootloader_b image size: 12777556).Sending 'bootloader_b' (12478 KB) OKAY [ 0.289s]
Writing 'bootloader_b' (bootloader) Flashing pack version slider-16.3-13642543
(bootloader) flashing platform gs101
(bootloader) Validating partition ufs
(bootloader) Validating partition partition:0
(bootloader) Validating partition partition:1
(bootloader) Validating partition partition:2
(bootloader) Validating partition partition:3
(bootloader) Validating partition bl1_b
(bootloader) Validating partition pbl_b
(bootloader) Validating partition bl2_b
(bootloader) Validating partition abl_b
(bootloader) Validating partition bl31_b
(bootloader) Validating partition tzsw_b
(bootloader) Validating partition gsa_b
(bootloader) Validating partition ldfw_b
(bootloader) Flashing partition ufs
(bootloader) Flashing partition partition:0
(bootloader) Flashing partition partition:1
(bootloader) Flashing partition partition:2
(bootloader) Flashing partition partition:3
(bootloader) Flashing partition bl1_b
(bootloader) Flashing partition pbl_b
(bootloader) Flashing partition bl2_b
(bootloader) Flashing partition tzsw_b
(bootloader) Flashing partition gsa_bb
(bootloader) Flashing partition ldfw_b
(bootloader) Loading sideload ufsfwupdate
OKAY [ 2.830s]
Finished. Total time: 3.130s
接下来在双击 flash-all.bat 即可:

中途出现下图,稍微等待一下,不要操作手机:

跑到了最后,看了下没啥报错,成功:

2.2 Pixel6设备安卓16降级15
错误:
python
fastboot --slot=other flash bootloader bootloader-oriole-slider-15.0-12100230.img
Warning: skip copying bootloader_b image avb footer (bootloader_b partition size: 0, bootloader_b image size: 14477396).
Sending 'bootloader_b' (14138 KB) OKAY [ 0.309s]
Writing 'bootloader_b' (bootloader) Flashing pack version slider-15.0-12100230
(bootloader) flashing platform gs101
(bootloader) Validating partition ufs
(bootloader) Validating partition partition:0
(bootloader) Validating partition partition:1
(bootloader) Validating partition partition:2
(bootloader) Validating partition partition:3
(bootloader) Validating partition bl1_b
(bootloader) image (bl1_b): rejected, anti-rollback
(bootloader) failed to validate partition (bl1_b)
FAILED (remote: 'failed to flash partition (bootloader_b): -7')
fastboot: error: Command failed
Anti-rollback (防回滚) :Pixel 6 系列为了防止用户降级到有安全漏洞的旧版本 Bootloader,在硬件里烧了一个 "熔断器" (Fuse)。规则 :我们刷入的 Bootloader 版本必须 >= 手机当前记录的版本。现状 :我尝试刷入的这个 bootloader-oriole-slider-15.0 镜像,其内部版本号(Rollback Index)低于 或者 不兼容 你手机当前 Slot B 中(或者系统要求的)版本。Failed ... -7:这是典型的拒绝写入错误。
特殊说明: https://developers.google.com/android/images?hl=zh-cn
查看当前分区和该分区的 bootloader 版本:fastboot getvar all

版本在最后:

激活另一个分区:fastboot --set-active=b。刷机降系统版本前要保证两个分区的 bootloader 版本一致,怎么保持一致?
bash
# 刷入当前槽位
fastboot flash bootloader bootloader.img
# 强行刷入另一个槽位 (备份)
fastboot --slot=other flash bootloader bootloader.img
操作:
python
C:\Users\Administrator\Desktop\oriole-bp3a.250905.014>fastboot flash bootloader bootloader-oriole-slider-16.3-13642543.img
Warning: skip copying bootloader_a image avb footer (bootloader_a partition size: 0, bootloader_a image size: 12777556).Sending 'bootloader_a' (12478 KB) OKAY [ 0.277s]
Writing 'bootloader_a' (bootloader) Flashing pack version slider-16.3-13642543
.......
C:\Users\Administrator\Desktop\oriole-bp3a.250905.014>fastboot --slot=other flash bootloader bootloader-oriole-slider-16.3-13642543.img
Warning: skip copying bootloader_b image avb footer (bootloader_b partition size: 0, bootloader_b image size: 12777556).Sending 'bootloader_b' (12478 KB) OKAY [ 0.279s]
Writing 'bootloader_b' (bootloader) Flashing pack version slider-16.3-13642543
(bootloader) flashing platform gs101
.......
低版本系统目录如下:

修改 C:\Users\Administrator\Desktop\oriole-ap3a.241005.015\image-oriole-ap3a.241005.015 中的 android-info.txt 文件:

Ctrl + S 保存。控制台:
python
# C:\Users\Administrator\Desktop\oriole-ap3a.241005.015\image-oriole-ap3a.241005.015>
# 在这个目录下操作
# 需要设置环境变量
C:\Users\Administrator\Desktop\oriole-ap3a.241005.015\image-oriole-ap3a.241005.015>fastboot flashall -w
--------------------------------------------
Bootloader Version...: slider-16.3-13642543
Baseband Version.....: g5123b-145971-250708-B-13746081
Serial Number........: 23241FDF60030X
--------------------------------------------
fastboot: error: ANDROID_PRODUCT_OUT not set
报错了,设置环境变量:

设置好了之后,重开 cmd 窗口,同样执行命令:fastboot flashall -w,等待刷机完成就可以了。有惊无险:

系统版本降了:

2.3 刷定制系统
定制系统目录如下:

操作和上面同理,这里我就不一一截图了:
python
# ① 进入bootloader模式 确认一下设备能关联上就ok
C:\Users\Administrator>adb reboot bootloader
C:\Users\Administrator>fastboot devices
23241FDF60030X fastboot
# ② 保险 确保不同分区的bootloader版本是一致的 如果你没有刷最新的系统 就不用按照
# 3.2.2 Pixel6设备安卓16降级15 小节操作
# 直接按照 3.2.1 刷最新原版 小节操作即可
# 目前我的bootloader版本是高于定制系统的 所以在刷系统前我确认了一下a分区和b分区的bootloader版本是一致的
# ③ 定制系统目录下的 image-oriole-ap3a.241005.015.zip 解压
# 定制系统中android-info.txt文件中的 require version-baseband与require version-bootloader已经完成了删除
# 只需要将环境变量 ANDROID_PRODUCT_OUT 的值重设为刚刚解压的目录即可
# ④ 开始刷系统
# 进入目录: C:\Users\Administrator\Desktop\oriole-ap3a.241005.015\image-oriole-ap3a.241005.015>
# 执行命令: fastboot flashall -w
结果:

注意:
-
刷机完成之后,都要重新进入开发者模式和开启 USB 调试
-
修改 boot 刷机以后,在设置里在调整下时间。时间不对,访问网络可能会出问题。看看是否和当前北京时间不一致
-
禁用系统更新:

-
刷机命令拓展(了解)
bash// ① adb reboot(重启手机到系统) 和 adb reboot bootloader(重启手机到bootloader模式) ⇒ 这两个命令是在开机状态下 // ② fastboot reboot(重启手机到系统) 和 fastboot reboot bootloader(重启手机回到bootloader模式) // ③ fastboot flash bootloader bootloader.img 往bootloader分区刷入bootloader镜像 // ④ fastboot flash radio radio.img 往radio分区刷入radio镜像 // ⑤ fastboot -w update image-sailfish-qp1a.191005.007.a3.zip // ⑥ 单独刷某个分区镜像(分开刷要注意各分区镜像是否兼容) // 6.1 fastboot flash boot boot.img // 6.2 fastboot flash system system.img // ps:system.img与system_other.img是刷在不同分区的 // 6.3 fastboot flash system_b system_other.img 看你此时处于什么分区,如果是在a分区,就要往b分区刷,反之同理,在b刷a // 6.4 fastboot flash vendor vendor.img // ⑦ 批量刷某些分区 fastboot flashall -w 需要设置ANDROID_PRODUCT_OUT环境变量,指向镜像所在目录 // ⑧ fastboot set_active other 切换活动槽 // ⑨ fastboot --slot=other flash bootloader bootloader.img 往另外的分区刷bootloader // ps:为了更大程度的防止黑砖,通常会将bootloader_a和bootloader_b都刷入对应的bootloader镜像
三、Root
3.1 为什么要Root?
对于普通用户,Root 可能是为了精简系统或省电;但对于逆向工程师,Root 是打破安卓 "沙箱机制" 的唯一钥匙。没有 Root,逆向工作将寸步难行。
-
访问私有数据 (Data Access) :现状 :安卓为了安全,每个 App 的私有目录(/data/data/包名/)是严格隔离的。逆向痛点:App 的数据库(SQLite)、配置文件(SharedPrefs)、甚至解密后的关键文件都存在这里。没有 Root,你连这些文件看都看不到。
-
动态调试与 Hook (Dynamic Instrumentation) :逆向神器 :Frida、Xposed、IDA Pro 调试器。原理 :这些工具需要注入到 App 的进程中去
"偷看"或"修改"内存数据。限制:只有拥有 Root 权限(尤其是 ptrace 权限),才能跨进程进行注入和操作。 -
抓包解密 (HTTPS Traffic) :现状 :Android 7.0 以后,App 默认不信任用户自行安装的抓包证书(如 Charles/BurpSuite 证书)。解决:必须有 Root 权限,才能将证书强行移动到系统根证书目录 (/system/etc/security/cacerts),从而实现 HTTPS 抓包。
-
绕过系统限制:修改设备指纹(改机)、隐藏调试标记、过 VPN 检测等。
💡总结 :Root = 上帝视角 。没有 Root 的逆向分析只能叫 "静态分析" (看代码发呆);有了 Root,才能进行 "动态分析"(让代码跑起来给你看)。
3.2 为什么选择APatch?(Root方案对比)
既然 Root 这么重要,App 厂商也知道。所以现在的 App 都会内置 Root 检测 (Root Detection) 功能,一旦发现手机 Root 了,就直接闪退或封号。这就引出了逆向圈的 "猫鼠游戏":我们需要 Root 权限,但又不能让 App 发现我们有 Root 权限。
| 方案 | 原理简述 | 优点 | 缺点 (逆向视角) |
|---|---|---|---|
| Magisk (面具) | 文件级。通过挂载 OverlayFS 修改文件系统。 | 模块丰富,生态成熟,入门简单。 | 太容易被检测。它的特征文件明显,各大银行 App 和游戏的反作弊都能轻易识别它(检测 mount 挂载点)。 |
| KernelSU (KSU) | 内核级。直接修改 Linux 内核源码。 | 隐蔽性极强。在内核层面上拥有权限,对应用层几乎不可见(降维打击)。 | 门槛高。通常需要自己编译内核,且对内核版本有硬性要求 (5.12+,即 Pixel 6 起步)。 |
| APatch (推荐) | 内核级补丁。直接修补内核镜像 (boot.img)。 | 集大成者 。结合了 KSU 的隐蔽性 + Magisk 的易用性。**支持 "超级密钥" **。 |
需要手动修补 boot.img,操作步骤稍多。 |
3.3 APatch Root操作流程
准备工作:
-
APatch Manager App :下载地址:GitHub - bmax121/APatch 下载最新版本的 .apk 文件

-
原生 boot.img :来源 :提取方法 :解压官方线刷包 ⇒ 打开里面的 image-oriole-xxx.zip ⇒ 找到 boot.img 。笔者使用的是定制系统,故为
3.2.3 刷定制系统小节中image-oriole-ap3a.241005.015目录下的boot.img,将其提取出来,放到C:\Users\Administrator\Desktop\oriole-ap3a.241005.015目录下
APatch Root 操作流程:
-
安装与推送
-
手机开机,安装 APatch App:adb install .\APatch_11142_166daa0_on_HEAD-release-signed.apk

-
将电脑上的 boot.img 推送到手机里:adb push ./boot.img /sdcard/boot.img

-
-
修补内核
-
打开手机上的 APatch App:

-
点击
"选取要修补的启动映像文件":

-
找到我们推送的 boot.img 镜像,单击它:

-
按照要求设置 超级密钥 (SuperKey) ,超级密钥长度应在 8-63 个字符,包含数字和字母,但不包含特殊字符。如果你输入的密码长度不够,下方是不会出现
嵌入模块与开始修补按钮的。
-
完成后,文件通常会保存在:/storage/emulated/0/Download/apatch_patched_xxx.img,如下所示:

/storage/emulated/0/ 其实就是 /sdcard/
-
-
拉取与刷入
-
把修补好的镜像拉回电脑:
bash# 命令: adb pull /sdcard/Download/apatch_patched_11142_0.12.2_sdqd.img ./boot_new.img /sdcard/Download/apatch_patched_11142_0.12.2_sdqd.img: 1 file pulled, 0 skipped. 39.7 MB/s (67108864 bytes in 1.612s) -
手机重启到 Bootloader 模式:adb reboot bootloader
-
刷入修补后的内核:fastboot flash boot boot_new.img
bashC:\Users\Administrator\Desktop\oriole-ap3a.241005.015>fastboot flash boot boot_new.img [liblp] bool android::fs_mgr::ReadMetadataHeader(Reader *, LpMetadata *) read failed: no message available [liblp] bool android::fs_mgr::ReadMetadataHeader(Reader *, LpMetadata *) read failed: no message available Sending 'boot_a' (65536 KB) OKAY [ 1.439s] Writing 'boot_a' OKAY [ 0.272s] Finished. Total time: 1.726s -
重启手机:fastboot reboot
bashC:\Users\Administrator\Desktop\oriole-ap3a.241005.015>fastboot reboot Rebooting OKAY [ 0.000s] Finished. Total time: 0.002s
-
-
激活 Root :手机开机后,打开 APatch App,点击超级密钥:

在弹出的对话框中输入之前设置的密钥,确定,然后在出现
"系统补丁"的位置,单击安装按钮,如下:

至此我们的 Root 就完成了,还是比较简单。终端中验证一下:

📅 四、下一期预告
恭喜你!随着 Pixel 6 重启并成功进入系统,你已经拿到了这台设备的 最高控制权 。现在的你,可以任意挂载分区、注入进程。这台手机已经从一个 "消费品" 变成了一个真正的 "逆向兵器" 。但是,有了兵器还不够,我们还需要修炼"内功" 。在面对复杂的 App 逻辑时,为什么有的代码看着眼熟却读不懂(因为用了反射)?为什么抓包看到的参数是一串乱码(因为用了 AES/RSA)?如果不补齐 Java 语言核心 与 密码学 这两块短板,后续的分析将寸步难行。
👉 明日更新:Day 4《内功心法------逆向视角的 Java 核心与密码学算法实现》
我们将从"正向开发"反推"逆向特征":
- 透视 Java:深度解析反射机制、内部类在 Smali 中的表现,看穿代码混淆的伪装。
- 破译乱码:手写 MD5、AES、RSA 标准算法,教你如何通过密文长度和特征一眼识别加密类型。
- 筑基实战:不仅会用工具,更要懂原理,为后续的算法还原打下坚实基础。
🔙 五、 回到总纲
本系列文章将持续更新 100 天 ,覆盖从环境搭建到内核对抗的全部技术体系。建议 关注本专栏 或 收藏总导航篇,以免丢失学习路线。
- 📖 专栏总导航 :【2026最新】Android逆向百日成神之路------全网最全学习导航 👈 建议收藏
- ⬅️ Previous :Day 2:工具必修------ADB 高频命令详解与设备交互实战
- Next ⏭️ :Day 4:逆向视角的 Java 核心与密码学算法实现
作者说明 :刷机有风险,操作需谨慎。看到 APatch 管理器里那行绿色的 "Working",是每个逆向人最开心的时刻。如果这篇文章帮你成功 Root 了设备,请 点赞 🏻 、收藏 ⭐ 、关注 ➕ ,你的支持是我持续更新的最大动力! Have a nice day, see you tomorrow!