FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。
FreeBuf+小程序把安全装进口袋
1OnePlusx手机一台
2Windows764位系统
3QDLoader-HS-USB_Driver_64bit_Setup
4OnePlus_X_14_A.04_151103
5twrp-3.0.2-0-onyx.img
6nethunter-generic-armhf-kalifs-full-2020.1.zip
7platform-tools_r29.0.6-windows
下文以OPX指代OnePlusx,win7指代Windows764位系统,twrp指代twrp-3.0.2-0-onyx.img
所谓刷机,就是给手机重装系统。把手机当作PC电脑,那么手机上的flash就类比于硬盘。我们把Windows/Linux安装到硬盘,就类似于把Android安装到flash。
比如我们的电脑安装了Windows系统,硬盘分为两个分区,分别是C盘,D盘。flash也类似,分为多个分区(partitions)。把ROM的对应文件刷写到对应的分区,就完成刷机过程。
在刷机之前,先了解一下手机的多种状态,就样机OPX而言,有4种状态,分别是
1Download状态(高通soc才有,通过9008COM通信)
2fastboot状态
3Recovery状态
4AndroidOS状态
刷机有线刷和卡刷两类,线刷是指通过usb线连接手机和电脑,用工具刷rom。而卡刷是指把rom放到手机本地存储或者是SDCard,然后通过Recovery进行刷机。
这四种状态从启动到运行系统之间的关系如下
启动>[Download状态]>fastboot状态>Recovery状态=AndroidOS状态
下文的环境搭建顺序是先通过Download状态刷机,然后在fastboot状态刷twrp,接下来在Recovery状态刷kali,最终正常启动系统
在刷机界常听到一句话是把手机刷成砖,所谓的刷成砖是指fastboot状态,Recovery状态,AndroidOS状态全都进不去。这时对于普通用户,只能通过Download状态刷机。而这个Download状态是高通soc独有的功能。
这一步大多数情况是不需要执行的,笔者抱着学习的态度,尝试了一下通过Download状态刷机。不感兴趣的读者可以直接跳过本章节。
1准备OPX手机一台,USB线一根
4安装QDLoader-HS-USB_Driver_64bit_Setup,并重启电脑
上面的StockFirmwareROM我没找到官方发布渠道,这两个地址提供的ROM我无法保证安全性,刷机请谨慎。
步骤1,连接手机和电脑,按住OPX音量+键,并同时用usb线连接手机和电脑,直到win7设备管理器端口(COM和LPT)中出现QualcommHS-USBQDLoader9008(COMn)
到这里Download状态刷机过程就结束了,这时候,手机flash的所有分区信息都被重置刷入StockFirmwareROM的文件,完全和出厂设置是一样的。
一般来说,厂商自带的recovery功能都比较少,我们想刷入twrp,让我们开始吧!
步骤1关闭手机,按住音量+和开机键,直到手机屏幕显示“FastbootMode”
步骤2通过usb线连接手机和电脑
步骤3进入platform-tools目录,执行命令fastbootdevices
C:\Users\test\Desktop\platform-tools_r29.0.6-windows\platform-tools>fastboot.exedevices1a7c2bf0fastboot有上面的打印则表明fastboot连接正常
步骤4执行命令fastbootoemdevice-info,查看fastboot是否锁定,如果锁定,则需要解锁才能输入twrp
上图表明当前为锁定状态(Deviceunlocked:false),这时输入命令fastbootoemunlock尝试解锁,提示"oemunlockisdisabled"。说明fastboot状态下无法解锁,好在查了资料发现进入氧OS系统的开发者模式,可以解锁fastboot,操作如下
1重新启动设备,进入氧OS
2打开Settings--Aboutphone--Buildnumber点击7次,退出Aboutphone,进入Developeroptions
3使能OEMunlocking
上述操作执行完成后,重新进入fastbootmode,再次执行fastbootoemunlock,此时手机提示解锁会删除用户数据,是否继续,点击yes,手机会重启进入氧系统,重新进入fastbootmode,查看锁定信息,发现解锁成功了
所有一切都准备就绪了,开始刷如twrp吧
我把twrp-3.0.2-0-onyx.img放在桌面c:\Users\test\Desktop\
执行命令fastbootflashrecoveryc:\Users\test\Desktop\twrp-3.0.2-0-onyx.img
Sending'recovery'(14758KB)OKAY[0.583s]Writing'recovery'OKAY[0.277s]Finished.Totaltime:0.873s执行命令fastbootbootc:\Users\test\Desktop\twrp-3.0.2-0-onyx.img,让手机进入twrp,点击Reboot--Recovery,此时会提示你“InstallSuperSUnow?”,拖动图标选择安装,因为后续刷kali需要root权限。手机再次进入Recovery界面,fastboot状态刷twrp这个过程就大功告成了。
点击Reboot--System进入系统,配置好WiFi,此时消息提示SuperSUInstaller,点击进入,选择TWRP,等待下载完成,完成后,选择continue,接下来会启动到recovery安装SuperSU,安装好后会自动重启,进入OOS(氧OS)
至此,twrp已经刷写完成
上述工作完成后,就可以刷入kali了
步骤1关闭手机,长按音量-键和开机键,使手机进入recovery模式
步骤2点击Advanced--ADBSideload,此时手机等待中
步骤3进入platform-tools目录,执行命令adbsideloadc:\Users\test\Desktop\nethunter-generic-armhf-kalifs-full-2020.1.zip(我把nethunter-generic-armhf-kalifs-full-2020.1.zip放在桌面c:\Users\test\Desktop\)
步骤4等待进度完成100%
重启时,显示了酷炫的界面
接下来进入系统后,要配置网络,安装SuperSU
Android平台Kali环境搭建到这里就结束了。接下来探索一下刷机的原理。
无论是Download状态/fastboot状态/Recovery状态,我们刷机都是用到一些工具,简单操作即可,黑客精神让我们不能停留在脚本小子的层面。
我们来看看刷机奥秘是什么
首先我们在开发者选项中使能usb调试,让adb连接手机,进入platform-tools目录,执行adbroot,发现执行失败,接着执行adbshell,此时可以获取一个低级别shell,通过执行命令su,让我们获取rootshell
首先我们看看flash分区情况
root@OnePlus:/dev/block#ls...mmcblk0mmcblk0p1mmcblk0p10mmcblk0p11mmcblk0p12mmcblk0p13mmcblk0p14mmcblk0p15mmcblk0p16mmcblk0p17mmcblk0p18mmcblk0p19mmcblk0p2mmcblk0p20mmcblk0p21mmcblk0p22mmcblk0p23mmcblk0p24mmcblk0p25mmcblk0p26mmcblk0p27mmcblk0p28mmcblk0p29mmcblk0p3mmcblk0p4mmcblk0p5mmcblk0p6mmcblk0p7mmcblk0p8mmcblk0p9接下来我们看看每个分区对应的名称
DDR->/dev/block/mmcblk0p4DRIVER->/dev/block/mmcblk0p22LOGO->/dev/block/mmcblk0p21aboot->/dev/block/mmcblk0p5boot->/dev/block/mmcblk0p7cache->/dev/block/mmcblk0p15config->/dev/block/mmcblk0p26dbi->/dev/block/mmcblk0p3fsc->/dev/block/mmcblk0p18fsg->/dev/block/mmcblk0p17grow->/dev/block/mmcblk0p29misc->/dev/block/mmcblk0p20modem->/dev/block/mmcblk0p1modemst1->/dev/block/mmcblk0p10modemst2->/dev/block/mmcblk0p11oppodycnvbk->/dev/block/mmcblk0p12oppostanvbk->/dev/block/mmcblk0p13pad->/dev/block/mmcblk0p9param->/dev/block/mmcblk0p23persist->/dev/block/mmcblk0p14recovery->/dev/block/mmcblk0p16reserve1->/dev/block/mmcblk0p24reserve2->/dev/block/mmcblk0p25rpm->/dev/block/mmcblk0p6sbl1->/dev/block/mmcblk0p2ssd->/dev/block/mmcblk0p19system->/dev/block/mmcblk0p27tz->/dev/block/mmcblk0p8userdata->/dev/block/mmcblk0p28看到这些分区标签是不是很熟悉,这些文件在StockFirmwareROM大多都存在,在用工具校验时,也有这些提示
那么刷机的过程,应该就是把对应的文件写入分区的过程,而卡刷,线刷的ROM包不一样,也是因为不同刷机模式,对ROM保护的文件及内容以及打包格式是不一样的。
以recovery分区为例,看看是不是我们猜想的这样,验证过程是:dump出recovery分区,把dump出的二进制和twrp镜像做比较,我们预期的效果是两个二进制是一样的。
查看recovery分区大小
root@OnePlus:/dev/block/platform/msm_sdcc.1#cat/proc/partitionsmajorminor#blocksname...1791616384mmcblk0p16...每个block是1k,那么recovery分区是16MB大小,我们把整个recovery分区dump到本地,再通过adb从手机中pull出来
root@OnePlus:/dev/block/platform/msm_sdcc.1#ddif=/dev/block/mmcblk0p16of=/sdcard/recv.dumpbs=1024count=16384C:\Users\test\Desktop\platform-tools_r29.0.6-windows\platform-tools>adb.exepull/sdcard/recv.dump./sdcard/recv.dump:1filepulled,0skipped.3.9MB/s(16777216bytesin4.062s)twrp-3.0.2-0-onyx.img大小为14.4M,共15112192个字节,recv.dump是整个分区大小为16M,经对比发现recv.dump的前15112192字节和twrp-3.0.2-0-onyx.img是完全一样的。
这就印证前面的猜想,即刷机无论是刷recovery还是AndroidROM,都是把对应的二进制写入分区。
接下来我做了一个尝试,把OnePlus_X_14_A.04_151103中的recovery.img通过adb传入手机,在adbshell中,通过dd把recovery.img写入recovery分区
ddif=/sdcard/recovery.imgof=/dev/block/mmcblk0p16关机,进入recovery模式,发现twrp被覆盖回原厂recovery了
我猜想线刷和卡刷的差别在于线刷(Download模式和fastboot模式)的时候没有文件系统概念,只能把文件整个写入分区,只能覆盖原有分区文件。
而卡刷不一样,卡刷是在recovery模式,而这个模式是精简版的linux,recovery是和androidos同级的,在这个模式下,一方面可以直接和线刷一样直接写分区,也可以挂载原有Android文件系统,对android文件系统做增删改,实现升级的目的。
在Recovery状态刷kali过程,其实是一个升级的过程,升级kali的zip包时,会对bootimg做一些改动,安装kali文件系统,安装一些apk包,如NetHunter.apk,NetHunterStore.apk,NetHunterTerminal.apk等,我们使用NetHunter时,应该是chroot到kali文件系统,这时候对于操作者来说,就像在kali环境一样。
Kali的教程网络上非常多,本文就不班门弄斧了。
接下来我用两个例子来演示手机版的kali的使用
演示1:用msf创建一个payload
演示2:修改本机mac地址,然后用nmap做一个端口扫描
首先打开NetHunter应用,点击MACChanger,修改mac地址为aa:bb:cc:dd:ee:ff
接下来打开NetHunterTerminal应用,执行命令nmap-A192.168.1.6(同一个网段的另一台主机)
至此本文结束,笔者水平有限,文中有任何错误,欢迎读者不吝指教