2012年7月12日 星期四

Android OTA 後如何保留 root

不少人會有這種問題, root 後不能更新 ,
萬一能更新,在更新後不一定能夠保留 root 權限

而偏偏很多廠商 OTA 之後會把漏洞修掉,所以之前提到的
TF101 才需要用到 RootKeeper 來保留 root 權限。

重點就在這個 OTARootKeeper 是怎麼運作的,我從之前學長教的
Linux 「漏洞」(應該算是挖坑給 root 跳的動作吧XD )中想到的方法
PS : 這個漏洞是挖洞給懶人管理者跳,所以基本上並沒有甚麼威脅XD

隨後也去看了一下 RootKeeper 的 source code , 果然是用這種方式XD



Linux 在給予系統檔案權限的時候會用到三個數字,分別代表
Owner , Group , Other 的存取權限,但其實 Linux 還可以有
第四位數字用來給予一些特殊的權限,放在 Owner 之前
SUID = 4
SGID = 2
SBIT = 1

這部分可以參考鳥哥私房菜

重點就在於:SUID 是表示『該檔案在執行的時候,具有檔案擁有者的權限』

因為其實 root 就只是把 su 這隻程式裝進去,所以要是我們可以把 su 先
備份到「OTA 不會動到的地方」,那基本上就 OK 了。
 這也就是為什麼  OTA RootKeeper 會提到
Upgrades not formatting or overwriting completely the /system partition.

1.將 su 備份到某個地方,並 chown 0:0  ((使用者和群組皆為 roo
2.將這個 su 給予權限: chomd 6755 ((執行身分為 root , 並大家都可執行

這樣一來,更新後既使 /system/bin 裡面的 su 被拿掉了,只要這個備份檔案還在
那麼執行這個備分的 su 還可以切換成 root 身分(以 root 切換 root 權限也OK)

當取得 root 身分之後,就可以再把這個備份 su 放回 /system/bin 裡面了

是說從 OTA Root Keeper 的 source code 裡面還看到幾個比較特別的
指令,不太清楚是不是這麼簡單就可以做到,上面這個方法理論上一般
的 linux 系統應該是OK,但不知道 embedded 是不是也一樣...

另外就是如果要避免 /system 整個被 format掉,為什麼不選擇在 /data 呢...
難道有些機器沒辦法再 /data 裡面設定 SUID ? (就像 /sdcard/ 裡面不能設定一樣)
或者是還有其他權限上的問題呢?這就不太清楚了

1 則留言:

  1. 我的本來要降級,怎麼用降級的用到一半,那個降級的怎麼自己跳到勒,害的我都沒辦法降級

    回覆刪除