0003Android App漏洞之战(3)——(虚拟机)非root环境下hook、抓包、脱壳
0003Android App漏洞之战(3)——(虚拟机)非root环境下hook、抓包、脱壳
一、前言
近年来随着手机性能的不断增强,逆向分析过程中的三个基本技能:抓包、脱壳、Hook,研究测试人员使用比较多的便是Google系列机型,例如nexus系列、pixel系列,而国产的手机小米、一加也成为热门的测试机,这一切都很多程度上由于手机方便root,root作为众多逆向方法的基础,导致一个手机能否root成为选择的先决条件之一。针对非root手机,当前也存在着相应的解决方案,本文整合网上方法,实现非root环境下的抓包、脱壳、Hook。
本文第二节简单介绍虚拟机基本知识
本文第三节实现脱壳方案
本文第四节实现hook方案
本文第五节实现抓包方案
二、基础知识
在了解手机虚拟机前,我们先看看虚拟化技术和容器化,Android上虚拟化技术应用到VitualBox、BlackBox等上,具体架构如下所示:
传统虚拟机:
虚拟化容器:
两者之前的差异:
每个虚拟化容器相当于一个沙盒,容器与容器之间互不干扰;虚拟化容器作为一个应用级别抽象(进程级),而虚拟机是作为操作系统级别。
而手机虚拟机不断的发展,现在的手机性能完全可以支持手机上运行多个虚拟机,因此虚拟机的研究也在快速发展,比较有代表的就是光速虚拟机、VMOS虚拟机、X8虚拟机等等,当然这些虚拟机也各有差异,下面就让我们简略了解各虚拟机的特点吧。
1.x8虚拟机
这个虚拟机就是一个简易的沙箱,就连官网也是这样描述的:
沙箱机制的原理主要基于Linux系统的UID/GID机制,Android对传统的Linux的UID/GID机制进行了修改。在 Linux 中,一个用户 ID 识别一个给定用户;在 Android 上,一个用户 ID 识别一个应用程序。应用程序在安装时被分配用户 ID,应用程序在设备上的存续期间内,用户 ID 保持不变。其沙箱原理和VM技术类似,具体可以参考VitualBox原理,当然详细的技术原理,大家可以自行去研究。
2.VMOS虚拟机
VMOS虚拟机官网并未给出具体实现的技术细节,经过调研应该是采用了类似anbox技术,anbox技术是一种类似容器的实现方案,即Linux上运行Android系统,通过容器的方式运行,通俗的理解就是Android系统上可以运行Linux,而Linux内核通过Linux命名空间以容器方式运行Android虚拟机,
这里我们看一个Anbox的基本原理图:
上图中可以看出 Anbox Session Manager做了三件事情:
1.虚拟一个Android的sufaceflinger, 就是虚拟Android的图像系统,可以将Android里的不同APP渲染的结构进行图层的合成,使所有APP的渲染结果最终合成在一个窗口上
2.虚拟一个windowmanager,给Android里的APP提供对应的窗口
3.虚拟一个activitymanager,就是管理Android内部的进程的,比如app的启动,关闭等等
Anbox Container Manager则是和容器docker类似,来运行Android的镜像,因此Anbox将Android应用放入到容器中,无需直接访问硬件或数据,所有的硬件访问通过主机上的 anbox 守护进程,由于是直接使用本机的Linux内核,不是通过虚拟化所以导致性能极大提升。
3.光速虚拟机
根据光速虚拟机官网的描述,光速虚拟机是通过Android来实现Android,在安卓用户态实现了一个完整的安卓内核和安卓硬件抽象层
从图中可以看出,光速通过代理虚拟化出了一个完完整的内核抽象层,在Android 内核基础上完整实现了内存管理,进程管理,文件系统和设备管理等安卓内核功能,这样就可以使得其内部运行不依赖手机内核。
4.总结
综合三类虚拟机进行对比,具体的效果如下:
VMOS | VMOS PRO | 光速虚拟机 | X8沙箱 | |
---|---|---|---|---|
内存占用 | 186MB | 233MB | 188MB | 181MB |
提供root | 提供 | 提供 | 提供 | 提供 |
提供XP | 提供 | 提供 | Magisk+Lsposed | 提供 |
提供Play | 提供 | 提供 | 提供 | 无 |
程序兼容 | 差 | 好 | 好 | 好 |
安卓版本 | 5.1.1 | 5.1.1 / 7.1.2/9.0 | 7.1.2 10.0 | 7.1 |
是否含广告 | 是 | 是 | 无 | 视频广告 |
权限要求 | 电话、位置、相机、录音、存储 | 无 | 电话、位置、存储、录音、 | 存储 |
这里也收集了网上用户的使用评价:
VMOS Pro:能白嫖(启动速度比较慢,但这个支持的安卓版本最多)
51/X8虚拟机:要看广告,部分白嫖,功能比上一个少(启动速度第二)
光速虚拟机:暂时无需要付费功能(这个启动最快)光速10.0需要vip
三、非root环境下脱壳实现
1.实验准备
手机虚拟机VMOS + Magisk+反射大师
实验手机:华为Mate10(非root)
2.实验步骤
VMOS可以提供不同版本的Android系统虚拟机,你可以根据需求来使用,这里我们拿Android7.1版来举例实操
开启虚拟机已经支持了Xposed和root权限,我们再安装上wifiadb,就可以十分方便的进行逆向工作了
我们测试一下root权限
然后这里我们使用DITOR的脱壳模块进行快速脱壳
打开模块,我们可以选择动态注入就是Xposed,以及此模块还支持frida注入,但是虚拟机不支持frida,这里我们就选择动态注入
这里我们选择需要脱壳的目标应用,这里就选第一个
然后我们把保存的dex打开
成功的脱壳,这样是不是脱壳工作变得十分简单了
四、非root环境下Hook实现
1.实验准备
手机虚拟机(光速)+Magisk+Xposed
实验手机:华为Mate10(非root)
2.实验步骤
这里我们再换一个虚拟机来操作,上面的VMOS其实已经实现的hook操作
我们可以安装手机虚拟机,例如光遇虚拟机,然后在虚拟机中安装Magisk,安装Xposed,这样我们就可以使用前面功能,还可以应对更多场景
这样是不是一些有Magisk需求的朋友也可以快速的进行使用了,这里我们就直接使用Lsposed,进入仓库选择一个模块
我们直接安装完成,然后再下载某乎应用,我们来测试一下hook效果
首先我们在真机上下载某乎应用,发现每次进去都会有广告:
我们进入虚拟机,然后打开会发现加载知了模块
然后我们进某乎的设置,进行开启模块,这个时候就会发现没有广告了,比如加入标题提示:
Hook前:
Hook后:
是不是感觉Hook功能又好用起来了呢
五、非root环境下抓包实现
很多朋友使用抓包工具,比如Fiddler、Charles、Burpsuit等,我们都知道在Android7.0后,系统只信任根目录下的证书,而以往用户目录下的证书不可信,导致之前的https流量无法抓取,当然针对高版本的Android,不少用户采用抓包应用证书移植到手机的根目录下,比如常用的MoveCertificate模块等,但是这些都基本针对root环境的手机比较容易操作,但是针对非root环境的手机就不是很容易操作了,本文主要讲述网络上另一种非root环境抓包的思路:
VMOS Pro+小黄鸟HttpCanary+MT管理器 实现非root环境下抓包
1.实验准备
VMOS Pro+小黄鸟HttpCanary+MT管理器+QtScrcpy
实验手机:华为Mate10(非root)
这些工具都上传过知识星球:安全后厨,需要朋友前往星球自取
2.实验步骤
(1)真机安装小黄鸟HttpCanay和安卓虚拟机Vmos Pro
这里我们使用投屏软件QtScrcpy来记录本次实验
(2)安装好小黄鸟,在小黄鸟里的设置中,目标应用-指定为VMOSPro
(3)可以手机安装证书,SSL证书设置-选择导出根证书,类型System Trusted (.0); 导出的证书储存路径为:内部储存/HttpCanary/cert/
首次没有安装证书的,可能需要安装一下证书,这里就直接安装就可以了,安装后导出证书
(4)打开虚拟机VMOSPro,新建一个虚拟机,这里可以使用Android7极客版,然后给root权限
(5)导入你要抓包的目标APP(或者apk安装包)+xxxxx.0格式的证书(这个证书就是第3步获取的证书);打开MT文件管理器,刚刚导入的证书自动保存在虚拟机的VMOSfiletransferstatio目录下,将其复制到虚拟机的系统内:/system/etc/security/cacerts/目录下即可
并在虚拟机中安装MT管理器,并打开,并移动证书到右边
(6)在vmospro里安装好小黄鸟,打开,点击开始抓包,会提示安装CA证书,根据提示安装即可,会让你设置锁屏密码
(9)返回真机启动小黄鸟,注意是在真机里抓包,而不是在vmosPRO虚拟机里抓包!!目标应用-设置VMOS-开启抓包 返回虚拟机-启动目标APP 即可在真机抓包了
这里我们虚拟机设置为目标APP为浏览器,这里你可以设置你需要抓包的应用
然后真机中选择目标应用为VMOSPRO开始抓包
可以发现就成功的抓包了,当然我们结合VMOSPro中的Xposed,还可以安装JustMe,可以绕过一般的SSLpining
六、实验总结
本文演示了非root环境下的抓包、脱壳与Hook,这里只是给非root环境手机逆向的一种方案,经过测试实际使用还未达到root环境真机的效能,感兴趣的大家可以自行的探索了,相应的可以关注github:
七、参考文献
https://blog.csdn.net/qq_36383272/article/details/105163579
https://codeantenna.com/a/cnBEw7uwCs
https://developer.aliyun.com/article/767940
https://mabin004.github.io/2019/02/09/itural-APP%E7%A0%94%E7%A9%B6/
https://www.freebuf.com/articles/neopoints/348470.html
https://www.freebuf.com/articles/endpoint/245747.html