root 指的是使用戶取得 Android 操作系統(tǒng)的超級(jí)用戶(Super User)許可權(quán)的技術(shù)。用戶通過(guò) root,可以越過(guò)手機(jī)制造商的限制,卸載手機(jī)制造商預(yù)裝在手機(jī)中某些應(yīng)用,以及運(yùn)行一些需要超級(jí)用戶權(quán)限的應(yīng)用程序。同時(shí),root 也可能會(huì)讓手機(jī)變得“不安全”(并不是說(shuō) root 使手機(jī)變得不安全,而是一些用戶的使用習(xí)慣會(huì)使 root 后的手機(jī)變得危險(xiǎn))。
一、基本說(shuō)明
權(quán)限現(xiàn)狀
但是從棉花糖(Android 6.0)開(kāi)始,Google 基本阻止了以前版本中最流行的 root 方法 —— 即,將 su守護(hù)程序 放置到 /system 分區(qū),并在啟動(dòng)時(shí)取得所需的權(quán)限。道高一尺,魔高一丈,于是就出現(xiàn)了 systemless 的 root 方式,因?yàn)樗徊扇∪魏畏绞叫薷?/system 分區(qū)。
刷機(jī)目的
- Android開(kāi)發(fā)調(diào)試需要
- 系統(tǒng)定制與修改
環(huán)境聲明
主要內(nèi)容
基本了解
視頻入門教程
www.bilibili.com/video/BV1Ly…
資源下載
如果設(shè)備跟我的手機(jī)是一致的,可以使用我分享的資源(其它機(jī)型需要自己去收集):
二、設(shè)備解鎖
一般來(lái)說(shuō),在開(kāi)發(fā)者選項(xiàng)中基本都有一個(gè)名為「OEM 解鎖」的選項(xiàng)。除了少部分流入我國(guó)市場(chǎng)的國(guó)外運(yùn)營(yíng)商有鎖機(jī)外,此選項(xiàng)基本都可供用戶開(kāi)啟。
解鎖 Bootloader 后會(huì)立即清空手機(jī)中所有數(shù)據(jù),但這也是很多玩機(jī)操作必經(jīng)的第一步,建議盡早開(kāi)啟。解鎖 Bootloader 還意味著手機(jī)等私密設(shè)備的安全性大大下降,不少?gòu)S商也會(huì)在解鎖政策上附加上不少條款。
一旦你確認(rèn)你的fastboot連接沒(méi)問(wèn)題,即可運(yùn)行解鎖bootloader命令:
fastboot flashing unlock
復(fù)制代碼
或者:
fastboot oem unlock
復(fù)制代碼
你現(xiàn)在應(yīng)該在手機(jī)上看到一個(gè)操作界面,要求你確認(rèn)此操作,使用音量鍵滾動(dòng)選擇和用電源鍵確認(rèn)你是否確定要繼續(xù)。
允許該過(guò)程完成,然后鍵入此命令重啟:
fastboot reboot
復(fù)制代碼
成功解鎖Bootloader!至此解鎖bootloader加載程序后,每次手機(jī)啟動(dòng)時(shí),你都會(huì)見(jiàn)到一條警告,這沒(méi)有什么可擔(dān)心的,這是正常的!
三、刷機(jī)
刷機(jī)包資源
Google Pixel
www.jianshu.com/go-wild?ac=…
以Pixel2 XL 為例:
下載鏈接
下載后的目錄結(jié)構(gòu)為:
刷機(jī)步驟
此處以Pixel2 XL 線刷為例,核心流程為:
- 打開(kāi)設(shè)備調(diào)試模式
- 進(jìn)入到
bootloader 界面
- 執(zhí)行腳本刷機(jī)
打開(kāi)設(shè)備調(diào)試模式
執(zhí)行adb shell 可連接設(shè)備即為成功
進(jìn)入bootloader 界面
方式一
將手機(jī)關(guān)機(jī),同時(shí)按住電源鍵 +減量減 兩個(gè)按鍵,手機(jī)也可進(jìn)入bootloader頁(yè)面下
刷機(jī)前的頁(yè)面為:
方式二
可以鏈接ADB的情況下,執(zhí)行:
adb reboot bootloader
復(fù)制代碼
開(kāi)始刷機(jī)
進(jìn)入終端,CD到當(dāng)前刷機(jī)包目錄下,執(zhí)行:
flash-all.sh
復(fù)制代碼
接下來(lái)就是等待接近兩分鐘的時(shí)間:
四、刷面罩(Magisk)
什么是 Magisk
Magisk 是出自一位臺(tái)灣學(xué)生 @topjohnwu 開(kāi)發(fā)的 Android 框架,是一個(gè)通用的第三方 systemless 接口,通過(guò)這樣的方式實(shí)現(xiàn)一些較強(qiáng)大的功能。Magisk 的厲害之處在于它實(shí)現(xiàn)了一種繞過(guò) SafetyNet 使用 root 的方法。因?yàn)樗粫?huì)以任何方式改變您的system分區(qū)。這意味著您仍然可以安裝官方OTA更新,而不會(huì)丟失root。
功能
比如我們的/system/xbin中沒(méi)有su,我們可以通過(guò)刷入相應(yīng)的模塊,在系統(tǒng)啟動(dòng)初期,將su映射到/system/xbin下來(lái)獲取root
如大家所熟知的替換系統(tǒng)字體、指紋特效、開(kāi)機(jī)動(dòng)畫(huà)等等
支持的版本:Android 5.0+
實(shí)現(xiàn)原理
Magisk 本質(zhì)上是一種文件掛載系統(tǒng),magisk做的事情是通過(guò)boot中創(chuàng)建鉤子,進(jìn)而bind mount構(gòu)建出一個(gè)在system基礎(chǔ)上能夠自定義替換,增加以及刪除的文件系統(tǒng),實(shí)際上并沒(méi)有對(duì) system 分區(qū)進(jìn)行修改(即 systemless 接口,以不觸動(dòng) system 的方式修改 system)。所有操作都在啟動(dòng)的時(shí)候完成,啟動(dòng)過(guò)程中magisk所做的事情:
1.準(zhǔn)備階段,將會(huì)把/data/magisk.img 掛到/magisk。同時(shí)它會(huì)遍歷magisk目錄中的模塊是否為啟用狀態(tài),并且記錄。
2.創(chuàng)建骨架system文件系統(tǒng)(由于bind mount 必須要有一個(gè)目標(biāo)文件才能進(jìn)行bind mount),全部由mkdir 和touch構(gòu)建
3.將每個(gè)標(biāo)記為啟用的/magisk/$MODID/system中文件bind mount到骨架系統(tǒng)
4.執(zhí)行自定義模塊中的腳本
5.遍歷骨架中剩余沒(méi)有被mount的文件,通過(guò)真正的system文件進(jìn)行bind mount。
準(zhǔn)備面罩
從 Magisk 22 開(kāi)始,不再區(qū)分刷寫(xiě)用的 .zip 包與安裝管理器用到的 .apk 應(yīng)用安裝包,二者合一且只有后綴的區(qū)別,默認(rèn)提供 .apk 包,更改后綴為 .zip 后即可被刷寫(xiě)。
資源資源
github.com/topjohnwu/M…
傳輸?shù)皆O(shè)備
adb push Magisk-v24.2.zip /sdcard/Download/
復(fù)制代碼
刷TWRP(Recovery)
資源包
/google/goog…
紅米K20 PRO
使用臨時(shí)TWRP
執(zhí)行命令前需要進(jìn)入到bootloader 界面下,執(zhí)行以下命名即可,執(zhí)行后設(shè)備會(huì)自動(dòng)重啟,最后進(jìn)到TWRP 的菜單下:
fastboot boot ~Downloads/twrp-3.6.0_9-0-raphael.img
復(fù)制代碼
菜單效果:
安裝面罩(Magisk)
菜單路徑:install ->
此處安裝之前存到/sdcard/Download/ 的安裝包,安裝完成
重啟系統(tǒng),打開(kāi)相關(guān)
四、應(yīng)用
Magisk插件介紹
基于magisk可實(shí)現(xiàn)一些自定義的功能,插件就是按得是這個(gè)事情
插件開(kāi)發(fā)
制作教程
www./feed/160569…
模板文件
github.com/Pinkdoge/ma…
ADB Shell操作
掛載system分區(qū)
首先先adb shell 鏈接設(shè)備,再執(zhí)行su 獲取系統(tǒng)權(quán)限,這里還沒(méi)有system 分區(qū)的寫(xiě)入權(quán)限,再執(zhí)行:
#adb shell
#su
mount -o rw,remount /
mount -o rw,remount /system
復(fù)制代碼
此時(shí)就有權(quán)限對(duì)system 分區(qū)進(jìn)行寫(xiě)入啦!
查看保護(hù)文件
系統(tǒng)分區(qū)的文件一般用戶無(wú)法查看,需要以超級(jí)用戶權(quán)限操作,比如:
adb shell su -c 'ls /etc/security/cacerts'
復(fù)制代碼
請(qǐng)求抓包
從Android Nougat開(kāi)始,默認(rèn)情況下,應(yīng)用不再信任用戶證書(shū)。開(kāi)發(fā)人員仍然可以通過(guò)在應(yīng)用程序的AndroidManifest.xml文件中配置networkSecurityConfig屬性來(lái)選擇接受用戶證書(shū),但默認(rèn)情況下,它們不再受信任。
抓包軟件
抓包的基本使用方法就不說(shuō)明了,以下有下載鏈接和配置。
軟件下載鏈接
??Charles-Settings.xml
證書(shū)配置
參考資源
github.com/Magisk-Modu…
github.com/Magisk-Modu…
github.com/NVISOsecuri…
獲取證書(shū)HASH值
openssl x509 -inform PEM -subject_hash_old -in charles-ssl-proxying-certificate.pem | head -1
復(fù)制代碼
生成HASH命名的文件,比如上面生成的Hash值為時(shí),則:
cp charles-ssl-proxying-certificate.pem /etc/security/cacerts/92ac25d5.0
復(fù)制代碼
拷貝數(shù)據(jù)到手機(jī)
adb push 6fbe4e0f.0 /sdcard/Download/6fbe4e0f.0
復(fù)制代碼
拷貝到系統(tǒng)目錄
由于sytem沒(méi)有寫(xiě)入權(quán)限,先參考掛載system分區(qū) ,再執(zhí)行
cp /sdcard/Download/92ac25d5.0 /etc/security/cacerts/92ac25d5.0
chmod 644 /etc/security/cacerts/92ac25d5.0
復(fù)制代碼
最后重啟設(shè)備,確認(rèn)能否正常抓包!
ROOT應(yīng)用
參考
topjohnwu大神的 ROOT操作庫(kù)
github.com/topjohnwu/l…
應(yīng)用
基于此基礎(chǔ)庫(kù),比較容易就實(shí)現(xiàn)ROOT權(quán)限 的操作。
比如,我想實(shí)現(xiàn)一個(gè)快速拷貝證書(shū)到系統(tǒng)目錄的操作,相關(guān)步驟如下:
參考請(qǐng)求抓包
private fun deleteCertificate(sourcePath: String) {
var targetPath = '/system/etc/security/cacerts/' + sourcePath
Shell.cmd(
'su', 'mount -o rw,remount /',
'mount -o rw,remount /system',
'rm -f ${targetPath}',
).submit { result ->
updateUI(
result
)
if (result.isSuccess) {
Logger.log('刪除證書(shū)成功:${sourcePath}')
} else {
Logger.log('刪除證書(shū)失敗:${sourcePath}')
}
}
}
復(fù)制代碼
|