为什么要备份TA分区

Sony的机器虽然允许解锁BL(Boot Loader)之后就可以自由的刷入第三方Recovery和自定义Rom,但是解锁BL之后TA分区将永久性不可用,而且就算重新刷入官方ROM之后该分区也无法恢复。这会影响到相机的降噪算法和显示图像算法(超逼真图像)。所以对Sony手机来说备份TA分区就显得十分重要,如果没有备份该分区则解锁后的使用体验就将降低一大截。

原理

备份该分区的数据需要在root权限来访问block块设备,用dd命令将块设备的数据导出。但是在普通情况下获取root权限需要解锁BL,而解锁BL又会破坏掉TA分区的数据。这似乎是一个死循环?
这里咱们备份TA分区的关键则是在不解锁BL的情况下,获取root权限。
万幸的是,在XZ1 Compact特定版本的官方Rom中,有个内核漏洞CVE-2017-7533。这个漏洞会则会在特定的情况下被获取到root权限。不过这个漏洞在2017-12-05的安全更新中被Google修复了。
所以,我们只需要在蓝灯模式下将手机的Rom刷至更新前的官方版本,就可以通过该漏洞来获取root权限从而备份TA分区了。
已经验证的可以获取root权限的官方Rom:47.1.A.2.324_CE147.1.A.8.49_CE1

准备工具

  • 可以被破解的Rom,自己使用的是47.1.A.2.324_CE1
  • 蓝灯模式刷机工具:Flash Tool或者newflasher,自己使用的是newflasher
  • root工具:renoshell 下载地址:外网 备份
  • adb工具:这个就大家自己找吧,我就不放链接了

开始破解

1.刷入可以被破解的官方Rom

  1. 将Rom解压和刷机工具newflasher(windows是newflasher.exe,Linux则是newflasher.x64)放入一个文件夹

  2. 手机连接电脑关机

  3. 按住手机音量+电源键开机,待手机震动一下呼吸灯变成蓝色松手

  4. 执行刷机

tianliang@omen:~/downloads/XZC/G8441/ sudo .newflasher.x64
  1. 手机刷机完成后不插卡开机,只连接wifi其它均不设置,打开adb调试模式

2.将root工具传入手机

tianliang@omen:~/downloads/XZC/ adb push renoroot/renoroot /data/local/tmp
tianliang@omen:~/downloads/XZC/ adb push renoroot/renoshell /data/local/tmp
tianliang@omen:~/downloads/XZC/ adb push renoroot/renosploit /data/local/tmp
tianliang@omen:~/downloads/XZC/ adb install -r renoroot/renostrap.apk

3.获取root权限

  1. 在手机上打开安装的应用
  2. adb shell执行renoroot
tianliang@omen:~/downloads/XZC/ adb shell
G8441:/ cd /data/local/tmp
G8441:/data/local/tmp/ ./renoroot

在获取root权限的过程中手机有可能会因为出错而重启,重新开机再执行renoroot直至root成功。
root成功时,adb shell会显示#的命令行,手机端则会有绿色成功的标志

4.备份TA分区

G8441:/data/local/tmp # dd if=/dev/block/bootdevice/by-name/TA of=/data/local/tmp/ta-locked.img
4096+0 records in
4096+0 records out
2097152 bytes (2 M) copied, 0.01 s, 76 M/s
G8441:/data/local/tmp # exit
G8441:/data/local/tmp $ exit
tianliang@omen:~/ adb pull /data/local/tmp/ta-locked.img ./

5.还原TA分区

解锁BL之后,在root权限下可以通过如下命令还原TA分区

tianliang@omen:~/ adb push ta-locked.img /data/local/tmp
tianliang@omen:~/ adb shell
G8441:/ $ su # 获取root权限可以是在刷入magisk之后,也可以在不刷入magisk的情况下是把上面的获取root再执行一遍,这里的例子是使用magisk直接获取root
G8441:/ # cd /data/local/tmp
G8441:/data/local/tmp # dd if=ta-locked.img of=/dev/block/bootdevice/by-name/TA

最后

最后当然是解锁BL之后随便玩啦。

PS:图解

  • 刷机时的文件
    g8441_root_01
  • 获取root权限成功时的命令行
    g8441_root_02
  • 获取root权限成功时的手机端
    g8441_root_03