背景
我有一台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的支持
安装过程
- 在LineageOS的官网上,找到OnePlus 6T的Wiki,把Basic Requirements和Checking the correct firmware阅读一遍,确保满足条件
- 解锁Bootloader
- 手机开启Developer Options,在Developer Options中打开OEM unlocking选项
- 手机通过USB连接到电脑
- 在电脑上执行
adb reboot bootloader
(也可以在关机后,同时按音量两个键和电源键),进入fastboot模式 - 执行
fastboot devices
验证电脑是否可以找到该设备 - 执行
fastboot oem unlock
解锁bootloader - 屏幕上会出现提示,按照提示选择解锁,并重启
- 因为设备被重置了,需要再次开启USB调试
- 使用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
- 保持分区一致(保持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
- 从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
,这些都没有问题
- 安装附件组件
- 重启至Recovery Mode
- 选择Apply update,然后选择Apply from ADB
- 执行
adb sideload filename.zip
(filename.zip为你下载的Google Apps)
- 选择
Reboot system now
,重启后进入LineageOS
LineageOS国内适配
WIFI检测
Android对WIFI进行Health Check时,会对特定的URL发送一个请求,如果返回204,则测试成功,显示WIFI可用。
原生的Android访问的是Google的一个URL,国内无法访问,所以需要重新配置;并不一定要用下面的URL,只要返回204就可以,我自己用的CloudFlare Worker。
|
|
NTP配置
这是在网上看到的,没有细究,在StackOverflow还看到,Android的时间和运营商有关系,并且有相关的通信协议。
|
|
刷入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
- 下载并安装Magisk
- 检查是否满足条件
- 是否有boot ramdisk
- 是否有vbmeta分区
- 下载boot.img或者recovery.img
- 下载LineageOS的boot.img
- 执行
adb push boot.img /sdcard/Download/
- 在Magisk APP中,点击Install按钮
- 选择Select and Patch a File,并选中boot.img,最后会得到一个magisk_patched-xxx.img的文件
- 执行
adb pull /sdcard/Download/magisk_patched-xxx.img
- 执行
adb reboot bootloader
- 执行
fastboot flash boot magisk_patched-xxx.img
- 重启手机后,打开Magisk,检查是否安装成功
安装LSPosed Framework
- 下载LSPosed
- 在Magisk中安装
- 重启手机
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列表也越来越长了……