[ZenFone] 暫時 unroot 工具:Root Switch

基本上算是 ZenFone 專屬的工具,當初會想做這工具不外乎有些程式會偵測手機是否有 root (比如某支付啊,某可夢啊) 試過目前可以找到的隱藏 root 程式都有各自的優缺點 (純粹個人喜好就不列出來比較了) 而且在我自己做的『預先 root system.img』與『精簡版』都有些小狀況,所以決定自己跳下來看看這水有多深 XD

檔案下載

1.0.3 https://mega.nz/#!owUGFJKS!YfaEL3zXrZVPlGol62HFGp9gzPyNiwCc6f0g4lJAZxc

主要支援機種

ZenFone 2 Laser (ZE500KL / ZE550KL / ZE601KL)
ZenFone Selfie (ZD551KL)
ZenFone ZOOM (ZX551ML)
ZenFone 2 (ZE551ML / ZE550ML)
ZenFone 5 (A500CG)
ZenFone 6 (A600CG)

使用前的注意事項

  • 請熟悉 fastboot / adb 的使用,知道如何回復原廠 ROM,萬一服用後無法開機,請自行刷回原廠 ROM 還原。
  • 目前只針對 SuperSU 設計,其他的沒測試過。
  • 支援 Android 5.0,關閉 root 後重新開機會自動還原 root。如果你的手機不在列表裡面,原則上還是可以使用,但切記 重開機前一定要打開 root,不然就永久 unroot 了。
  • 理論上支援 Android 6.0,不過如果是 systemless root 可能還有些小問題需要長時間測試。

原理解說

  • 以 Android 5.0 來說,主要針對 su 與 daemonsu 這兩個檔案更名,但因為 root 時將 /system/bin/app_process 連結到 /system/xbin/daemonsu,更名會讓系統無法正常運行 (小狀況,比如無法安裝新 app..),所以保險的作法是連結回原本的 app_process{32,64},可是這麼做重開機後 root 便會消失,得花額外的精力重新 root。幸好之前研究 ZenFone 系列 root 實作過 OTA survival 功能,於是借用相關檔案重建連結 (還原 root),這也就是為什麼只有 ZenFone 系列手機不需要在重開機前打開 root。以 x86 系列來說是 /system/bin/ct_monitor,而 arm64 系列來說就是 /system/bin/qrngd,只要先設定好 SELinux policy 即可掛載 /system 還原相關檔案。
  • Android 6.0 除了前面的步驟外,還多了 /system/bin/.ext/.su,而且 SELinux 必須為 Enforcing (某些 root app 會自動設定 SELinux 為 Permissive)
  • 最後要處理 systemless root,相關檔案都放在 /su,實際上是 /data/su.img 的掛載。更名不是太大的問題,問題在於如果要在重新開機時還原,一定得修改 boot.img,但身為奶爸哪來這麼多美國時間處理一海票的 case 呢?所以最簡單的處理方式就是:將 /data/su.img 複製一份,並且將現在使用的 su.img 改名,如此一來重開機時就會自動掛載沒有修改過的 su.img,照常使用 root 權限,唯一的缺點就是要花 96MB 的空間儲存額外的 su.img (還好空間還算便宜啦)。不過這種修改方式可能會產生一些小問題,日後會持續改善。

源碼呢?

因為主體是 script 所以我就把相關檔案丟到 gist 上啦,有興趣的可以參考參考,至於 android app 基本上.. 就只是個載體,不重要啦。:P

我有其他問題!

歡迎來 ZenTalk 討論,也許其他 Zen 粉有與你相同的問題或想法 :)
https://www.asus.com/zentalk/tw/thread-173542-1-1.html