安卓刷机

安卓如何刷机并获取Root权限?

背景

我有一台OnePlus 6T,用了将近5年了吧,背面被摔裂了,电池续航有些问题,还有些卡顿,使用体验非常糟糕。

最近想着换台手机,综合对比了下,苹果是我的理想型,但是由于价格问题,被我排除在外;在安卓阵营又挑选了一番,最后因为颜值选择了小米13。

这台闲置下来的OnePlus6T,本来就打算废弃了,不过,忽然想起一个远古需求:我需要一个Android调试机。嗯,我要刷机,装上一个比较干净的系统,然后获取Root,装上Magisk和Xposed等,方便我做一些安卓上的抓包和逆向工作。

简介

这篇文章主要记录我的刷机过程,获取Root,以及后续的相关软件安装。

另外,想要学习更多的Android教程,可以到XDA Developers上学习。

基本概念

名词 解释
Bootloader 类似于电脑中的BIOS
Recovery Mode 恢复模式
A/B系统 https://source.android.com/docs/core/ota/ab?hl=zh-cn
OTA(Over the Air) OTA 是原始设备制造商 (OEM) 用于远程更新设备系统分区的机制

选择哪个发行版?

类似于Linux,安卓也有很多发行版。AOSP(Android Open Source Project)是原生安卓,各个发行版会对厂商的机型进行支持和优化。

比较流行的安卓发行版有:

  • LineageOS
  • Pixel Experience
  • Pixel Extended
  • Paranoid Android
  • Evolution X

LineageOS是CyanogenMod ROM的继承者,记得很久以前用过,而且LineageOS是最流行的发行版,拥有广泛的社区支持,所以我选择了LineageOS。

另外有几个小细节,也让我更加坚定地选择了LineageOS:

  • 有的发行版(比如Pixel Experience)上竟然用了Google Ad,有很多厌烦的广告,让人唏嘘
  • 有的发行版(比如Pixel Experience)已经停止了对OnePlus 6T的支持

安装过程

  1. 在LineageOS的官网上,找到OnePlus 6T的Wiki,把Basic Requirements和Checking the correct firmware阅读一遍,确保满足条件
  2. 解锁Bootloader
    • 手机开启Developer Options,在Developer Options中打开OEM unlocking选项
    • 手机通过USB连接到电脑
    • 在电脑上执行adb reboot bootloader (也可以在关机后,同时按音量两个键和电源键),进入fastboot模式
    • 执行fastboot devices 验证电脑是否可以找到该设备
    • 执行fastboot oem unlock 解锁bootloader
    • 屏幕上会出现提示,按照提示选择解锁,并重启
    • 因为设备被重置了,需要再次开启USB调试
  3. 使用fastboot启动recovery
    • 下载LineageOS Recovery
    • 执行adb reboot bootloader ,进入fastboot模式
    • 执行fastboot devices 进行验证
    • 执行fastboot flash boot boot.img 刷入LineageOS Recovery(boot.img为下载的LineageOS Recovery)
    • 使用音量键选择Recovery Mode,按电源键进行确认,进入Recovery Mode
  4. 保持分区一致(保持A/B系统同步,执行fastboot flash boot 后需要执行该操作)
    • 下载copy-partitions-20220613-signed.zip,并验证md5或者sha-256
    • 加载copy-partitions-20220613-signed.zip:
      • 在手机上,选择Apply update,然后选择Apply from ADB
      • 在电脑上,执行adb sideload copy-partitions-20220613-signed.zip
    • 选择Advanced,然后Reboot to recovery
  5. 从Recovery安装LineageOS
    • 选择Factory rest,然后选择Format data/factory reset
    • 返回主菜单
    • 加载LineageOS
      • 选择Apply update,然后选择Apply from ADB
      • 在电脑上执行adb sideload filename.zip (filename.zip为你下载的LineageOS包)
      • 需要注意的是,在执行adb sideload filename.zip 的时候,adb可能会停止在47%的进度上,并且报告adb: failed to read command: Success ,或者有些情况下,会报告adb: failed to read command: No error 或adb: failed to read command: Undefined error: 0 ,这些都没有问题
  6. 安装附件组件
    • 重启至Recovery Mode
    • 选择Apply update,然后选择Apply from ADB
    • 执行adb sideload filename.zip (filename.zip为你下载的Google Apps)
  7. 选择Reboot system now,重启后进入LineageOS

LineageOS国内适配

WIFI检测

Android对WIFI进行Health Check时,会对特定的URL发送一个请求,如果返回204,则测试成功,显示WIFI可用。

原生的Android访问的是Google的一个URL,国内无法访问,所以需要重新配置;并不一定要用下面的URL,只要返回204就可以,我自己用的CloudFlare Worker。

1
2
3
4
adb shell settings put global captive_portal_http_url https://www.google.cn/generate_204
adb shell settings put global captive_portal_https_url https://www.google.cn/generate_204
adb shell settings put global captive_portal_fallback_url http://g.cn/generate_204
adb shell settings put global captive_portal_other_fallback_urls http://www.qualcomm.cn/generate_204

NTP配置

这是在网上看到的,没有细究,在StackOverflow还看到,Android的时间和运营商有关系,并且有相关的通信协议。

1
adb shell settings put global ntp_server ntp.aliyun.com

刷入TWRP

为什么要输入TWRP?TWRP(TeamWin Recovery Project)是最流行的Android Recovery。

  • 下载TWRP
  • adb reboot bootloader
  • fastboot boot twrp.img
  • adb push twrp.img /sdcard/Download
  • 在菜单中选择Advanced,然后选择Install Recovery Ramdisk,选择twrp.img安装

实际上,在我执行fastboot boot twrp.img 的时候,总是进入一个Crash界面,显示qualcomm crash dump mode ,试了多个TWRP版本都不行;Google出的答案是,TWRP和Android版本有关,而我用的是LineageOS 20(Android 13),可以去XDA上找一个第三方TWRP。对于XDA上的TWRP还不太信任,所有没有用,后面再解决这个问题。

安装Magisk

  1. 下载并安装Magisk
  2. 检查是否满足条件
    • 是否有boot ramdisk
    • 是否有vbmeta分区
    • 下载boot.img或者recovery.img
  3. 下载LineageOS的boot.img
  4. 执行adb push boot.img /sdcard/Download/
  5. 在Magisk APP中,点击Install按钮
  6. 选择Select and Patch a File,并选中boot.img,最后会得到一个magisk_patched-xxx.img的文件
  7. 执行adb pull /sdcard/Download/magisk_patched-xxx.img
  8. 执行adb reboot bootloader
  9. 执行fastboot flash boot magisk_patched-xxx.img
  10. 重启手机后,打开Magisk,检查是否安装成功

安装LSPosed Framework

  1. 下载LSPosed
  2. 在Magisk中安装
  3. 重启手机

Hacking

安装完Magisk和LSPosed,你就可以开始Hack了,安装各种模块,修改各种功能;浏览了一下LSPosed的模块列表,大多都是娱乐化的功能,针对音视频APP的功能优化或者限制解除。

对于我来说,第一个要解决的问题就是,对APP抓包,绕过SSL Pinning,理论上,有如下方法:

  • 添加系统证书(需要root,只能添加自定义的CA,使用Mitmproxy和BurpSuite进行抓包,只在APP使用系统证书时有效,实际并没有绕过SSL Pinning)
  • 重新打包APK,修改APK中相关的代码和配置
  • 使用Objection绕过
  • 通过Frida进行Hook绕过

我目前需要抓包的APP,没有用到SSL Pinning,我只需要安装系统证书就行了,为了方便,使用了Magisk Trust User Certs,每次重启后,都会自动将用户证书安装到系统。

基于Magisk和LSPosed,可以做很多有趣的事情,以后慢慢研究。

最后

折腾了一番,终于搞定了,以后可以快乐地Hacking了。

Android也是Linux的一个发行版,但是好多概念并不通用,到了Android上,就有了一个新的名词,查了很多资料,才了解了一个大概,理解每个命令到底做了什么。

又开启了一个新的领域,我的TODO列表也越来越长了……

参考

使用 Hugo 构建
主题 StackJimmy 设计