miuiv13-redmi-note11TPro-root

miuiv13-redmi-note11TPro-root

好多年不关注这些了,搜索发现多了ab分区、卡刷/OTA包payload.bin等变化。现在再看源码、搜资料自己解包payload.bin等是来不及了。所以还是先看看网上的一些教程吧。

payload.bin解包

  • 更新MIUIV13.0.13的OTA包时保存了一份,结构如下:
    在这里插入图片描述

payload_dumper

  • 根据:https://zhuanlan.zhihu.com/p/424625779、https://blog.csdn.net/weixin_43890033/article/details/119457211,使用https://github.com/vm03/payload_dumper,git clone下来。
  • 把payload.bin放在payload_dumper目录,使用Win10子系统Ubuntu18.04LTS执行:
python3 payload_dumper.py payload.bin
Traceback (most recent call last):
  File "payload_dumper.py", line 7, in <module>
    import bsdiff4
ModuleNotFoundError: No module named 'bsdiff4'

缺少库,根据requirements.txt安装

pip3 install bsdiff4>=1.1.5

安装protobuf报错。

python3 payload_dumper.py payload.bin
Traceback (most recent call last):
  File "payload_dumper.py", line 15, in <module>
    import update_metadata_pb2 as um
  File "/mnt/d/payload_dumper/update_metadata_pb2.py", line 6, in <module>
    from google.protobuf import descriptor as _descriptor
ModuleNotFoundError: No module named 'google'

pip3 install protobuf>=3.19.3
protobuf requires Python '>=3.7' but the running Python is 3.6.9

直接读取requirements.txt安装也是报错:protobuf requires Python ‘>=3.7’ but the running Python is 3.6.9。不想升级python。

pip3 install -r requirements.txt
Collecting protobuf>=3.19.3 (from -r requirements.txt (line 1))
  Using cached https://files.pythonhosted.org/packages/6c/be/4e32d02bf08b8f76bf6e59f2a531690c1e4264530404501f3489ca975d9a/protobuf-4.21.0-py2.py3-none-any.whl
protobuf requires Python '>=3.7' but the running Python is 3.6.9

因为不了解python,仔细看是大于等于的关系,安装的是protobuf-4.21.0版本,尝试安装protobuf-3.19.3版本成功:(six>=1.16.0通过requirements.txt安装了)

pip3 install protobuf==3.19.3
Collecting protobuf==3.19.3
Installing collected packages: protobuf
Successfully installed protobuf-3.19.3
  • 执行解包报错:
python3 payload_dumper.py payload.bin
Processing apusys partitionSOURCE_COPY supported only for differential OTA

看其python代码没有使用其他文件,但是为了测试还是把OTA包整个解压到这里,再次测试还是报同样错误。在output目录生成空文件apusys.img。

payload_dumper-win64

  • 怀疑是不是工具的问题或者是需要完整包,OTA包不行。
  • 根据https://cloud.tencent.com/developer/article/1937712,下载https://ali.kenvie.com/Downloads/payload_dumper-win64.zip。
  • payload.bin放入payload_dumper-win64\payload_input,cmd下执行payload_dumper.exe。
payload_dumper.exe
Traceback (most recent call last):
  File "payload_dumper.py", line 89, in <module>
AssertionError: unsupported op
[15820] Failed to execute script payload_dumper
  • 额,我没有逆向分析,但是怀疑就是把上面的payload_dumper打包python成exe。

unota

  • 搜到https://www.hu60.cn/q.php/bbs.topic.99456.html,下载https://aite.xyz/product/unota/页面中的:https://xiaoqidun-1253140229.file.myqcloud.com/product/unota/unota_windows_amd64.exe?sign=248f446dc2ea809cbf7440a11043e955&time=1664520857。
  • 提供了Linux、Windows、mac、Android,差不多全平台的可执行文件。
  • 执行报错:
unota_windows_amd64.exe -i payload_input\payload.bin
2022/09/30 14:57:42 extract apusys to payload_extract\apusys.img ....
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0xbe59dc]

goroutine 1 [running]:
main.extractPartition(0xc000025450, {0xc00080f7e0?, 0xc00006fd30?}, {0xd0b500, 0xc00000a168}, 0x6165d)
        ./unota.go:154 +0x15c
main.extractPartitions({0xc0001cae00, 0x1d, 0x6153a?}, {0xd0b500, 0xc00000a168}, 0xc00000e488?)
        ./unota.go:216 +0x352
main.payload({0xd0b500, 0xc00000a168})
        ./unota.go:143 +0x2b1
main.main()
        ./unota.go:91 +0x4a5


unota_windows_amd64.exe -i payload_input\payload.bin -s boot
2022/09/30 15:04:04 extract boot to payload_extract\boot.img ....
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0xbe59dc]

goroutine 1 [running]:
main.extractPartition(0xc000025860, {0xc0000120f0?, 0xc00006dd30?}, {0xd0b500, 0xc00000a168}, 0x6165d)
        ./unota.go:154 +0x15c
main.extractPartitions({0xc0001c8e00, 0x1d, 0x6153a?}, {0xd0b500, 0xc00000a168}, 0xc00000e4a8?)
        ./unota.go:216 +0x352
main.payload({0xd0b500, 0xc00000a168})
        ./unota.go:143 +0x2b1
main.main()
        ./unota.go:91 +0x4a5

  • 看来是go写的,全平台编译,给出错误定位,不过我还没看payload.bin的数据结构,现在只能猜测是不支持OTA解包或者这个OTA包中不包含boot.img等镜像。之后根据care_map.pb测试其他镜像,虽然还是解出空文件,但是应该很大概率是这个OTA包中不包含boot.img等镜像,甚至不包含一个完整的分区镜像。
    在这里插入图片描述
  • 因为网速限制,只能下载一个线刷包,里面应该有boot.img。完整的卡刷包等有时间再测试。这部分知识也等有时间看源码或者查资料补上。

线刷包提取boot.img,magisk修补

  • 解压后多了好多我不知道的文件,看来自己真的落后太多了。
    在这里插入图片描述
  • 确实如猜测的线刷包还是有单独的boot.img的:放到手机中
    在这里插入图片描述
  • 因为是联发科的cpu,加上这么多年没搞过了,不敢向以前一样随便刷机、修改测试了,毕竟以前的机型没有bl锁,还有短接法等进高通9008模式救砖,现在要是砖了只能去售后了,所以只能多搜一些教程,仔细对比、分析细节,排除错误。
  • 没有magisk的跨平台文件,所以需要手机上安装magisk:下载https://github.com/topjohnwu/Magisk/releases/download/v25.2/Magisk-v25.2.apk。
  • 安装后打开选择安装,选择“选择并修补一个文件”,选择boot.img,进开始执行修补了,额,并没有关闭ab校验之类的选项。修补完成会在Download文件夹生成一个magisk_patched**.img的文件。这个文件放到电脑上。

解bl锁及刷boot.img

  • 绑定账号过了7天了,忘了是否必须开启oem解锁,为了保险是开启的:但是好像小米的官方以及一些推荐帖子并没有提开启oem解锁这个选项。
    在这里插入图片描述

  • 备份好数据后,执行reboot bootloader,进入fastboot界面。额,我记得上次好像还是经典的兔子界面,这次是只有一行橘红色的fastboot大写的黑色背景界面,是不是OTA更新改了?fastboot devices还是能识别设备的。我也不是很确定之前到底是不是兔子界面,如果不是很可能这个bootloader不是使用的高通的lk,如果是uboot可能还好,如果是个我完全不知道的,那么后面还想做双、多系统共存就麻烦了。

  • 使用当时最新的miflash_unlock-6.5.406.31,登录手机绑定的小米账号。
    在这里插入图片描述
    在这里插入图片描述

  • 解锁成功后自动重启了。卡了很久银色大MIUI界面,还以为出问题了,过了4、5分钟终于进入了MIUI13引导界面,说明是删除所有数据后启动在做dex2oat之类的优化。并没有验证小米账号的步骤,选择不联网、不登录账号进入了系统,也可能是因为我之前没有开启查找设备的功能。

  • 进入开发者选项看到oem解锁选项是勾选灰色状态,无法设置了。设备解锁状态是已解锁。糟糕,忘了记录属性了,还说对比下解锁后改变了那些属性值。

  • 我记得最开始应该是使用的a分区,OTA更新后使用的应该是b分区,执行:

xaga:/ $ mount|grep /dev/block/sd
/dev/block/sdc20 on /metadata type ext4 (rw,seclabel,nosuid,nodev,noatime,discard)
/dev/block/sdc3 on /mnt/vendor/protect_f type ext4 (rw,seclabel,nosuid,nodev,noatime,nodelalloc,noauto_da_alloc,commit=1)
/dev/block/sdc4 on /mnt/vendor/protect_s type ext4 (rw,seclabel,nosuid,nodev,noatime,nodelalloc,noauto_da_alloc,commit=1)
/dev/block/sdc13 on /mnt/vendor/nvdata type ext4 (rw,seclabel,nosuid,nodev,noatime,nodelalloc,noauto_da_alloc,commit=1)
/dev/block/sdc7 on /mnt/vendor/nvcfg type ext4 (rw,seclabel,nosuid,nodev,noatime,nodelalloc,noauto_da_alloc,commit=1)
/dev/block/sdc8 on /mnt/vendor/persist type ext4 (rw,seclabel,nosuid,nodev,noatime,nodelalloc,noauto_da_alloc,commit=1)
/dev/block/sdc84 on /mnt/rescue type ext4 (rw,seclabel,noatime)
/dev/block/sdc83 on /cust type ext4 (ro,seclabel,nosuid,nodev,noatime)
/dev/block/sdc55 on /mnt/vendor/mdota type ext4 (ro,seclabel,noatime)
xaga:/ $ ls -la /dev/block/by-name/|grep sdc55
lrwxrwxrwx 1 root root   16 2022-09-30 16:26 mcf_ota_b -> /dev/block/sdc55

应该还是b分区,所以boot.img输入b分区应该是没错的,不过为了更安全,我决定还是不刷入分区,而是使用临时启动模式。因为我不确定修补的boot.img是否没有问题。中间想安装个apk,但是暂时不想登录小米账号开启usb安装,所以把启用miui优化选项关闭,这样就可以adb install安装apk了。

  • 执行fastboot boot magisk_patched-25200_IgsWh.img
Sending 'boot.img' (65536 KB)                      OKAY [  1.413s]
Booting                                            FAILED (remote: 'unknown command')
fastboot: error: Command failed

难道现在不支持这样启动了?

  • 所以最后使用:fastboot flash boot_b boot.img,还是直接刷入分区了。
fastboot flash boot_b boot.img
Sending 'boot_b' (65536 KB)                        OKAY [  1.476s]
Writing 'boot_b'                                   OKAY [  0.177s]
Finished. Total time: 1.715s
  • 启动后打开magisk,已经正常运行了,确实是b分区。至于看到有的刷两个分区,猜测应该是不正确的,除非2个分区的系统一致或者两个版本的boot.img一致,不然刷入两个分区,当当前分区不能启动时启动另一个分区,因为写入的magisk的boot.img和原来的不一致,应该启动不了吧?
  • 至于有人提到的联发科cpu需要关闭ab校验之类并没有遇到,正常启动了,也可能是magisk修复了?暂时先到这里吧

magisk隐藏root

  • 开启Zygisk,打开遵循排除列表选项,再点击配置排除列表,选择需要隐藏root的app,重启。这样应该可以隐藏root了,因为我暂时也没有使用模块需求,所以开启隐藏同时不能使用模块的问题与我无影响,不过记得之前测试(应该不是这个v25.2版本)和支持Zygisk之前的版本都存在开启隐藏对隔离进程不生效的问题,虽然可以自己解决,但是比较麻烦。而之前测试Shamiko模块是解决了这个问题的。
  • 下载Shamiko模块:https://github.com/LSPosed/LSPosed.github.io/releases/download/shamiko-120/Shamiko-v0.5.2-120-release.zip,本地安装。关闭遵守排除列表,Shamiko模块可以根据列表隐藏。
  • 测试没有了/sbin目录,变为/dev/随机目录,su是通过chroot或者单独挂载到/system/bin/su实现的,没有加环境变量。
  • 测试根目录没有/init.rc,所以看不到加入的随机服务,不过属性中还是存在的,说明还是启动了随机名称的服务,但是不确定是不挂载init.rc了还是删除了,还是其他情况。
  • /data/misc/wifi/wpa_supplicant/下面没有任何文件了?待确定是不是Android12变更导致的,存储到哪里了?
  • 测试之前Zygisk的特征没有了,待确定是Shamiko模块隐藏的,还是v25.2版本修复了。
  • 测试即使配置排除列表时先点击app图标展开所有进程后再勾选,但是好像隔离进程不存在,需要运行app后再查看勾选多出来的隔离进程?但是我不确定,因为没有删除再测试,是记忆中好像是这样的,如果是这样,其实存在问题。
  • 支付宝等支付应用支付时会弹窗提示危险,以及状态栏左上角提示红色背景的危险。猜测可能关闭这几个系统设置和手机管家的选项即可:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 但是想想这刚好是检测magisk隐藏root的功能的时候,测试排除列表添加手机管家,可能需要启动几次才能获取所有进程,勾选,杀死手机管家。测试支付宝支付界面没有危险提示了,状态栏左上角提示绿色的安全,但是写到这里的时候又测试,现在支付没有危险、安全的提示了?不确定是不是策略这么设计的:前几次提示,后面检测不到root及使用时间较久就不进行安全的提示?
  • 定时开启飞行模式的功能经常失灵,待分析是miui的bug,还是因为手机管家(因为好像这个功能是手机管家提供的)没有后台运行,因为应该是系统应用,即使杀死了也会自启的且也没有自启开关(因为自启动管理也是手机管家提供的功能),所以明天测试看看手机管家是否后台运行以及测试处于前台时是否开启飞行模式。暂时记录到这里。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
包含boot.exe huawei C8800 root工具 Android平台ROM的定制及精简教程.pdf signapk.jar 等等 2010.11.02.2更新 0. 添加crc校验,目前是关闭,只有在debug方式解开updata.app时才启用 (--unpack-updata UPDATA.APP debug) 1. 修复windows系统下系统目录符号\与linux下系统目录符号/不一致的情况,感谢cgw233@gmial.com提交bug 2010.11.02更新: 0. 修复unyaffs在windows下的文件打开模式bug,感谢cgw233@gmial.com提交bug 1. 添加注释 2. 代码兼容2.4, 2.5. 2.6, 2.7至3.0, 3.1 3. 增加对565文件的解析 以上内容请运行,看参数提示即可,基本改变不大。 unpack-yafffs, unpack-yaffs2, unpack-yaffs功能完全一致。 由于之前拼写错误,把yaffs文件系统弄成了yafffs,而这个版本实际是版本2,所以这几个都支持。 2010.10.27更新: 1. 添加解开及生成rle格式 2. 修订bootimg格式 工具主要语言为python,分两处版本,源文件及windows下可执行文件exe,内容及用法完全一致。 运行方法: bootimg.py 功能 参数 目前支持以下功能: --repack-ramdisk, 生成 ramdisk --unpack-ramdisk, 解开 ramdisk --repack-bootimg, 生成 bootimg (包括boot.img及recovery.img) --unpack-bootimg, 解开 bootimg --unpack-updata, 解开 updata --unpack-yafffs, 解开 yafffs --unpack-rle, 解开rle,生成raw格式及png图片(如果pil可用, exe里有pil) --repack-rle, 生成rle,可支持多种格式 下面一一说明功能中的参数。 --unpack-updata [文件] [文件]为空时,默认使用UPDATA.APP 解开后,会有四个文件,boot.img, recovery.img, system.img, userdata.img 这些都是刷机时可能需要的。 --unpack-bootimg [文件] [文件]为空时,默认使用boot.img 解开后,会有两个文件,kernel和ramdisk.gz 同时,注意输出,比如base, cmdline, name等等 --repack-bootimg [base] [cmdline] [base]为空时,使用0x200000 (C8600默认) [cmdline]为空时,使用mem=211 console=null androidboot.hardware=qcom (c8600适用) 生成bootimg时,会使用kernel和ramdisk.gz(如果存在ramdisk.cpio.gz,优先使用),生成boot.img 更新: --repack-bootimg [base] [cmdline] [page_size] [padding_header] [padding_kernel] [padding_ramdisk] 具体的参数请在注意unpack时的原始参数。 2010.10.27更新 --repack-bootimg [base] [cmdline] [page_size] [padding_size] 有关padding_size请参看unpack-bootimg时的结果,c8600默认为4096字节 --unpack-ramdisk [文件] [目录] [文件]为空时,使用ramdisk.gz [目录]为空时,使用initrd, (请保证这个目录不存在) 输出:cpiolist.txt, initrd目录下的文件 --repack-ramdisk [cpiolist] [cpiolist]为空时,读取cpiolist.txt 根据cpiolist.txt生成ramdisk.cpio.gz cpiolist.txt格式 1). 文件 file 目标系统路径 当前系统路径 目标系统权限 2). 目录 dir 目录系统路径 目录系统权限 3). 软链接 slink 目录系统路径 链接路径 目标系统权限 --unpack-yafffs [文件] [目录] [文件]为空时,使用userdata.img (呃,这个比system.img小) [目录]为空时,使用文件除.img外的其它内容,比如userdata.img时使用userdata 注:目录必须不存在 将把文件解开到目录下去 注:windows系统不支持软链接和硬链接,可能会报警告信息 --unpack-rle [rle] [raw] 2010.10.27版本新增 如果有pil模块,将生成png,目前仅支持320x480 --repack-rle [raw] [rle] 2010.10.27版本新增 如果有pil模块,raw可以是任何图片格式。 已经测试的有jpg, png等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值