android 6.0三星5.1.1Root

yijie發表於2020-07-24

現在google是越來越不給我們留活路了… 從android 6.0開始, 三星的5.1.1開始. 預設都開啟了data分割槽的forceencryption, 也就是強制加密. 也開啟了/system分割槽驗證. 所以目前市面上都沒有針對android 6.0和三星5.1.1以上的root方案..

國外的supersu的作者chainfire, 搞cf-auto-root那哥們, 也沒有針對三星5.1.1和android 6.0的方案. 不過他私下搞了個修改android核心的root方案.. 這個可能是目前唯一可以root 6.0的辦法.

 

http://forum.xda-developers.com/apps/supersu/wip-android-6-0-marshmellow-t3219344

這個可能也是以後root的辦法.. 它是通過修改boot.img也就是Android的核心檔案, 對/system分割槽效驗的地方打補丁. 目前我們搞刷機也是用的這個辦法. 這個辦法有一個弊端, 就是需要修改Android的核心檔案. 要針對一臺一臺機型的做處理. 即使是一鍵Root也必須這樣.

以後Root會越來越難! 即使是有漏洞, 能夠提權, 但是不允許修改/system目錄的話, 也要針對每一款機型自己做一個打過補丁的sepolicy檔案!想來感覺真是有點心寒, google這是要趕盡殺絕的節奏啊!目前只能使用chainfire研究出來的給sepolicy打補丁的辦法. 不過他說在弄, 不需要打補丁的辦法. 但是還沒試驗, 另外他說Bugs… Bugs everywhere!

http://www.androidpolice.com/2015/10/31/chainfire-experiment-achieves-android-root-without-touching-the-system-partition/

所以目前可行的辦法還是修改boot.img.. 昨天在三星的S5(SM-G900I)上, 成功做出來了一個刷機包可以獲取到root許可權. 這種辦法, 針對android 6.0和三星的5.1.1以上都可以.. 當然如果是鎖了bootloader的機器, 那就沒辦法了! 這裡簡單說下步驟.

1. 首先根據機型的型號(SM-G900I)和Model number去下載原版的刷機包. 下載包的時候注意基帶版本和Build number.

http://samsung-updates.com/

2. 下載一個該機型的(SM-G900I)的自定義recovery. 一般CWM 和TWRP都可以. 只需要有完整的busybox工具就行!

https://www.clockworkmod.com/rommanager

http://teamw.in/Devices/

3. 下載SuperSU-v2.56-20151030013730 底包

SuperSU-v2.56-20151030013730.zip

4. 指令碼檔案提取. 這個我們就直接從xiao1u修改的S6(SM-G9200)的boot.img裡面提取就行. 需要這個包裡面的3個指令碼檔案. startsu.sh init.fixdeepsleep.sh  install-su.sh

http://pan.baidu.com/s/1bnE2nJT 密碼: yb1y

這樣. 需要的基本資源就可以了.. 下面就是做自己的包了. 所以接下來這幾步這樣弄.

1. 獲取patch過的sepolicy. 這步很關鍵, 不然即使指令碼和SuperSU放進去了, 也啟動不了機器. 因為seplicy檢測到/system被修改了, 會拒絕啟動. 所以刷入自定義的recovery然後進入recovery中執行以下命令.

adb push sepolicy /data/local/tmp/sepolicy
adb shell su -c "supolicy --file /data/local/tmp/sepolicy /data/local/tmp/sepolicy_out"
adb shell su -c "chmod 0644 /data/local/tmp/sepolicy_out"
adb pull /data/local/tmp/sepolicy_out sepolicy_out

  

sepolicy在下載的原版刷機包裡面有, supolicy在SuperSU-v2.56-20151030013730裡面. 執行supolicy的時候, 提示缺少庫檔案libsupol.so所以把libsupol.so上傳到/system/lib下面. 上面的命令就可以執行完成了. 輸出的sepolicy_out就是patch過的檔案. 用這個替換掉boot.img裡面的sepolicy就可以關閉檢測了.

1) 修改/default.prop

修改內容:

ro.secure=1
ro.allow.mock.location=0
ro.debuggable=0
ro.adb.secure=1

>>
ro.secure=0
ro.allow.mock.location=1
ro.debuggable=1
ro.adb.secure=0

  

2) 修改 /fstab.samsungexynos7420 和 fstab.samsungexynos7420.fwup有可能是
/system 改為不帶 verify 的
修改內容:

/dev/block/platform/15570000.ufs/by-name/SYSTEM /system ext4 ro,errors=panic,noload wait,support_scfs,verify
>>
/dev/block/platform/15570000.ufs/by-name/SYSTEM /system ext4 ro,errors=panic,noload wait,support_scfs

  

有可能是fstab.qcom如果預設不帶verify就不需要修改了!

3)修改 /init.rc

3.1)on late-init 後加入:

service injectsu /system/bin/sh /sbin/install-su.sh
class core
user root
oneshot

  3.2) ## Daemon processes to be run by init. 中加入

service fixdeep /system/bin/sh /sbin/init.fixdeepsleep.sh
class core
user root
oneshot

  3.3)最後加入:

service startsu /system/bin/sh /sbin/startsu.sh
class main
user root
oneshot

  

4) 增加額外的檔案(Superuser,指令碼)

$ARCH 可能是 arm64 或者 arm

/sbin/supersu/$ARCH/libsupol.so

/sbin/supersu/$ARCH/su

/sbin/supersu/$ARCH/supolicy

/sbin/supersu/common/99SuperSUDaemon

/sbin/supersu/common/install-recovery.sh

/sbin/supersu/common/Superuser.apk

/sbin/init.fixdeepsleep.sh

/sbin/install-su.sh

/sbin/startsu.sh

  注意, 一般來說boot.img分割槽不是很大, 很容易放入Superuser以後空間就不夠了. 這時候可以不放入Superuser. 這樣的boot.img刷入以後, 直接輸入su就可以提權. 可以進入系統再安裝一個Superuser也可以.. 或者放在cache.img.ext4裡面也可以.. 然後修改install-su.sh指令碼里面的

cp_perm 0 0 0644 $COM/Superuser.apk $APKNAME

  改成

cp_perm 0 0 0644 /cache/Superuser.apk $APKNAME

  按照這個套路搞好的boot.img刷入系統, 就可以獲取到root許可權了!

相關文章