📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
今天写一篇教程,讲解如何在Android模拟器上使用Reqable进行流量分析。
01 Android系统证书策略
首先,简单概述下Android系统的证书策略,可以帮助我们更好地分析问题。
在任何一个系统上,都会有一个CA证书管理器,里面内置了绝大多数常用的CA根证书。只有被这些根证书签发的SSL证书才能被系统信任(信任才能使得HTTPS等基于SSL协议的连接正常握手),Android系统也不例外。我们可以在设置中搜索信任的凭据查看系统中所有的证书。
在Android系统上,证书分为两个类型:系统证书和用户证书。系统证书是系统出厂(或OTA)内置的,用户证书是用户自行安装的。
那么,系统证书和用户证书又什么区别呢?
目前Android的系统已经迭代到版本14.0了,对证书机制有一个非常重要的分水岭:Android 7.0。在7.0版本之前(不包括)用户证书和系统证书的权威性是等价的,也就是是系统会无条件信任用户证书。很明显,这可能带来一些安全隐患,所以从7.0开始,Android默认不再信任用户证书了。正常情况下,系统证书用户是没有权限修改(添加或者删除证书文件)的,用户证书则是没有限制的。
对于我们分析Android系统的流量,从Android 7.0开始就有了限制,Reqable/Charles/Fiddler等调试工具的证书安装到用户证书目录无效了,只有安装到系统目录才有效。
严格来说,上面这段话并不是完全正确的。Android系统为了兼容性考虑,如果App的 targetSDKVersion < 24 在Android 7.0+系统上也是可以信任用户证书的。当然,目前绝大多数App的targetSDKVersion都超过24了。
这种限制对于Android开发者而言也是相当不友好的,所以Android额外补充了网络安全配置文件功能,可以支持开发者在App中配置可以信任哪些用户证书。具体配置方式详见这里。
从根本上解决证书问题,唯一可行的方式就是将调试工具的CA证书放到系统目录下,重新编译系统镜像是一种方式,但是粗暴了些。常规的方式还是解锁系统分区,然后手动写入CA证书文件。
02 Android模拟器
前面背景知识科普完了,下面以Android官方模拟器为例,讲解如何使用Reqable进行流量分析。
2.1 模拟器安装
首先下载安装Android Studio,无需梯子,直接下载速度非常快。
安装完成后启动,启动后无需新建项目,点击More Actions -> Virtual Devices Manager,打开模拟器管理器界面。
点击Create virtual Device,打开模拟器列表界面:
Android官方提供了大量的模拟器型号,包括手机、平板、电视、穿戴设备等,我们这里选择创建一个手机模拟器Pixel 6。
注意,请勿选择包含Play Store的型号,无法进行Root操作。不同的系统下,模拟器的架构不一样。例如我这里是MacBook M2,推荐的都是arm64架构的模拟器,性能是最佳的。在Windows x64平台下,推荐的一般都是x64架构的模拟器。
接下来,选择系统版本,然后点击Release Name右边的下载图标下载系统镜像,我们这里以Android 13.0为例。系统镜像下载完成后,点击Next进行下一步。
这一步可以对模拟器进行一些参数配置,例如内存大小、存储空间等,我们忽略这个配置。最后,点击Finish,完成模拟器的创建。
2.2 模拟器启动
注意,这里我们通过命令后启动模拟器而不是通过GUI,因为需要追加启动参数。
首选,配置下Android SDK的环境变量,方便我们使用adb和emulator命令。
export PATH="$PATH:/Users/megatronking/Library/Android/sdk/platform-tools"
export PATH="$PATH:/Users/megatronking/Library/Android/sdk/emulator"
export PATH="$PATH:/Users/megatronking/Library/Android/sdk/tools"
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
这里是MacOS的环境变量配置,Windows略有不同。这里一定要注意PATH的先后顺序,否则模拟器可能无法启动。
接下来,我们使用emulator命令启动模拟器,Pixel_6_API_33是模拟器的名字。我们在Android Studio的Device Manager中可以看到模拟器的名字,将空格替换成下划线即可。
emulator -avd Pixel_6_API_33 -writable-system
如果没有报错的话,我们会看到模拟器启动成功了。
2.3 解锁系统分区
我们需要以root模式运行adb服务,新开一个命令行窗口,输入命令:
adb root
# 输出 restarting adbd as root
禁用secure boot verification,输入命令:
adb shell avbctl disable-verification
# 输出 Successfully disabled verification. Reboot the device for changes to take effect.
remount全部分区,输入命令:
adb remount
# 输出 Using overlayfs for /system
# 输出 Using overlayfs for /vendor
# 输出 Using overlayfs for /product
# 输出 Using overlayfs for /system_ext
# 输出 Now reboot your device for settings to take effect
# 输出 remount succeeded
可以看到system已经解锁了,下面就可以导入CA证书了。
2.4 导入CA证书
我们在Reqable中先导出CA证书,点击左下角下载按钮。
使用下面的命令,将上一步下载的证书导入到模拟器系统证书目录:
adb push reqable-ca.crt /system/etc/security/cacerts/364618e0.0
导入后,我们在模拟器系统的Settings中搜索credential,点击Trusted Credentials检查Reqable的CA证书是否存在于System目录中。
上图表示CA证书已经导入成功了。
03 流量转发
我们需要将Android模拟器的流量转发到PC端的Reqable进行分析,有下面两种方式。
3.1 代理转发
将模拟器的代理配置设置为Reqable的代理服务器地址,点击模拟器右侧功能操作栏最下面的...按钮打开模拟器设置页面。
3.2 VPN转发
在模拟器上安装socksdroid,打开下面的地址下载apk文件。
https://github.com/bndeff/socksdroid/releases/download/1.0.3/socksdroid-1.0.3.apk
将下载好的socksdroid直接拖到模拟器窗口中进行安装,也可以使用adb进行安装。
adb install socksdroid-1.0.3.apk
安装完成后打开socksdroid,配置电脑的IP地址和Reqable代理端口,并启动右上角的开关。
04 流量分析
在Reqable中启动调试,注意这时候无需配置系统代理,因为我们不需要分析电脑的流量。
在模拟器中使用Chrome打开Reqable官网测试下,效果OK。
我们再测试下原生应用,使用Android Studio写个Demo发送个请求试试:
看起来也没有问题,搞定。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】