今天写一篇教程,讲解如何在Android模拟器上使用Reqable进行流量分析。
1. 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证书文件。
2. 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证书已经导入成功了。
3. 流量转发
我们需要将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代理端口,并启动右上角的开关。
4. 流量分析
在Reqable中启动调试,注意这时候无需配置系统代理,因为我们不需要分析电脑的流量。
在模拟器中使用Chrome
打开Reqable官网测试下,效果OK。
我们再测试下原生应用,使用Android Studio
写个Demo发送个请求试试:
看起来也没有问题,搞定。
4. 结尾
更多Reqable的使用教程,请查看:
感谢阅读,再见!
原文链接:https://juejin.cn/post/7249623814149406778
作者:MegatronKing
最后
如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。
如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。
全套视频资料:
一、面试合集
二、源码解析合集
三、开源框架合集
欢迎大家一键三连支持,若需要文中资料,直接点击文末CSDN官方认证微信卡片免费领取↓↓↓
