手把手教你搭建完美的 Android 搞機(jī)/逆向環(huán)境
“
長文警告,閱讀本文大概需要 12 分鐘。
潤色、校對:「夜幕團(tuán)隊(duì) NightTeam」 - Loco
內(nèi)容過干,請注意喝水補(bǔ)充水分前段時(shí)間我把日常用機(jī)從華為Mate20 Pro轉(zhuǎn)向了小米10 Pro,所以...我又可以開始搞機(jī)了。那么既然我自己手機(jī)要搞一搞,不如順便把這篇被催更已久了的文章給寫了吧~正好除了一直催更我的那些想搞Android逆向的朋友以外,還有很多想換手機(jī)的朋友問我小米10 Pro怎么搞、能不能搞,這一篇文章就完事了,嘿嘿。
這篇文章分為三個(gè)部分,第一部分是給你介紹一下在搞機(jī)過程中你會經(jīng)常看到的名詞,第二部分是Magisk(ROOT)+Xposed的環(huán)境搭建過程,第三部分是偏日常向的——如何使用高權(quán)限來強(qiáng)化你的使用體驗(yàn)。沒有體驗(yàn)過高權(quán)限狀態(tài)下的Android或者是只對日常使用相關(guān)內(nèi)容感興趣的朋友可以直接翻到后面看看。
廢話不多說,我們直接開始吧。
先了解一下基本名詞
在準(zhǔn)備環(huán)境前,先來了解一些你至少要知道是個(gè)啥的東西。這部分建議看完,要不然你在碰到一些奇怪的問題時(shí)可能會懵逼。
Bootloader鎖
Bootloader字面意思很明顯,就是個(gè)引導(dǎo)系統(tǒng)啟動(dòng)的引導(dǎo)程序,那這個(gè)鎖是什么呢?鎖其實(shí)是廠商為了普通用戶的安全考慮而設(shè)下的一個(gè)門檻(比如被奸商塞了后門再賣、被惡意誘導(dǎo)進(jìn)行一些高危操作等),它會在Bootloader引導(dǎo)啟動(dòng)時(shí)檢測即將被啟動(dòng)的東西(recovery.img / boot.img)的簽名是否是廠商的,如果不是的話就拒絕啟動(dòng)。
也就是說,你不解了這個(gè)鎖,是無法進(jìn)行刷機(jī)操作的。
提示:如果是日常用機(jī),并且你擔(dān)心出現(xiàn)安全問題的話,完全可以在準(zhǔn)備完環(huán)境之后再把BL鎖給鎖上,只要你不怕出現(xiàn)突然需要改東西之類的情況或者后面直接就解不了BL鎖的情況(此處點(diǎn)名批評華為)。
Recovery
Recovery相當(dāng)于是以前那種Windows PE U盤,我們能通過它像使用Ghost進(jìn)行重裝系統(tǒng)(直接恢復(fù)鏡像到指定分區(qū))一樣刷機(jī)。
因?yàn)槭亲x取閃存(以前的SD卡)中的刷機(jī)包進(jìn)行刷機(jī)的,所以在這里進(jìn)行刷機(jī)操作通常又被稱為“卡刷”。
通常每個(gè)廠商都會自己搞一套Recovery,而部分廠商會因?yàn)樽约旱挠脩羧后w中大多是不懂技術(shù)的普通用戶,而將自己的Recovery做成一個(gè)必須要依靠自家應(yīng)用配合的傻瓜式工具,這種情況你多半是不能使用它刷一些第三方的東西進(jìn)去的,只能替換掉。
第三方Recovery(如TWRP)通常功能特別多,能做到很多原廠Recovery做不到的事情,加上前面提到的問題...所以其實(shí)我們搞機(jī)前直接替換掉原廠的就好了。
手機(jī)的OTA功能也是通過Recovery進(jìn)行安裝更新包的,有些廠商的原廠系統(tǒng)更新包會有一些騷操作,所以如果你用了第三方Recovery之后無法正常更新系統(tǒng)的話,可以刷回原廠Recovery再更新(反正環(huán)境搭好之后你就基本不用進(jìn)這里了)。
Fastboot
Fastboot是一個(gè)與Bootloader進(jìn)行通信的工具,它與ADB類似,但比ADB更底層。它相當(dāng)于一些主板上較為高級的UEFI(可以理解成比操作系統(tǒng)更底層的操作系統(tǒng)),我們也能通過它來進(jìn)行刷機(jī)。
因?yàn)镕astboot是需要連接電腦,讓電腦提供刷機(jī)包的,所以在這里進(jìn)行刷機(jī)操作通常又被稱為“線刷”。
它可以被用來替換Recovery,所以如果你把Recovery玩掛了也沒關(guān)系,只要你能進(jìn)Fastboot就還是可以救回來。如果連Fastboot都掛了的話,你就只能指望像高通9008模式之類的東西了。而如果你的手機(jī)沒有這種東西的話...那就只能送回廠重刷閃存,或者...當(dāng)磚頭砸核桃用了。
高通9008模式
9008模式學(xué)名叫Qualcomm HS-USB QDLoader 9008,是一個(gè)SoC級的調(diào)試接口。即使你的系統(tǒng)掛了、Recovery和Fastboot也都掛了,你也還是可以通過它來將手機(jī)恢復(fù)到正常狀態(tài);即使你沒有解BL鎖,你也能把System分區(qū)換個(gè)底朝天。
但是這種SoC級的調(diào)試接口屬于大殺器,不到萬不得已時(shí)盡量不要使用,以免手賤。
OTA
OTA沒啥好介紹的,就是更新系統(tǒng)用的。
前面講Recovery的時(shí)候提到了一個(gè)小坑點(diǎn),這里再說個(gè)第三方ROM的小坑點(diǎn)吧。有些第三方ROM是所謂的“官改”,也就是那種基于廠商原廠系統(tǒng)進(jìn)行魔改的系統(tǒng),這些ROM中有些會告訴你無法進(jìn)行OTA更新,原因其實(shí)就是廠商做了簽名校驗(yàn),改過的系統(tǒng)過不了校驗(yàn)自然只能每次都手動(dòng)更新(注意只是有些)。
System分區(qū)
字面意思,系統(tǒng)分區(qū),里面包含了操作系統(tǒng)本身(官方的說法是Android 框架)和系統(tǒng)應(yīng)用。也就是說,在這里面跟系統(tǒng)一起運(yùn)行的,都是具有高權(quán)限的。
像Magisk、Xposed這種東西,都是需要裝到System分區(qū)中去的。
System分區(qū)在解BL鎖獲取高權(quán)限前無法進(jìn)行操作,同樣也是為了安全考慮。
這里再擴(kuò)展一下,有些手機(jī)的系統(tǒng)應(yīng)用特別多,而且正常無法刪除,這種情況下別人通常會告訴你獲取ROOT權(quán)限后再進(jìn)行卸載。這其實(shí)就是前面講的權(quán)限問題,用戶的正常權(quán)限比系統(tǒng)要低,所以自然就無法進(jìn)行卸載操作了。
A/B分區(qū)
A/B分區(qū)會有兩份系統(tǒng)和引導(dǎo)程序的分區(qū),一份給你使用,一份作為備用。這個(gè)功能主要是為了OTA更新時(shí)能做到在手機(jī)開機(jī)狀態(tài)下后臺安裝系統(tǒng)更新,使用戶只需要重啟一下手機(jī)就能直接進(jìn)入新版本的系統(tǒng),可以極大地提升用戶體驗(yàn)。
同時(shí),A/B分區(qū)還可以防止出現(xiàn)用戶誤操作搞掛系統(tǒng)的情況,因?yàn)榧词垢銙炝艘策€是有另一個(gè)分區(qū)的系統(tǒng)可以使用,穩(wěn)定性更高。
但是這玩意對搞機(jī)來說就有點(diǎn)煩人了,有些使用了A/B分區(qū)的手機(jī)(比如essential phone),你在準(zhǔn)備環(huán)境或刷ROM時(shí)需要對兩個(gè)分區(qū)都操作一次,否則就會出現(xiàn)OTA一下環(huán)境全沒了的情況。
全盤加密 / 加密分區(qū)
全盤加密是一個(gè)能讓用戶在手機(jī)遺失的情況下不泄露數(shù)據(jù)的功能,現(xiàn)在高版本的Android都是默認(rèn)開啟了全盤加密的。
如果你已經(jīng)進(jìn)入過一次系統(tǒng)并設(shè)置了鎖屏密碼,那么你可能會在后續(xù)進(jìn)入Recovery時(shí)看到一個(gè)“分區(qū)已加密,請輸入密碼”之類的提示,這時(shí)候你只需要輸入鎖屏密碼就可以解鎖了。
ADB
ADB全名叫Android調(diào)試橋,是一個(gè)系統(tǒng)級的命令行工具,需要進(jìn)入系統(tǒng)后才能使用。
ADB的功能非常多,像常用的復(fù)制文件、重啟/關(guān)機(jī)、打開手機(jī)的shell、查看activity、安裝/卸載app、開啟/關(guān)閉設(shè)備管理員功能、截屏、錄屏、模擬點(diǎn)擊/滑動(dòng)等操作都可以通過ADB來實(shí)現(xiàn)。
一般來說,如果是日常用機(jī),并且沒有特殊需求的話,建議平時(shí)將ADB關(guān)閉掉,以免出現(xiàn)插了什么奇怪的設(shè)備導(dǎo)致設(shè)備被黑掉之類的情況。
Xposed
Xposed是一個(gè)Hook框架,簡單來說就是可以在不修改APP本身的情況下影響程序的運(yùn)行效果。它有一個(gè)模塊的概念,你可以通過Xposed實(shí)現(xiàn)一些魔改,達(dá)到各種高度定制化和一些APP原本無法做到的效果。
Xposed原作者Rovo89目前已經(jīng)棄坑,不過沒關(guān)系,開源社區(qū)中繼承原版Xposed大任的各種框架目前可以說是百花齊放的狀態(tài),像比較知名的EdXposed、XPatch、太極(太極本身是閉源的,但它的Hook框架Epic是開源的)之類的都可以選擇使用。
下面提供一張各Xposed框架對比列表以供參考(圖片來源自:https://www.v2ex.com/t/646108,原作者不明):

Magisk
Magisk是一個(gè)類似于Xposed但功能和實(shí)現(xiàn)方式與Xposed截然不同的框架,它自帶ROOT功能,并且可以讓APP檢測不了你的手機(jī)是否有被魔改。
碰到有檢測ROOT、檢測系統(tǒng)完整性、檢測是否通過Google的SafetyNet認(rèn)證的情況時(shí),只需要使用Magisk的Hide功能就能輕松將你手機(jī)已被魔改的事實(shí)隱藏起來,對某些銀行類APP有奇效。
Magisk與Xposed一樣,也有模塊的概念,你也可以通過它實(shí)現(xiàn)一些魔改,達(dá)到各種高度定制化和原本無法做到的效果。
SafetyNet
SafetyNet是Google搞的一個(gè)用來檢測設(shè)備是否ROOT過,設(shè)備運(yùn)行環(huán)境是否安全等東西的功能,或者說...服務(wù)?在Google Play的設(shè)置中有個(gè)Play保護(hù)機(jī)制認(rèn)證,這東西有一部分檢測就是依靠SafetyNet來做的。
有些第三方APP也會通過SafetyNet來做到增強(qiáng)反作弊、反盜版功能的效果,雖然其實(shí)沒什么卵用...像Netflix、Pokémon Go如果檢測到SafetyNet不通過,就直接不讓你用了;Google Play如果檢測到SafetyNet不通過,部分APP就不讓你搜到和下載了(比如Netflix)。
雙清/三清/四清
雙清就是清除Data、Cache兩個(gè)分區(qū),這個(gè)操作會導(dǎo)致你在系統(tǒng)刷好后安裝的普通APP通通被清空,但并不會清空sdcard中的數(shù)據(jù)(也就是你日常存文件的那個(gè)目錄),相當(dāng)于恢復(fù)出廠設(shè)置。
三清就是在雙清的基礎(chǔ)上把Dalvik Cache也給清了,某些特定場景下可以解決程序崩潰的問題。
四清通常指的是在三清的基礎(chǔ)上連System分區(qū)也給清了,這會導(dǎo)致你的系統(tǒng)徹底消失,類似于在電腦上把系統(tǒng)盤格式化了一樣,通常并不需要進(jìn)行這個(gè)操作。
引導(dǎo)循環(huán)(卡LOGO)
有時(shí)候你刷了一些不兼容的包到手機(jī)上時(shí),可能會出現(xiàn)開機(jī)時(shí)一直卡在LOGO界面,或是LOGO動(dòng)畫過了之后黑屏一下又一直重復(fù)前面的動(dòng)畫的情況。
這其實(shí)是因?yàn)闊o法正常引導(dǎo)進(jìn)入系統(tǒng)導(dǎo)致的,這種情況通常我們可以通過Recovery刷入卸載包或手動(dòng)刪除指定文件的方式來解決。
實(shí)際碰到這種情況時(shí),得具體問題具體分析,沒有通用的解決辦法。
環(huán)境搭建
了解完基本的名詞之后,我們就可以開始搭建搞機(jī)環(huán)境了~
解BL鎖
首先當(dāng)然是解BL鎖了,要不然我們什么都做不了。這東西的話,各廠商有各廠商的解鎖方式,自行搜索相關(guān)資料或者詢問官方客服即可。(華為之類官方不提供解鎖方式并且把路都給你封死的無解)
解鎖完之后一般會自動(dòng)重啟,順手初始化一下系統(tǒng)設(shè)置然后開一下開發(fā)者選項(xiàng)和它里面的ADB開關(guān)吧。
打開開發(fā)者選項(xiàng)
通常是在系統(tǒng)信息中多次點(diǎn)擊系統(tǒng)版本后就可以打開了,如果沒打開的話可以自行搜索 手機(jī)型號或系統(tǒng)(UI)名 所對應(yīng)的開啟方式。
打開ADB
在開發(fā)者選項(xiàng)中找到調(diào)試相關(guān)設(shè)置,打開ADB功能(USB調(diào)試)和ADB安裝應(yīng)用選項(xiàng)(USB安裝)。
更換Recovery
找到對應(yīng)機(jī)型的TWRP(一個(gè)非常知名的開源Recovery),下載好之后把手機(jī)連上電腦,然后進(jìn)入Fastboot模式。
由于我們剛剛已經(jīng)打開了ADB,所以可以直接在命令行中輸入?adb reboot bootloader?直接進(jìn)入Fastboot模式,就不用關(guān)機(jī)、按音量鍵+電源鍵之類的麻煩操作了。
提示:輸入后命令行卡在那很正常,稍等幾秒手機(jī)重啟后就會恢復(fù)了。
進(jìn)入Fastboot模式后,輸入fastboot flash recovery example.img就可以刷入剛剛下好的TWRP包了。(注意自行更改文件名)

提示:刷完之后不會自動(dòng)重啟,看命令行提示Finished了就行。
接著我們需要進(jìn)入Recovery中,與前面進(jìn)入Fastboot時(shí)類似,我們同樣可以通過命令直接進(jìn)入,輸入fastboot reboot recovery即可 。

進(jìn)入Recovery之后,如果不出意外的話,你應(yīng)該會看到這樣的一個(gè)界面:
正常進(jìn)入TWRP提示:在手機(jī)連著電腦的情況下,TWRP可以將sdcard目錄使用MTP模式開放給電腦查看,就和我們在Android系統(tǒng)中連接電腦時(shí)選擇了”傳輸文件“選項(xiàng)時(shí)一樣。此功能一般默認(rèn)開啟,所以只要你沒拔掉線,應(yīng)該就能在電腦上看到手機(jī)的文件了。

在進(jìn)入Recovery后,可能會出現(xiàn)下面這兩個(gè)界面:

這個(gè)直接拖動(dòng)滑塊允許修改即可。

這個(gè)是前面說過的全盤加密,直接輸入鎖屏密碼即可。
ROOT(Magisk)
保持著上一步的狀態(tài),在Magisk的官方Github倉庫中下載最新版本編譯好的包,然后把電腦上下好的包傳到手機(jī)的sdcard目錄中。
接著,進(jìn)入TWRP的安裝(install)頁面,選中剛剛準(zhǔn)備好的Magisk的包,刷入它,然后重啟。
?多圖警告?



重啟進(jìn)入系統(tǒng)后,我們應(yīng)該會看到一個(gè)叫Magisk Manager的APP(如果沒有的話,可以自行在Magisk的官方Github倉庫中下載并安裝)。這個(gè)APP是用來管理Magisk的,里面可以進(jìn)行ROOT授權(quán)、SafetyNet檢測、隱藏Magisk和ROOT、安裝/管理Magisk模塊(不同于Xposed模塊)之類的操作。
打開Magisk Manager后如果看到“Magisk已是最新版本”、“已安裝:xxxx”就說明你的Magisk已經(jīng)安裝成功了。

Xposed(EdXposed)
由于Xposed作者Rovo89已經(jīng)棄坑,后續(xù)的新版本Android都只有第三方的Xposed了,目前最接近原版Xposed的第三方版本是EdXposed,當(dāng)然也有一些別的免解BL鎖就能用的通過注入或容器方式實(shí)現(xiàn)的Xposed框架。但是既然都解鎖了,為什么要用那些“閹割版”呢?
在EdXposed的官方Github倉庫中的說明里可以看到,在安裝前需要先裝一個(gè)名為Riru-Core的東西。
這個(gè)Riru-Core是一個(gè)Magisk模塊,所以我們直接打開Magisk Manager APP,搜索Riru,找到作者名為Rikka的Riru-Core并安裝。

然后就是EdXposed本身了,EdXposed同樣也被做成了Magisk模塊,所以我們與前面的操作一樣,搜索EdXposed并安裝就可以了。
這里需要注意的是,EdXposed是有多個(gè)版本的,分別是使用了YAHFA的版本和SandHook的版本,兩個(gè)版本功能上沒有差異,只是換了Hook框架而已,可以自行選擇。不會選的話就默認(rèn)SandHook吧,用不了再卸了換另一個(gè)。
安裝好模塊后,我們還需要安裝一個(gè)叫EdXposed Manager的東西,這個(gè)東西和Magisk Manager相似,是用來管理Xposed的。
提示:這東西類似于以前的Xposed Installer,但按EdXposed官方GitHub倉庫中的說明來看,Xposed Installer已經(jīng)停更了,官方推薦使用EdXposed Manager,所以直接裝它吧。
安裝EdXposed Manager
還是老樣子,在官方Github倉庫中下載好最新版本的EdXposed Manager,然后一個(gè)adb install example.apk直接解決(注意自行改名)。
現(xiàn)在,我們的Xposed環(huán)境就準(zhǔn)備好了,重啟一下手機(jī)使EdXposed生效吧。
重啟后打開EdXposed Manager,如果顯示“EdXposed框架已激活”,那么恭喜你,你的Xposed已經(jīng)安裝成功了。

如果你不幸碰上了EdXposed已安裝但未激活或是卡LOGO的情況,可以去EdXposed官方GitHub倉庫的issues里搜索一下你的手機(jī)型號,或許已經(jīng)有解決方案了。如果沒有的話,也可以自己新開一個(gè)issue咨詢一下開發(fā)者。

小結(jié)
那么到了這里,你應(yīng)該已經(jīng)擁有正常運(yùn)行的Magisk和Xposed了,接下來你就可以利用它們帶來的高權(quán)限開始玩一些騷操作了。
使用高權(quán)限強(qiáng)化日常使用體驗(yàn)
小米、一加這類方便解BL鎖、操作空間更大的手機(jī)的好處在于:你可以用Magisk、Xposed等工具輕松做到很多原本系統(tǒng)和APP不能做的事情。
因此,不管你用的東西原本的設(shè)計(jì)有多么反人類(點(diǎn)名批評張小龍的“克制”導(dǎo)致微信沒有進(jìn)行群聊分組的問題),你也能用高權(quán)限把它給改造得更合理、更方便使用。
下面是一些我日常使用中能大幅提升使用體驗(yàn)的東西,有興趣的朋友可以了解一下。
存儲空間隔離 / 存儲重定向(Magisk)
存儲重定向是個(gè)好東西,它能讓所有APP都老老實(shí)實(shí)的,不會在sdcard目錄中滿地拉屎,強(qiáng)烈推薦使用?。?!
在Google Play上直接搜索存儲重定向就可以找到了,安裝好APP后還需要在Magisk Manager中安裝Riru-Core和Riru本體,老樣子操作一下就好了。
使用后的效果:

這東西需要注意的就是配置可能會要花點(diǎn)時(shí)間,建議將微信圖片目錄之類的都加到模板中,這樣多個(gè)APP間共享文件時(shí)就直接勾上就好了。
記得配置好了備份一下哦,手賤一下全部重設(shè)什么的...你應(yīng)該不會想要體驗(yàn)。
XPrivacyLua(Xposed)
權(quán)限控制神器,可以在允許權(quán)限的情況下給APP返回假數(shù)據(jù),避免流氓APP不給權(quán)限就直接退出。結(jié)合存儲重定向還可以有效解決一些統(tǒng)計(jì)SDK的用戶跟蹤/分析導(dǎo)致的隱私/廣告問題。

釘釘助手(Xposed)
這個(gè)也是個(gè)好東西,虛擬定位打卡什么的(滑稽),實(shí)測管理端后臺檢測不到。不過我現(xiàn)在已經(jīng)把釘釘扔車機(jī)上,搞成自動(dòng)打卡了,所以手機(jī)上也沒必要裝它了。
QQ凈化(Xposed)
可以隱藏掉手機(jī)QQ里像QQ看點(diǎn)之類的各種亂七八糟的功能,看著會清爽很多。
QX模塊(Xposed)
反撤回、防止被戳、快速搜索并發(fā)送表情包、轉(zhuǎn)發(fā)語音什么的,很舒服。(防止被戳可有效解決“小學(xué)生”一直私聊戳一戳你導(dǎo)致手機(jī)一直震的問題)
微X模塊(Xposed)
群聊分組、自動(dòng)免打擾新群聊、一鍵群發(fā)公告、朋友圈分組查看、朋友圈關(guān)鍵詞屏蔽、反撤回、快速搜索并發(fā)送表情包、轉(zhuǎn)發(fā)語音/名片、多窗口閱讀文章、首頁加懸浮按鈕一鍵掃碼等各種操作,太舒服了,用了就回不去。(√日常教張小龍做微信)
微信群消息助手(Xposed)
一個(gè)功能沒微X那么豐富,但簡單粗暴效果好的群聊分組助手。
云村清潔工(Xposed)
類似于QQ凈化,隱藏各種亂七八糟的功能。雖然網(wǎng)易云音樂的Google Play版很干凈,但有些功能限制不太爽,還是直接上Xposed模塊來解決比較方便。
MagiskHide Props Config(Magisk)
用來解決部分手機(jī)在開啟了Magisk Hide之后仍然無法通過SafetyNet的問題。
如果是 ctsProfile 這一項(xiàng)沒有通過,那說明你的 ROM 沒有通過其兼容性測試,一些 beta 版本或者國內(nèi)廠商的 ROM 可能出現(xiàn)這種問題。這時(shí)我們下載使用 MagiskHide Props Config 這個(gè)模塊往往能夠解決問題。
Location Report Enabler(Magisk)
用來開啟Google的一些在中國大陸被屏蔽掉的服務(wù),比如位置記錄、Google時(shí)間線等。
相關(guān)資源
由于存在更新的可能性,所以這些東西放到自動(dòng)回復(fù)中,你可以發(fā)送消息【搞機(jī)環(huán)境搭建】到公眾號【NightTeam】獲取本文相關(guān)下載鏈接、資料等。
夜幕團(tuán)隊(duì)成立于 2019 年,團(tuán)隊(duì)包括崔慶才(靜覓)、周子淇(Loco)、陳祥安(CXA)、唐軼飛(大魚|BruceDone)、馮威(妄為)、蔡晉(悅來客棧的老板)、戴煌金(咸魚)、張冶青(MarvinZ)、韋世東(Asyncins|奎因)和文安哲(sml2h3)。
涉獵的編程語言包括但不限于 Python、Rust、C++、Go,領(lǐng)域涵蓋爬蟲、深度學(xué)習(xí)、服務(wù)研發(fā)、逆向工程、軟件安全等。團(tuán)隊(duì)非正亦非邪,只做認(rèn)為對的事情,請大家小心。
好文和朋友一起看~