购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 移动设备环境准备

1.3.1 刷机

在安卓逆向的学习中,提及基础一定不能错过刷机,而在刷机之前,一定要准备一台测试机,这里笔者推荐Google官方的Nexus系列和Pixel系列的测试机。之所以推荐Google原生系统,是因为Google官方不仅提供了镜像,而且在对应的源码网站上能够找到相应镜像的全部源码,在国内Android市场,比如华为、小米等公司实际上都魔改了Android系统,但均未开源,其在测试过程中总会与Android官方源码有所差异,导致出现各种各样的问题,因此笔者更加推荐Google官方推出的手机。笔者在这本书中选择了Nexus 5X,读者如选择其他型号的手机,仅供参考。

在拿到测试机后要完成刷机,首先需要打开手机的“开发者选项”,具体步骤如下:

进入“设置”页面,点击“系统”,然后点击“关于手机”,进入“关于手机”界面,如图1-8所示。

图1-8 进入“关于手机”界面

连续多次点击“版本号”所在View,直到屏幕提示已进入“开发者模式”,如图1-9所示。

在出现页面提示“已处于开发者模式”后返回上一级目录,也就是进入“系统”界面,此时会出现“开发者选项”,点击“开发者选项”,如图1-10所示。

图1-9 打开“开发者模式”

图1-10 进入“开发者选项”界面

在进入“开发者选项”界面后,首先打开“USB调试”。在这个选项打开后,使用USB线连接计算机,手机端就会出现“允许USB调试吗?”对话框,如图1-11所示。

图1-11 请求允许USB调试

在同意USB调试之前和之后使用adb devices命令的结果如下:

再次回到Android测试机上,此时还有一个“OEM解锁”选项需要允许,如图1-12所示。这个选项决定了后续能否完成刷机,也就是刷机中常听到的Bootloader锁。

此时,在计算机的终端上执行命令adb reboot bootloader或者将手机关机后同时按住手机电源键与音量减键,进入Bootloader界面。OEM未解锁之前的Bootloader界面,如图1-13所示。

图1-12 请求允许“OEM解锁”

图1-13 OEM未解锁之前的Bootloader界面

保持手机使用USB线连接上计算机,再次在计算机终端中运行fastboot oem unlock命令,然后测试机就会弹出确认界面,此时按音量减键直至选中YES选项后按电源键,至此,OEM锁就成功解锁了。如图1-14所示为解锁后的Bootloader界面。

图1-14 OEM已解锁的Bootloader界面

在OEM解锁后,一个完整的可供刷机的手机就准备完成了,此时如果要刷入新的特定系统,就要准备刷机包。这里的刷机包其实也可以叫作官方镜像包,Google官方提供了一个官方镜像的站点(网址:https://developers.google.com/android/images),笔者这里下载Nexus 5X的对应刷机包,由于Android 8.1.0_r1这个版本的系统支持的设备比较多,因此在这里笔者选择这个版本的系统进行演示。Android 8.1.0_r1对应代号为OPM1.171019.011,版本与代号对应关系的网址为https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds,在找到代号后,再次回到官方镜像站下载对应版本的镜像。

在下载完毕后,解压刷机包并进入刷机包目录,同时手机进入Bootloader界面并使用USB线连接上主机,然后直接运行flash.sh文件。对应步骤如下:

之后,手机系统便会进入初始化界面,在完成语言、WiFi等相关的设置后,一台“新”的测试机就诞生了。当然,为了方便后续测试,此时还需要再次打开“开发者选项”以获取USB调试许可。

如图1-15所示,在联网之后会发现测试机系统时间与计算机时间不对应,且页面提示“此WLAN网络无法访问互联网”。此时可以通过以下命令解决这个问题,在命令运行结束后,待测试机重新开机后便会发现问题消失。

图1-15 WLAN网络无法访问互联网及时间不同步问题

1.3.2 ROOT

上一小节中,我们已经完成了Nexus 5X版本的刷机工作,此时获得的是一个全新的没有做任何操作的新机。开启测试机的开发者模式后,打开USB调试按钮,此时就可以使用ADB连接手机了。在这一节中将演示对Nexus 5X进行Root的过程。具体步骤如下:

要进行ROOT,首先需要将TWRP刷入Recovery分区。

TWRP(Team Win Recovery Project)是一个开放源码软件的定制Recovery映像,供基于安卓的设备使用,允许用户向第三方安装固件和备份当前的系统,通常在Root系统时安装。而Recovery指的是一种可以对安卓机内部的数据或系统进行修改的模式(类似于Windows PE或DOS),也指Android的Recovery分区。

由于笔者使用的是TWRP的官方镜像文件,这里提供TWRP对应的官方网址:https://twrp.me/Devices。在进入该网址后,选择对应型号的设备和相应版本的IMG镜像文件,比如这里先单击LG进入LG厂商的设备列表,选择LG Nexus 5X(bullhead),然后在Download Link这里选择对应的美版或者欧版,此处选择美版,也就是Primary(Americas),具体需要读者参考自己的手机类型进行选择。下载完成后,就可以选择不同版本的twrp-3.3.0-0-bullhead.img下载了,这里选择3.3.0版本的TWRP。

下载完毕后,如果在Nexus系列的手机上,还需要将TWRP刷入Recovery分区:使设备进入Bootloader界面,并使用Fastboot工具将TWRP镜像刷入Recovery分区。

在进入Bootloader界面后,按音量上下键直到页面出现Recovery mode字符串后,使用电源键确认进入Recovery恢复模式,这时就进入TWRP的界面了。

在进行步骤04之前,还需要使用adb命令将Root工具推送到测试机的/sdcard目录下。Root工具可以选择Magisk或者SuperSU,这里以Magisk为例。先从GitHub上Magisk的仓库的Release中下载新版的ZIP文件,网址为https://github.com/topjohnwu/Magisk/releases。注意选择Magisk,而不是Magisk Manager,笔者写作本书时,新版为Magisk-v20.4.zip。

如图1-16所示,在进入TWRP界面后,首先滑动最下方的按钮Swipe to Allow Modifications进入TWRP主界面。然后单击Install,此时会默认进入/sdcard目录,滑到最下方就能看到刚刚推送到手机上的Magisk-v20.4.zip。

图1-16 TWRP界面

如图1-17所示,单击Magisk-v20.4.zip,进入Install Zip界面,滑动Swipe to confirm Flash滑块,开始刷Magisk的流程,然后静待界面下方出现两个按钮,即代表Root完毕。

图1-17 刷Magisk

单击Reboot System按钮,重新启动系统,会发现手机应用中多了一个Magisk Manager,此时在Terminal中进入adb shell终端,输入su,会发现手机界面提示Root申请,单击“允许”后,手机的shell即可获得Root权限,如图1-18所示。命令执行结果如下:

至此,就完成了手机的Root工作。当然,使用SuperSU对设备进行Root的操作也是类似的,仅仅是将Magisk.zip换成SuperSU.zip而已,这里给出SuperSU的官方网址:https://supersuroot.org/。注意SuperSU的Root和Magisk的Root是冲突的,在进行SuperSU的Root之前,先要将Magisk卸载掉,这里的卸载不是简单地卸载Magisk Manger这个App,而是在Magisk Manger的主界面单击“卸载”按钮,从而还原原厂镜像,在还原后,就可以愉快地使用SuperSU进行Root了,如图1-19所示。

图1-18 Root申请

图1-19 卸载Magisk

1.3.3 Kali NetHunter刷机

为什么要在刷入官方镜像且Root完成的Android测试机上再次刷入Kali NetHunter呢?

正如桌面端的Kali是专为安全人员设计的Linux定制版操作系统,Kali NetHunter也是第一个针对Nexus移动设备的开源Android渗透测试平台,刷入这个系统有利于逆向开发人员更加深入地理解Android系统,无论是在后面章节中使用Kali NetHunter直接从网卡获取手机全部流量,还是在刷入Kali NetHunter后,逆向人员都可经由Kali NetHunter直接执行原本在桌面端Kali上可以执行的一切命令。比如htop、jnettop等在第1章中介绍的所有命令,这些命令原生的Android是不支持的。另外,随着Kali NetHunter的刷入,逆向人员便可以凭借它从内核的层面去监控App,比如通过strace命令直接跟踪所有的系统调用,任何App都没有办法绕过这一方式,毕竟从本质上来说,任何一个App都可以当作Linux中的一个进程。而之所以可以从内核层面去监控App,是因为安装的Kali NetHunter和Android系统共用了同一个内核。可以说,Kali NetHunter值得每一个Android逆向人员所拥有。

另外,由于Kali NetHunter对Android修改的主要是关于Android内核方面的内容,这些修改对平时日常的使用几乎不会产生任何影响,比如Xposed这个Hook工具依旧可以在Kali NetHunter上正常使用,这大大缩减了逆向人员进行测试的成本。

接下来进入刷入环节。

首先,下载SuperSU以及适配于Nexus 5X版本的Kali NetHunter,注意这里的SuperSU是ZIP格式而不是APK格式,同时不要使用SuperSU官网给出的新版SuperSU工具,而使用SuperSU-SR5版。另外,Kali NetHunter官网给出的2020.04版本的Kali NetHunter有Bug,笔者这里下载的是2020.03版。在官网下载Kali NetHunter时,会发现Nexus 5X的设备只支持Oreo版本,而Oreo是Android 8的代号,恰好和之前刷入的手机镜像一致。

在刷入Kali NetHunter之前,还需要对手机进行Root操作。这里由于Magisk进行Root的方式实际上是“假”Root(读者有兴趣可自行研究),因此笔者选择SuperSU进行Root。而在安装SuperSU之前,由于Magisk和SuperSU是不兼容的,因此先按照1.3.1节的步骤重新刷入一个新的镜像。

在重新进行刷机后,打开开发者模式与USB调试功能并确认手机已连接上计算机。然后在主机上使用adb命令将SuperSU-v2.82-201705271822.zip和下载的Kali NetHunter推送到Android设备上。

依据1.3.2节的步骤重新刷入并进入TWRP界面,单击Install按钮,然后选择SuperSU这个文件,刷入并重启,从而使得系统再次获得Root权限,具体操作如图1-20所示。

图1-20 刷入SuperSU

重启后,进入Shell确认获得Root权限。

最后,重新进入TWRP,按照同样的步骤刷入Kali NetHunter,这个过程可能会很长。最终刷入Kali NetHunter并成功重启后,Kali NetHunter界面展示如图1-21所示。

此时,不仅桌面壁纸发生了变化,打开设置页面进入“关于手机”界面,发现Android内核也发生了变更,刷之前是谷歌团队编译的内核,刷之后变成了re4son@nh-hernel-builder编译的内核,如图1-22所示。

图1-21 Kali NetHunter界面展示

图1-22 Kali NetHunter刷之前和刷之后的内核对比

从官方文档来看,这个内核是在标准安卓内核的基础上打补丁的产物,主要对网络功能、WiFi驱动、SDR无线电、HID模拟键盘等功能在内核层面添加支持和驱动,打开模块和驱动加载支持等。利用这个定制内核,普通的安卓手机就可以进行诸如外接无线网卡使用Aircrack-ng工具箱进行无线渗透,模拟鼠标键盘进行HID BadUSB攻击,模拟CDROM直接利用手机绕过计算机开机密码,一键部署Mana钓鱼热点等功能。

当然,这些与我们进行安卓App的逆向好像关系不是很大,我们真正关心的是Kali NetHunter镜像的刷入相当于在安卓手机中安装了一个完整的Linux环境。

在App层面,从图1-21可以看到手机上多出了NetHunter、NetHunter-Kex、NetHunter终端等App。

这里NetHunter终端其实就是一个终端程序,可以选择ANDROID SU进入手机的终端或者选择Kali模式。对应之前所说的完整的Linux环境,此时通过NetHunter终端App执行各种Kali中可以执行的命令,比如apt安装命令、jnettop查看网卡速率、ifconfig查看IP地址等,这里展示apt命令,如图1-23所示。

当然,要使用其他NetHunter相关的App,比如图1-22展示的NetHunter终端,需要先打开NetHunter App并允许所有申请的权限,在App进入主界面后,打开App侧边栏,选择Kali Chroot Manager就会自动安装上Kali Chroot。在安装完毕后,单击START KALI CHROOT启动Chroot,便可以愉快地使用NetHunter-Terminal和NetHunter-Kex了,详细步骤如图1-24所示。

图1-23 Terminal命令展示

图1-24 Kali Chroot配置

此时不仅可以通过手机上的NetHunter终端运行各种Android原本不支持的Linux命令,甚至觉得手机界面过小时,可以通过SSH连接手机最终在计算机上操作手机。具体关于SSH的配置,可以打开NetHunter这个App,打开侧边栏,选择Kali Services,然后勾选RunOnChrootStart,并且选中SSH按钮来设置,具体操作流程如图1-25所示。这个时候如果计算机和手机在同一内网中,就可以愉快地使用计算机上的终端进行SSH连接了。

图1-25 NetHunter开启SSH

在打开SSH后,根据笔者手机的IP 192.168.50.129,最终使用计算机连接手机的效果如下:

但可惜的是,Kali NetHunter仅支持Nexus系列以及OnePlus One系列的部分手机机型,这实在是一大遗憾。 rX1BeF5IQ5x2wWuRu1U32YJa3DlurbL1urQW1MctxD4iwiBrFVaXc2h4KpL6yX1t

点击中间区域
呼出菜单
上一章
目录
下一章
×