banner
raye~

Raye's Journey

且趁闲身未老,尽放我、些子疏狂。
medium
tg_channel
twitter
github
email
nintendo switch
playstation
steam_profiles

安卓手機root二三事

image

起因是這樣的,很久之前(大概 1 年前吧),有一部 Google Pixel5 手機,是拿來做測試的。自然是少不了折騰,magisk、太極等都安排上。結果在一次操作失誤後,把手機重置了。於是又只能重來一遍,結果在刷入 Magisk 的時候失敗了,導致手機無限重啟,當時還挺後悔,想着用不了了,後來就晾在一邊沒管了。

結果上週,心血來潮給手機充了個電,居然又能用了?時間居然真的可以修復 bug 嗎🤣

安卓這塊確實不是很熟,於是決定惡補一下這裡的知識

一些概念#

  1. OTA

OTA(Over-The-Air)映像是指通過無線方式傳送到設備上的系統或應用更新包。OTA 更新允許設備製造商、運營商或應用開發者將更新推送到用戶設備,而用戶無需連接到計算機或使用其他外部工具。

簡單來說就是平常系統升級的時候,通過無線的方式去下載獲得的包。具體 OTA 升級原理是要看這個 android ota 升級原理 3,不過此處我們簡單知道概念就好

  1. Magisk
    關於 Magisk 的原理,可以理解為 magisk 是掛載一個與系統文件隔離的文件系統來加載自定義內容,為系統分區打開了一個通往平行世界的入口,所有改動在那個世界(Magisk 分區)裡發生,在必要的時候卻又可以被認為是(從系統分區的角度而言)沒有發生過。

DraggedImage

既然跟分區相關,那就得了解下分區是什麼
類比 Windows 磁碟的分區,本質上是在磁碟上去劃分一段段連續的存儲區域,並且按照一定的格式來組織數據。就像 Windows 有啟動分區一樣,回顧下啟動過程:

  1. CPU 執行 BIOS 初始化、自檢等程序,載入磁碟內容到物理內存 0x7c00 處
  2. 從引導扇區的 Boot 程序開始執行
  3. ……

安卓本質上也是一個 Linux 系統,啟動過程自然也是可以類比,那麼這裡就不難理解安卓的分區了:

  • boot 分區:包含啟動加載器需要的所有信息,如內核。
  • system 分區:包含 Android 操作系統本身。
  • recovery 分區:包含恢復模式的代碼,用於更新、備份或恢復系統。
  • userdata 分區:包含用戶數據和應用程序。
  • cache 分區:用於存儲臨時數據和 OTA 更新。

這些信息往往寫在磁碟最開的幾個 KB 中,如果你了解 mbr、gpt 等磁碟分區表,就不難理解了
在 Windows 上可以通過 WinHex 直接查看啟動分區的內容,那麼安卓如何操作呢?

可以通過 dd 命令:

adb shell su -c "dd if=/dev/block/bootdevice/by-name/boot_a of=/sdcard/boot.img"
adb pull /sdcard/boot.img

由於現在安卓系統支持 A/B 分區方案,即有兩個獨立的系統分區, boot_aboot_b ,這樣的設備可以在一個分區上運行系統,同時在另一個分區上進行後台更新,然後在下一次重啟時切換到新的分區,從而實現無縫的系統更新。

注:本質上 Linux 一切皆文件,boot_a 實際指向的是 /dev/block 下的設備文件

redfin:/ # ls -al /dev/block/bootdevice/by-name/boot_a
lrwxrwxrwx 1 root root 15 1970-01-04 03:33 /dev/block/bootdevice/by-name/boot_a -> /dev/block/sda6

那麼這裡 Magisk 要做什麼也就呼之欲出了,本質上就是提取 boot.img 的內容,然後給它打 patch,實現一個 Magsik 的分區

  1. bootloader

如果還記得操作系統啟動流程,那麼 bootloader 實際上是一個很重要的功能就是初始化內存、載入磁碟的引導分區。所以只要能進入 bootloader 界面,那麼手機大概率都是有救的

adb reboot bootloader
  1. fastboot

fastboot 類似於 adb,可以與設備的 bootloader 通信。主要用來解鎖,以及刷入

注意設備必須處於 bootloader 模式(也稱為 fastboot 模式)才可以使用 fastboot

常用的 fastboot 命令:

  1. fastboot devices:列出連接到計算機的設備

  2. fastboot flash [partition] [filename]:刷寫指定的分區。例如,要刷寫 recovery 分區:

fastboot flash recovery recovery.img
  1. fastboot boot [kernel] [ramdisk]:不直接刷寫到設備,而是僅從給定的內核 /ramdisk 引導

  2. fastboot erase [partition]:擦除指定的分區

  3. fastboot oem unlock:解鎖設備的 bootloader

安裝 Magisk#

大體上來說可以分為幾個步驟

  1. 解鎖 bootloader
  2. patch boot.img
  3. 刷入 patch 後的 boot.img
  4. 通過 Magisk Manage 安裝 Magisk

第一步要看手機品牌而定,Google 在這一塊還算是比較開放的
同時,Pixel 最好的一點就是,官網已經提供好了設備的 image: 下載鏈接

只需要確定好手機版本號即可(不像小米,還需要有積分才能申請到開發版)

DraggedImage-1

下載好,解壓找到 boot.img ,傳入手機,通過 Magisk Manage 打 patch,導出。

從 patch 後的 img 啟動,這個操作一般是沒有風險的,如果直接 覆蓋則可能出問題(不過問題也不太大)

fastboot boot magisk_patched-26100_nRGcd.img
Sending 'boot.img' (98304 KB)                      OKAY [  2.521s]
Booting                                            (bootloader) boot.img missing cmdline or OS version
OKAY [  1.577s]
Finished. Total time: 4.145s

啟動之後,此時就能臨時獲得 root 權限。當然重啟後就會失效,因為重啟後還是從原來的 boot.img 啟動

這時候可以通過 Magisk Manage 刷入即可,這種方式相對來說更加安全

問題回顧#

後來回顧了下,原來是這個問題:

我知道问题了,原来是之前刷的boot_patched.img 有问题,导致手机无限重启,其实把原版的boot.img刷入就能解决问题了

raye
raye
@rayepeng_

原来时间真的可以修复bug?🤣 之前给手里的一台Google pixel手机刷机失败,没法启动了,以为变砖了就没管了 过了3、4个月 今天随手拿了冲了个电,没想到居然自己好了???

0
Reply

也有一些其他的解決方案,如關閉驗證等,但是我嘗試了沒啥用就沒管了

Magisk boot 刷入無限重啟問題

Magisk 模塊推薦(內空)#

本來是應該要推薦一些的 Magisk 模塊的,奈何我已經很少用安卓了,安裝 Magisk 的目的也就是為了 root 而已🤣

刷了 Magisk 之後裝什麼?我推薦這 20+ 個模塊

參考#

玩機的必備操作 —— Pixel3 安裝 Magisk
[已解決] Pixel 4 刷入 Magisk 在 fastboot 模式下找不到設備 和如何救磚
[原創] 雲手機底層技術揭密 : Android 系統啟動與 Magisk 原理
[原創] Magisk 學習之刷入 vbmeta.img 及關閉 avb2.0 校驗

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。