google-code-prettify

星期三, 10月 02, 2019

【Android】Re:從零開始的異世界 Sony Z5 (E6653) 尋根 生活(ROOT)


怒濤般的一日(怒涛の一日目)
身為家裏蹲的少年菜月昴,在從便利商店回家途中突然發生意外被傳送到異世界。
少年原以為自己完全沒有任何特長。
但本來應該因為遭遇襲擊死去,回過神來後一切卻都被重置。
發現自己「死亡回歸」的特殊能力後,為了拯救少女,少年跨越無數次絕望,一次次地死亡並重新來過。
刷機的過程就像是不斷「死亡回歸」,只為了成為寶可夢大師…

欲練神功…揮刀自宮…(謎之音:想練神功就準備切機機)
練完神功…無需自宮…(謎之音:神功練好就不用切機機)

保證這篇沒有 雷姆、拉姆、愛蜜莉雅、帕克

環境:
Sony Z5 (E6653) 7.1.1 一枚
加入空軍自備 pc 一枚 (linux mint 18.x)
收集底下列出的工具、軟體、FTF刷機包

狀況:
自從【Android】Sony Z5 Compact 尋根之路(ROOT)與高級磚頭的生死對決
從軍以來,步兵卜朧共都是一步一腳印的攻城掠地,
但光陰似箭…炎炎夏日…雖已入秋…但一樣熱到靠北…
一直嚮往空軍在天上飛的自由自在…(謎之音:明明就是想在家吹涼涼…抓爽爽…)

為了成為像小智一樣的寶可夢大師
一個不安份的靈魂就此大爆發…


由左至右: Mi4i、Z5、RedMi note 3、Z5C(背後 iphone 11 Pro Max)



大綱:
1. 前製作業工具準備
2. 作業流程
2.01 取得基本資訊
2.02 下載 firmware
2.03 提取官方版本核心
2.04 Android 降版本
2.05 備份 TA
2.06 自製核心
2.07 Android 升版本
2.08 Unlock BootLoader
2.09 置換 自製核心 Boot Kernel
2.10 置換 TWRP Recovery
3. 參考文獻



前製作業工具準備:
【工具】



工具說明:
Android SDK Platform-Tools 主要用到的只有 adb、fastboot
Flashtool 用來刷機機
XperiFirm 用來抓取 FTF 檔案工具
FTF包 就是刷機包,可以透過 XperiFirm 抓取,再由 Flashtool 來打包
Iovyroot 與 Universal (Dirtycow-based) TA Backup v2 用來備份 TA 工具
rootkernel_v5.23 原廠核心重新包裝與修改工具 用來編譯修改 boot kernel
Team Win Recovery Project for Sony Xperia Z5 (Sumire) Recovery 工具
Unlock Bootloader Sony 原廠 Bootloader 解鎖鑰匙取得
SuperSU Root 或 Magisk 用來 root 機機 (這不說明了)

adb、fastboot 其實在 linux 上不用這麼麻煩,有 簡單取得 的方法

windows上也不用這麼麻煩…有先拜弄了迷你版的工具…
基本上 Sony 降版本,需要清除使用者資料,
用人話講,就是刷完降版,就跟全新手機狀態一樣
所以該備份的工作就去備份吧…

有個動作要先做,就是先開啟手機開發人員選項
開發人員選項目的有二,其一開啟  啟用 OEM 解鎖;另一則是開啟  USB 偵錯 

Z5 啟用後,接上 pc 後,Z5 會彈出 連線狀態選擇(充電、檔案傳輸、m啥鬼的)
我記得我選了檔案傳輸,Z5 接著會彈出 一個安全性確認的訊息,這時要選允許
這動作沒做,adb、flashboot 指令會無效

有個用 adb 備份的方式,在 LinuxMint 下操作指令如下
sudo adb devices
List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
AB1C2DEFG3 device

(AB1C2DEFG3 看來出來這馬賽克加密處理過吧)
這步驟主要是,檢查是否已連接上
接著就可以用指令備份啦
sudo adb backup -apk -obb -shared -all -f ./backup_ApkObbSharedAll.ab


Backup and restore commands Description
backup[ -f file] -apk | -noapk] [-obb | -noobb] [-shared | -noshared] [-all] [-system | [-nosystem]package_names Write an archive of the device's data to file.
If you do not specify a file name, the default file is backup.adb.
The package list is optional when you specify the -all and -shared options. The following describes the usages for the other options:
-apk | -noapk: Back up or do not back up .apk files.
The default value is -noapk.
-obb | -noobb: Back up or do not back up .obb files.
The default value is -noobb.
-shared | -noshared: Back up or do not back up shared storage.
The default value is -noshared.
-all: Back up all installed apps.
-system | -nosystem: Include or do not include system apps when backing up all installed apps (-all).
The default value is -system.
參考來源:Android Debug Bridge (adb)


備份過程,Z5 會跳出備份檔案密碼設置提示,密碼設完就會開始備份
備份完成後,再把備份檔備到 sdcard 與 pc 上吧

2. 作業流程:
2.01 取得基本資訊:
取得 手機資訊:
Z5 開啟電話 輸入: *#*#7378423#*#* (進入 Service Menu )
選擇 Service info > Model info
出現
Model:
E6653

選擇 Service info > Configuration
IMEI:  012345678901234 (看來出來這馬賽克處理過吧)
IMEI 之後需要到 sony Unlock Bootloader 網站,取得解鎖鑰匙

2.02 下載 firmware
下載 firmware 的方法有兩種,
一種是問谷哥,直接找先拜分享的;
另一種是用 XperiFirm 下載,再用 Flashtool 打包
參考了這篇 [教學] XperiFirm --- Xperia全系列FTF下載器 (v2.5)




2.03 提取官方版本核心
利用 Xperifirm,下載官方最新版 firmware Taiwan 版本是 32.4.a.160/R2E
目的是將 kernel .sin 轉 .elf

打開Flashtool,選選單中的 Tools > Sin Editor


目錄指到下載的官方版軟體目錄下 kernel 開頭的檔案

再點選 Extract data
先將解出來的 .elf 檔案放到 rootkernel 工具壓縮檔所解壓縮後的目錄中,已備自製核心使用

2.04 Android 降版本
Flashtool 刷機機啦… 參考 Z5 Premium 6.0.1升7.1.1 抓寶抓到飛上天 這篇
APP_LOG、DIAG、SSD、USERDATA 打勾,其他什麼都不勾
(當沒勾 USERDATA,開機後系統極度不正常)

點選 閃電符號 選則 5.x 版的 FTF 刷機機…

刷機機中…

當出現 Flashing finished. 與 Please unplug and start you phone.
代表刷機完成,把傳輸線拔掉後就可以啟動你的手機

2.05 備份 TA
失敗備份TA工具:
backupTA_V2 失敗備份出0kb的TA
iovyroot_v0.3 失敗備份TA

成功備份TA工具:
iovyroot_v0.4:(下載 chrome 會認為是病毒…用其他瀏覽器下載吧)

注意:必須先關掉 FlashTool 不然會干擾 adb 運作
sudo -i
adb devices
List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
AB1C2DEFG3 device

(AB1C2DEFG3 看來出來這馬賽克加密處理過吧)
再次檢查是否已連接上

解壓縮 iovyroot_v0.4 後進入目錄,就可以輸入下面指令
gg-Desktop sony # cd iovyroot_v0.4/
gg-Desktop iovyroot_v0.4 # adb push "root/iovyroot" "/data/local/tmp/iovyroot" > NUL 2> NUL
gg-Desktop iovyroot_v0.4 # adb push "root/backup.sh" "/data/local/tmp/backup.sh" > NUL 2> NUL
gg-Desktop iovyroot_v0.4 # adb shell "chmod 777 /data/local/tmp/iovyroot"
gg-Desktop iovyroot_v0.4 # adb shell "chmod 777 /data/local/tmp/backup.sh"
gg-Desktop iovyroot_v0.4 # adb shell "mkdir /data/local/tmp/tabackup" > NUL 2> NUL
gg-Desktop iovyroot_v0.4 # adb shell "/data/local/tmp/iovyroot /data/local/tmp/backup.sh"
iovyroot by zxz0O0
poc by idler1984

[+] Changing fd limit from 1024 to 4096
[+] Changing process priority to highest
[+] Getting pipes
[+] Allocating memory
[+] Installing JOP
    [+] Patching address 0xffffffc001950630
    [+] Start map/unmap thread
    [+] Start write thread
    [+] Spraying kernel heap
    [+] Start read thread
    [+] Done
[+] Patching addr_limit
    [+] Patching address 0xffffffc034410008
    [+] Start map/unmap thread
    [+] Start write thread
    [+] Spraying kernel heap
    [+] Start read thread
    [+] Done
[+] Removing JOP
got root lmao

TA.img copied successfully

gg-Desktop iovyroot_v0.4 # adb pull "/data/local/tmp/tabackup/" "." > NUL 2> NUL
gg-Desktop iovyroot_v0.4 # adb shell "rm /data/local/tmp/tabackup/TA-*.img"
gg-Desktop iovyroot_v0.4 # adb shell "rm /data/local/tmp/backup.sh"
gg-Desktop iovyroot_v0.4 # adb shell "rm /data/local/tmp/iovyroot"
gg-Desktop iovyroot_v0.4 # adb shell "rmdir /data/local/tmp/tabackup"

其中 gg-Desktop sony # 是 linux 終端機 的命令提示字元
gg-Desktop 表示電腦名稱 ,sony 是目前工具放的位置路徑
cd iovyroot_v0.4/  切換路徑到 /home/gg/Download/sony/iovyroot_v0.4/
其他指令就是參照 iovyroot_v0.4 裡的 tabackup.bat 批次檔中的指令
整個指令做完 有出現 TA.img copied successfully 訊息,
就會在 iovyroot_v0.4/  目錄下產生一個 TA-xxxxxxx.img 檔案

2.06 自製核心
將 2.03 提取官方版本核心 解出來的 .elf 檔案放到 rootkernel_v5.23 解壓縮後的目錄中(回憶一下上面做過的)
將 2.05 備份 TA 備份出來的"TA-日期.img"放到 rootkernel_v5.23 解壓縮後的目錄中
將終端機路徑轉到 rootkernel_v5.23

在終端機裡輸入指令 "/bin/bash ./flash_dk.sh TA-xxxx2019.img Z5_DK.ftf"
產生 DK.ftf 檔

gg-Desktop rootkernel_v5.23_Windows_Linux # /bin/bash ./rootkernel.sh Z5_E6653_Customized\ TW_1298-8309_32.4.A.0.160_R2E_kernel_S1-SW-LIVE-F936-PID1-0006-MMC.elf TW_1298-8309_32.4.A.0.160_R2E_kernel_S1-SW-LIVE-F936-PID1-0006-MMC.boot_TA.img TA-30092019.img
Rootkernel V5.23
- Unpacking kernel
  Found elf boot image
  Kernel version: 3.10.84-perf-g5e25a09
  Found appended DTB
- Detected vendor: somc (Sony), device: sumire (Xperia Z5), variant: row
- Unpacking initramfs
- Detected platform: 64-bit
- Detected Android version: 7.1.1
- dm-verity is enabled. Disable? (Say yes if you modify /system) [Y/n] y
  Disabling dm-verity
- Sony RIC is enabled. Disable? [Y/n] y
  Disabling Sony RIC
- Skipping TWRP recovery. No kernel modules for 3.10.84-perf-g5e25a09 available
- Install DRM fix? [Y/n] y
- Install busybox? [Y/n] n
- Creating new initramfs
- Creating boot image
- Cleaning up
Done

這樣就產生 修改過 BOOT Kernel 檔案囉
檔名叫 TW_1298-8309_32.4.A.0.160_R2E_kernel_S1-SW-LIVE-F936-PID1-0006-MMC.boot_TA.img

2.07 Android 升版本
升版本,有兩種方式…
一種是使用 Flashtool 刷機機啦,
一種是使用 Z5 來線上即時更新,會一路從 5.1 > 6.0 > 6.0.1 > 7.1.1
(我用 Flashtool 刷完發現 Z5 怪怪的…螢幕閃閃閃…然後我就回朔到 5.1 去慢慢升級)

2.08 Unlock BootLoader
注意:開發人員選項,其一開啟  啟用 OEM 解鎖;另一則是開啟  USB 偵錯 
參考 [教學] Sony Xperia Flashtool 之 解鎖、Root、變更原廠韌體版本 這篇
先到 Unlock Bootloader 去取鑰匙

輸入 Z5 查到的 IMEI(看來出來這馬賽克處理過吧)

Your unlock code for 012345678901234
1234AB5678C9D012


點選 BLU

照著做

接著做

輸入 IMEI、Unlock Code,並按下 Unlock

就這樣很空虛的解鎖完成

2.09 置換 自製核心 Boot Kernel
gg-Desktop rootkernel_v5.23_Windows_Linux # adb reboot bootloader
上面這段是切換到 fastboot

把 Boot Image 刷到 Z5
gg-Desktop rootkernel_v5.23_Windows_Linux # fastboot flash boot TW_1298-8309_32.4.A.0.160_R2E_kernel_S1-SW-LIVE-F936-PID1-0006-MMC.boot_TA.img

2.10 置換 TWRP Recovery
去下載 Z5 TWRP Recovery ,將它放到找的到位置,
我也放到 rootkernel_v5.23_Windows_Linux 去

gg-Desktop rootkernel_v5.23_Windows_Linux # fastboot flash recovery recovery.img
上面這段是刷 recovery

gg-Desktop rootkernel_v5.23_Windows_Linux # fastboot boot recovery.img
上面這段是直接用 recovery.img 開機囉
(謎之音:能不能有點貢獻…不要老靠谷哥…)

進 Recovery 之後要刷 SuperSU、Magisk 就可以 ROOT 啦

                                                                                                                                                 (未完待續…)

3. 參考文獻