現在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!
所以目前可行的辦法還是修改boot.img.. 昨天在三星的S5(SM-G900I)上, 成功做出來了一個刷機包可以獲取到root許可權. 這種辦法, 針對android 6.0和三星的5.1.1以上都可以.. 當然如果是鎖了bootloader的機器, 那就沒辦法了! 這裡簡單說下步驟.
1. 首先根據機型的型號(SM-G900I)和Model number去下載原版的刷機包. 下載包的時候注意基帶版本和Build number.
2. 下載一個該機型的(SM-G900I)的自定義recovery. 一般CWM 和TWRP都可以. 只需要有完整的busybox工具就行!
https://www.clockworkmod.com/rommanager
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許可權了!