记小米 4c 刷机抓包

文章目录

古董级手机小米 4c 被我翻出来,刚好用作测试机抓取网络包排查 APP 问题。趁这个机会记录相关步骤供参考。

本文假定读者已经对刷机、抓包有一定基础,能够搜索相关资源工具。因为这篇文章更像是一份备忘而不是指导,我实际上懒得写得大而全,如果强求那么几乎永远不会发布。

刷机

官方 MIUI 对小米 4c 的支持早已结束,最新版本对应 Android 7。为强行解锁获取 root 权限,并且续命一段时间,我决定通过刷入第三方固件的方式升级 Android 版本。准备 twrp-3.1.0-0-libra.imgTWRP-20190418-3.3.0.0-libra.img,应该能在网上找到下载,后者我记得是魔趣该机型维护者 GuaiYiHu 提供的。下载“固件”包 fw_libra_miui_MI4c_V10.1.1.0.NXKCNFI_13b9b312d0_7.0.zip

系统包我选择魔趣,目前最新正式版是 Android 10。参考《小米4C通过高通9008刷机模式强制降级解锁BL》下载准备 MIUI 7 开发版 6.1.7 线刷包、MiFlash 20150601。后两者版本号有讲究,可以相差一点但应该不能太高,这是为了先降级解锁 bootloader。

安装 MiFlash,在安装目录下面的文件夹里面可以找到 Google 的 adb、fastboot 工具。按住小米 4c 音量减+电源键进入 fastboot 界面。执行 adb 命令:

fastboot oem edl 

屏幕全黑进入 9008 模式。解压线刷包,用 MiFlash 可以找到设备,刷入系统。完成以后手动开机进入系统。如果不能进入系统,尝试再在 fastboot 界面直接线刷。这里最好等待系统初始化完毕,否则可能接下来的 TWRP 触屏不可用,我猜跟驱动有关系。

系统初始化完成以后再次进入 fastboot 模式,这时 bootloader 是无锁状态。将 TWRP-20190418-3.3.0.0-libra.img 作为 recovery 刷入,不要重启,直接从 TWRP-20190418-3.3.0.0-libra.img 启动:

fastboot flash recovery TWRP-20190418-3.3.0.0-libra.img
fastboot boot TWRP-20190418-3.3.0.0-libra.img

这么做是因为刷魔趣系统需要新版 twrp,然而这时还不能直接启动,需要先刷入“固件”才支持,强行 fastboot boot 会报错:

downloading 'boot.img'...
OKAY [ 1.211s]
booting...
FAILED (remote: dtb not found)

  1. total time: 1.698s

旧 twrp 启动以后 install “固件”fw_libra_miui_MI4c_V10.1.1.0.NXKCNFI_13b9b312d0_7.0.zip。完成以后选择 reboot 到 recovery,千万别进到系统,好像会恢复 recovery,而刷完“固件”意味着 fastboot 又锁上了,一切又得重来。

进入新 twrp 以后 install 魔趣包,比如 MK100.0-libra-220813-RELEASE.zip。如果需要 Magisk 可以追加刷入,省去重启麻烦。完事以后可以放心进入系统。完成。

抓包

HTTP 抓包很简单。基本上所有 APP 都会走系统代理,那么在 WLAN 设置里填上电脑抓包软件所示的地址端口就行。

问题是 HTTPS,抓包软件需要进行中间人攻击。似乎从 Android 7 起,一般 APP 仅信任系统证书。手动安装证书会放置在用户证书目录下,不被信任。解决方法容易搜到,将证书导出转为 PEM 格式(如果已经是 PEM 格式则跳过),重命名为特定格式,复制到 /system/etc/security/cacerts 目录下就好了。比如《如何将 CA 证书安装到 Android 的 System 下》所列命令:

openssl x509 -inform PEM -subject_hash_old -in ***.pem | head -1
cp ***.pem 845ea074.0
adb root
adb shell "mount -o rw,remount /system"
adb push 845ea074.0 /system/etc/security/cacerts
adb shell "chmod 664 /system/etc/security/cacerts/845ea074.0"

然后重启系统。需要注意的是对于前文提到的魔趣系统,似乎没有挂载 /system 分区,改为 / 就好。

抓包:进阶

上述方法可以应付大多数 APP,但是 Chrome 已经不吃这一套。据说 Chrome 99 起强制校验系统证书的证书透明度(Certificate Transparency)。代理软件所生成的证书肯定连这个属性都没有,于是相关请求会被拒绝,连接电脑可以看到控制台报错 NET::ERR_CERTIFICATE_TRANSPARENCY_REQUIRED。

其实 Chrome 信任用户证书,可以把抓包软件的证书安装为用户证书,也许还可以修改 flags 关闭校验。但我想跟其他 APP 兼容使用两全其美。Adguard 用户也面临类似问题,团队给出解决方案:adguardcert。它是一个 Magisk 模块,安装以后,在系统启动时自动将用户证书复制为系统证书,并对诸如 Chrome 的特定浏览器回退这个修改。

Adguard 的方案只适用于 Adguard 的证书。不过我们可以下载 release,编辑压缩包中的 post-fs-data.sh 文件,将 AG_CERT_HASH 变量值改为自己证书对应的值。

更一般地,参考 adguardcert 所基于的项目 movecert,我们修改 post-fs-data.sh 文件,让它复制所有用户证书就好啦,这样还省得更换证书时手动复制文件或修改代码:

#AG_CERT_HASH=0f4ed297
#AG_CERT_FILE=$(ls /data/misc/user/*/cacerts-added/${AG_CERT_HASH}.* | sort | tail -n1)
#cp -f ${AG_CERT_FILE} ${MODDIR}/system/etc/security/cacerts/${AG_CERT_HASH}.0
#rm -f /data/misc/user/*/cacerts-removed/${AG_CERT_HASH}.*
#chown -R 0:0 ${MODDIR}/system/etc/security/cacerts
#以上注释掉
#写上下列语句
cp -f /data/misc/user/0/cacerts-added/* $MODDIR/system/etc/security/cacerts
rm -f /data/misc/user/0/cacerts-removed/*
chown -R 0:0 $MODDIR/system/etc/security/cacerts

修改保存放入压缩包后,可以直接在 Magisk 安装重启。注意需要在 Magisk 设置中启用 Zygisk 模式生效。

全部为采集文章,文中的 联系方式 均不是 本人 的!

发表评论