手把手教你搭建完美的 Android 搞机/逆向环境
“
长文警告,阅读本文大概需要 12 分钟。
润色、校对:「夜幕团队 NightTeam」 - Loco
内容过干,请注意喝水补充水分前段时间我把日常用机从华为Mate20 Pro转向了小米10 Pro,所以...我又可以开始搞机了。那么既然我自己手机要搞一搞,不如顺便把这篇被催更已久了的文章给写了吧~正好除了一直催更我的那些想搞Android逆向的朋友以外,还有很多想换手机的朋友问我小米10 Pro怎么搞、能不能搞,这一篇文章就完事了,嘿嘿。
这篇文章分为三个部分,第一部分是给你介绍一下在搞机过程中你会经常看到的名词,第二部分是Magisk(ROOT)+Xposed的环境搭建过程,第三部分是偏日常向的——如何使用高权限来强化你的使用体验。没有体验过高权限状态下的Android或者是只对日常使用相关内容感兴趣的朋友可以直接翻到后面看看。
废话不多说,我们直接开始吧。
先了解一下基本名词
在准备环境前,先来了解一些你至少要知道是个啥的东西。这部分建议看完,要不然你在碰到一些奇怪的问题时可能会懵逼。
Bootloader锁
Bootloader字面意思很明显,就是个引导系统启动的引导程序,那这个锁是什么呢?锁其实是厂商为了普通用户的安全考虑而设下的一个门槛(比如被奸商塞了后门再卖、被恶意诱导进行一些高危操作等),它会在Bootloader引导启动时检测即将被启动的东西(recovery.img / boot.img)的签名是否是厂商的,如果不是的话就拒绝启动。
也就是说,你不解了这个锁,是无法进行刷机操作的。
提示:如果是日常用机,并且你担心出现安全问题的话,完全可以在准备完环境之后再把BL锁给锁上,只要你不怕出现突然需要改东西之类的情况或者后面直接就解不了BL锁的情况(此处点名批评华为)。
Recovery
Recovery相当于是以前那种Windows PE U盘,我们能通过它像使用Ghost进行重装系统(直接恢复镜像到指定分区)一样刷机。
因为是读取闪存(以前的SD卡)中的刷机包进行刷机的,所以在这里进行刷机操作通常又被称为“卡刷”。
通常每个厂商都会自己搞一套Recovery,而部分厂商会因为自己的用户群体中大多是不懂技术的普通用户,而将自己的Recovery做成一个必须要依靠自家应用配合的傻瓜式工具,这种情况你多半是不能使用它刷一些第三方的东西进去的,只能替换掉。
第三方Recovery(如TWRP)通常功能特别多,能做到很多原厂Recovery做不到的事情,加上前面提到的问题...所以其实我们搞机前直接替换掉原厂的就好了。
手机的OTA功能也是通过Recovery进行安装更新包的,有些厂商的原厂系统更新包会有一些骚操作,所以如果你用了第三方Recovery之后无法正常更新系统的话,可以刷回原厂Recovery再更新(反正环境搭好之后你就基本不用进这里了)。
Fastboot
Fastboot是一个与Bootloader进行通信的工具,它与ADB类似,但比ADB更底层。它相当于一些主板上较为高级的UEFI(可以理解成比操作系统更底层的操作系统),我们也能通过它来进行刷机。
因为Fastboot是需要连接电脑,让电脑提供刷机包的,所以在这里进行刷机操作通常又被称为“线刷”。
它可以被用来替换Recovery,所以如果你把Recovery玩挂了也没关系,只要你能进Fastboot就还是可以救回来。如果连Fastboot都挂了的话,你就只能指望像高通9008模式之类的东西了。而如果你的手机没有这种东西的话...那就只能送回厂重刷闪存,或者...当砖头砸核桃用了。
高通9008模式
9008模式学名叫Qualcomm HS-USB QDLoader 9008,是一个SoC级的调试接口。即使你的系统挂了、Recovery和Fastboot也都挂了,你也还是可以通过它来将手机恢复到正常状态;即使你没有解BL锁,你也能把System分区换个底朝天。
但是这种SoC级的调试接口属于大杀器,不到万不得已时尽量不要使用,以免手贱。
OTA
OTA没啥好介绍的,就是更新系统用的。
前面讲Recovery的时候提到了一个小坑点,这里再说个第三方ROM的小坑点吧。有些第三方ROM是所谓的“官改”,也就是那种基于厂商原厂系统进行魔改的系统,这些ROM中有些会告诉你无法进行OTA更新,原因其实就是厂商做了签名校验,改过的系统过不了校验自然只能每次都手动更新(注意只是有些)。
System分区
字面意思,系统分区,里面包含了操作系统本身(官方的说法是Android 框架)和系统应用。也就是说,在这里面跟系统一起运行的,都是具有高权限的。
像Magisk、Xposed这种东西,都是需要装到System分区中去的。
System分区在解BL锁获取高权限前无法进行操作,同样也是为了安全考虑。
这里再扩展一下,有些手机的系统应用特别多,而且正常无法删除,这种情况下别人通常会告诉你获取ROOT权限后再进行卸载。这其实就是前面讲的权限问题,用户的正常权限比系统要低,所以自然就无法进行卸载操作了。
A/B分区
A/B分区会有两份系统和引导程序的分区,一份给你使用,一份作为备用。这个功能主要是为了OTA更新时能做到在手机开机状态下后台安装系统更新,使用户只需要重启一下手机就能直接进入新版本的系统,可以极大地提升用户体验。
同时,A/B分区还可以防止出现用户误操作搞挂系统的情况,因为即使搞挂了也还是有另一个分区的系统可以使用,稳定性更高。
但是这玩意对搞机来说就有点烦人了,有些使用了A/B分区的手机(比如essential phone),你在准备环境或刷ROM时需要对两个分区都操作一次,否则就会出现OTA一下环境全没了的情况。
全盘加密 / 加密分区
全盘加密是一个能让用户在手机遗失的情况下不泄露数据的功能,现在高版本的Android都是默认开启了全盘加密的。
如果你已经进入过一次系统并设置了锁屏密码,那么你可能会在后续进入Recovery时看到一个“分区已加密,请输入密码”之类的提示,这时候你只需要输入锁屏密码就可以解锁了。
ADB
ADB全名叫Android调试桥,是一个系统级的命令行工具,需要进入系统后才能使用。
ADB的功能非常多,像常用的复制文件、重启/关机、打开手机的shell、查看activity、安装/卸载app、开启/关闭设备管理员功能、截屏、录屏、模拟点击/滑动等操作都可以通过ADB来实现。
一般来说,如果是日常用机,并且没有特殊需求的话,建议平时将ADB关闭掉,以免出现插了什么奇怪的设备导致设备被黑掉之类的情况。
Xposed
Xposed是一个Hook框架,简单来说就是可以在不修改APP本身的情况下影响程序的运行效果。它有一个模块的概念,你可以通过Xposed实现一些魔改,达到各种高度定制化和一些APP原本无法做到的效果。
Xposed原作者Rovo89目前已经弃坑,不过没关系,开源社区中继承原版Xposed大任的各种框架目前可以说是百花齐放的状态,像比较知名的EdXposed、XPatch、太极(太极本身是闭源的,但它的Hook框架Epic是开源的)之类的都可以选择使用。
下面提供一张各Xposed框架对比列表以供参考(图片来源自:https://www.v2ex.com/t/646108,原作者不明):
Magisk
Magisk是一个类似于Xposed但功能和实现方式与Xposed截然不同的框架,它自带ROOT功能,并且可以让APP检测不了你的手机是否有被魔改。
碰到有检测ROOT、检测系统完整性、检测是否通过Google的SafetyNet认证的情况时,只需要使用Magisk的Hide功能就能轻松将你手机已被魔改的事实隐藏起来,对某些银行类APP有奇效。
Magisk与Xposed一样,也有模块的概念,你也可以通过它实现一些魔改,达到各种高度定制化和原本无法做到的效果。
SafetyNet
SafetyNet是Google搞的一个用来检测设备是否ROOT过,设备运行环境是否安全等东西的功能,或者说...服务?在Google Play的设置中有个Play保护机制认证,这东西有一部分检测就是依靠SafetyNet来做的。
有些第三方APP也会通过SafetyNet来做到增强反作弊、反盗版功能的效果,虽然其实没什么卵用...像Netflix、Pokémon Go如果检测到SafetyNet不通过,就直接不让你用了;Google Play如果检测到SafetyNet不通过,部分APP就不让你搜到和下载了(比如Netflix)。
双清/三清/四清
双清就是清除Data、Cache两个分区,这个操作会导致你在系统刷好后安装的普通APP通通被清空,但并不会清空sdcard中的数据(也就是你日常存文件的那个目录),相当于恢复出厂设置。
三清就是在双清的基础上把Dalvik Cache也给清了,某些特定场景下可以解决程序崩溃的问题。
四清通常指的是在三清的基础上连System分区也给清了,这会导致你的系统彻底消失,类似于在电脑上把系统盘格式化了一样,通常并不需要进行这个操作。
引导循环(卡LOGO)
有时候你刷了一些不兼容的包到手机上时,可能会出现开机时一直卡在LOGO界面,或是LOGO动画过了之后黑屏一下又一直重复前面的动画的情况。
这其实是因为无法正常引导进入系统导致的,这种情况通常我们可以通过Recovery刷入卸载包或手动删除指定文件的方式来解决。
实际碰到这种情况时,得具体问题具体分析,没有通用的解决办法。
环境搭建
了解完基本的名词之后,我们就可以开始搭建搞机环境了~
解BL锁
首先当然是解BL锁了,要不然我们什么都做不了。这东西的话,各厂商有各厂商的解锁方式,自行搜索相关资料或者询问官方客服即可。(华为之类官方不提供解锁方式并且把路都给你封死的无解)
解锁完之后一般会自动重启,顺手初始化一下系统设置然后开一下开发者选项和它里面的ADB开关吧。
打开开发者选项
通常是在系统信息中多次点击系统版本后就可以打开了,如果没打开的话可以自行搜索 手机型号或系统(UI)名 所对应的开启方式。
打开ADB
在开发者选项中找到调试相关设置,打开ADB功能(USB调试)和ADB安装应用选项(USB安装)。
更换Recovery
找到对应机型的TWRP(一个非常知名的开源Recovery),下载好之后把手机连上电脑,然后进入Fastboot模式。
由于我们刚刚已经打开了ADB,所以可以直接在命令行中输入 adb reboot bootloader
直接进入Fastboot模式,就不用关机、按音量键+电源键之类的麻烦操作了。
提示:输入后命令行卡在那很正常,稍等几秒手机重启后就会恢复了。
进入Fastboot模式后,输入fastboot flash recovery example.img
就可以刷入刚刚下好的TWRP包了。(注意自行更改文件名)
提示:刷完之后不会自动重启,看命令行提示Finished了就行。
接着我们需要进入Recovery中,与前面进入Fastboot时类似,我们同样可以通过命令直接进入,输入fastboot reboot recovery
即可 。
进入Recovery之后,如果不出意外的话,你应该会看到这样的一个界面:
正常进入TWRP提示:在手机连着电脑的情况下,TWRP可以将sdcard目录使用MTP模式开放给电脑查看,就和我们在Android系统中连接电脑时选择了”传输文件“选项时一样。此功能一般默认开启,所以只要你没拔掉线,应该就能在电脑上看到手机的文件了。
在进入Recovery后,可能会出现下面这两个界面:
这个直接拖动滑块允许修改即可。
这个是前面说过的全盘加密,直接输入锁屏密码即可。
ROOT(Magisk)
保持着上一步的状态,在Magisk的官方Github仓库中下载最新版本编译好的包,然后把电脑上下好的包传到手机的sdcard目录中。
接着,进入TWRP的安装(install)页面,选中刚刚准备好的Magisk的包,刷入它,然后重启。
⚠多图警告⚠
重启进入系统后,我们应该会看到一个叫Magisk Manager的APP(如果没有的话,可以自行在Magisk的官方Github仓库中下载并安装)。这个APP是用来管理Magisk的,里面可以进行ROOT授权、SafetyNet检测、隐藏Magisk和ROOT、安装/管理Magisk模块(不同于Xposed模块)之类的操作。
打开Magisk Manager后如果看到“Magisk已是最新版本”、“已安装:xxxx”就说明你的Magisk已经安装成功了。
Xposed(EdXposed)
由于Xposed作者Rovo89已经弃坑,后续的新版本Android都只有第三方的Xposed了,目前最接近原版Xposed的第三方版本是EdXposed,当然也有一些别的免解BL锁就能用的通过注入或容器方式实现的Xposed框架。但是既然都解锁了,为什么要用那些“阉割版”呢?
在EdXposed的官方Github仓库中的说明里可以看到,在安装前需要先装一个名为Riru-Core的东西。
这个Riru-Core是一个Magisk模块,所以我们直接打开Magisk Manager APP,搜索Riru,找到作者名为Rikka的Riru-Core并安装。
然后就是EdXposed本身了,EdXposed同样也被做成了Magisk模块,所以我们与前面的操作一样,搜索EdXposed并安装就可以了。
这里需要注意的是,EdXposed是有多个版本的,分别是使用了YAHFA的版本和SandHook的版本,两个版本功能上没有差异,只是换了Hook框架而已,可以自行选择。不会选的话就默认SandHook吧,用不了再卸了换另一个。
安装好模块后,我们还需要安装一个叫EdXposed Manager的东西,这个东西和Magisk Manager相似,是用来管理Xposed的。
提示:这东西类似于以前的Xposed Installer,但按EdXposed官方GitHub仓库中的说明来看,Xposed Installer已经停更了,官方推荐使用EdXposed Manager,所以直接装它吧。
安装EdXposed Manager
还是老样子,在官方Github仓库中下载好最新版本的EdXposed Manager,然后一个adb install example.apk
直接解决(注意自行改名)。
现在,我们的Xposed环境就准备好了,重启一下手机使EdXposed生效吧。
重启后打开EdXposed Manager,如果显示“EdXposed框架已激活”,那么恭喜你,你的Xposed已经安装成功了。
如果你不幸碰上了EdXposed已安装但未激活或是卡LOGO的情况,可以去EdXposed官方GitHub仓库的issues里搜索一下你的手机型号,或许已经有解决方案了。如果没有的话,也可以自己新开一个issue咨询一下开发者。
小结
那么到了这里,你应该已经拥有正常运行的Magisk和Xposed了,接下来你就可以利用它们带来的高权限开始玩一些骚操作了。
使用高权限强化日常使用体验
小米、一加这类方便解BL锁、操作空间更大的手机的好处在于:你可以用Magisk、Xposed等工具轻松做到很多原本系统和APP不能做的事情。
因此,不管你用的东西原本的设计有多么反人类(点名批评张小龙的“克制”导致微信没有进行群聊分组的问题),你也能用高权限把它给改造得更合理、更方便使用。
下面是一些我日常使用中能大幅提升使用体验的东西,有兴趣的朋友可以了解一下。
存储空间隔离 / 存储重定向(Magisk)
存储重定向是个好东西,它能让所有APP都老老实实的,不会在sdcard目录中满地拉屎,强烈推荐使用!!!
在Google Play上直接搜索存储重定向就可以找到了,安装好APP后还需要在Magisk Manager中安装Riru-Core和Riru本体,老样子操作一下就好了。
使用后的效果:
这东西需要注意的就是配置可能会要花点时间,建议将微信图片目录之类的都加到模板中,这样多个APP间共享文件时就直接勾上就好了。
记得配置好了备份一下哦,手贱一下全部重设什么的...你应该不会想要体验。
XPrivacyLua(Xposed)
权限控制神器,可以在允许权限的情况下给APP返回假数据,避免流氓APP不给权限就直接退出。结合存储重定向还可以有效解决一些统计SDK的用户跟踪/分析导致的隐私/广告问题。
钉钉助手(Xposed)
这个也是个好东西,虚拟定位打卡什么的(滑稽),实测管理端后台检测不到。不过我现在已经把钉钉扔车机上,搞成自动打卡了,所以手机上也没必要装它了。
QQ净化(Xposed)
可以隐藏掉手机QQ里像QQ看点之类的各种乱七八糟的功能,看着会清爽很多。
QX模块(Xposed)
反撤回、防止被戳、快速搜索并发送表情包、转发语音什么的,很舒服。(防止被戳可有效解决“小学生”一直私聊戳一戳你导致手机一直震的问题)
微X模块(Xposed)
群聊分组、自动免打扰新群聊、一键群发公告、朋友圈分组查看、朋友圈关键词屏蔽、反撤回、快速搜索并发送表情包、转发语音/名片、多窗口阅读文章、首页加悬浮按钮一键扫码等各种操作,太舒服了,用了就回不去。(√日常教张小龙做微信)
微信群消息助手(Xposed)
一个功能没微X那么丰富,但简单粗暴效果好的群聊分组助手。
云村清洁工(Xposed)
类似于QQ净化,隐藏各种乱七八糟的功能。虽然网易云音乐的Google Play版很干净,但有些功能限制不太爽,还是直接上Xposed模块来解决比较方便。
MagiskHide Props Config(Magisk)
用来解决部分手机在开启了Magisk Hide之后仍然无法通过SafetyNet的问题。
如果是 ctsProfile 这一项没有通过,那说明你的 ROM 没有通过其兼容性测试,一些 beta 版本或者国内厂商的 ROM 可能出现这种问题。这时我们下载使用 MagiskHide Props Config 这个模块往往能够解决问题。
Location Report Enabler(Magisk)
用来开启Google的一些在中国大陆被屏蔽掉的服务,比如位置记录、Google时间线等。
相关资源
由于存在更新的可能性,所以这些东西放到自动回复中,你可以发送消息【搞机环境搭建】到公众号【NightTeam】获取本文相关下载链接、资料等。
夜幕团队成立于 2019 年,团队包括崔庆才(静觅)、周子淇(Loco)、陈祥安(CXA)、唐轶飞(大鱼|BruceDone)、冯威(妄为)、蔡晋(悦来客栈的老板)、戴煌金(咸鱼)、张冶青(MarvinZ)、韦世东(Asyncins|奎因)和文安哲(sml2h3)。
涉猎的编程语言包括但不限于 Python、Rust、C++、Go,领域涵盖爬虫、深度学习、服务研发、逆向工程、软件安全等。团队非正亦非邪,只做认为对的事情,请大家小心。
好文和朋友一起看~