4、Android模拟器抓包:模拟器代理设置、模拟器证书安装、模拟器流量捕获
好,咱们进入第四章。说实话,模拟器抓包是我个人觉得最「友好」的入门方式。你不需要真机,不需要root,一台电脑加一个模拟器就能搞定。但别小看它——我见过不少老手在模拟器上翻车,原因往往就是证书没装对,或者代理设置漏了一步。
这一章,咱们就手把手把模拟器上的抓包环境搭起来。你跟着走一遍,后面真机上的操作也就一通百通了。
4.1 模拟器代理设置:让流量拐个弯
抓包的第一步,是让模拟器里的所有网络请求都经过你的抓包工具。说白了,就是给模拟器配一个「中间人」。
我个人习惯用 Burp Suite 或 mitmproxy。这里以 Burp Suite 为例,因为它的界面更直观,适合教学。
4.1.1 准备工作:让模拟器和电脑在同一个网络
首先,你得确保模拟器和你的电脑能互相访问。如果你用的是 Android Studio 自带的模拟器,默认它们就在同一个虚拟网络里。但如果你用的是第三方模拟器(比如夜神、雷电),有时候需要手动检查一下网络模式。
我建议你直接用 adb 来确认连通性:
# 查看模拟器设备列表
adb devices
# 进入模拟器的 shell
adb shell
# 测试能否 ping 通你的电脑(电脑 IP 假设是 192.168.1.100)
ping 192.168.1.100
能 ping 通,说明网络没问题。如果 ping 不通,检查一下模拟器的网络设置,改成「桥接模式」或「NAT 模式」。
4.1.2 设置代理:让流量拐到 Burp Suite
接下来,在模拟器的 Wi-Fi 设置里手动配置代理。
- 打开模拟器的「设置」→「Wi-Fi」。
- 长按当前连接的 Wi-Fi(通常是 "AndroidWifi" 或类似名称),选择「修改网络」。
- 勾选「显示高级选项」。
- 将「代理」设置为「手动」。
- 填入你电脑的 IP 地址和 Burp Suite 监听的端口(默认是
8080)。
10.0.2.2(这是模拟器访问宿主机的一个特殊地址)。别问我为什么,Google 就是这么设计的。我第一次用的时候也找了半天。
设置完成后,打开模拟器里的浏览器,随便访问一个 HTTP 网站(比如 http://example.com)。如果 Burp Suite 里出现了请求,说明代理设置成功了。
4.2 模拟器证书安装:让 HTTPS 不再「加密」
代理设置好了,但 HTTPS 流量还是加密的。Burp Suite 虽然能拦截,但模拟器不认它的证书,所以会报错。我们需要把 Burp Suite 的 CA 证书安装到模拟器的系统信任区。
4.2.1 导出 Burp Suite 的 CA 证书
在 Burp Suite 里,找到证书导出功能:
- 打开 Burp Suite,进入 Proxy → Options。
- 找到 Import / Export CA certificate。
- 选择 Export as DER format,保存为
cacert.der。
嗯,这里要注意:DER 格式是二进制的,Android 系统可以直接识别。如果你导出成 PEM 格式,后面还得转换,麻烦。
4.2.2 将证书推送到模拟器
用 adb 把证书文件推送到模拟器的 /sdcard/ 目录:
adb push cacert.der /sdcard/
然后进入模拟器的「设置」→「安全」→「从存储设备安装证书」。找到 cacert.der,点击安装。系统会提示你设置锁屏密码(如果没有的话),按提示操作就行。
4.2.3 验证证书是否安装成功
安装完成后,打开模拟器的浏览器,访问 https://www.baidu.com。如果不再提示证书错误,并且 Burp Suite 里能看到 HTTPS 请求的明文内容,那就说明证书装对了。
我曾经遇到过一个坑:证书明明装了,但 Chrome 还是报错。后来发现是 Chrome 自己有一套证书校验机制,跟系统的不完全一样。解决办法是换用系统浏览器(比如「浏览器」或「WebView」)来测试。
4.3 模拟器流量捕获:从「看见」到「分析」
代理和证书都搞定了,接下来就是真正的流量捕获。但别急着点「开始」,先想清楚你要抓什么。
4.3.1 配置 Burp Suite 的目标范围
默认情况下,Burp Suite 会拦截所有流量,包括系统后台的请求。这会导致日志非常杂乱。我建议你只关注目标应用的流量。
在 Burp Suite 的 Target → Scope 里,添加你要测试的应用的域名或 IP。比如:
api.example.com*.example.com192.168.1.*
然后在 Proxy → Options 里,勾选 Intercept requests based on scope。这样 Burp Suite 就只拦截你关心的流量,其他的一律放行。
4.3.2 开始捕获:启动目标应用
在模拟器里启动你要测试的 App。正常操作,比如登录、刷新列表、提交表单。Burp Suite 的 Intercept 标签页会实时显示每个请求。
你可以:
- Forward:放行请求,让它到达服务器。
- Drop:丢弃请求,模拟网络中断。
- Send to Repeater:把请求发送到 Repeater 模块,方便后续修改和重放。
我个人习惯先把所有请求都 Forward 过去,等收集到足够的数据后,再在 HTTP History 里慢慢分析。
4.3.3 分析流量:找到关键信息
在 HTTP History 里,你可以看到每个请求的详细信息:
- 请求行:方法、URL、协议版本。
- 请求头:Cookie、User-Agent、Authorization 等。
- 请求体:POST 参数、JSON 数据、文件上传内容。
- 响应:状态码、响应头、响应体。
举个例子,如果你抓到一个登录请求,可能会看到类似这样的内容:
POST /api/login HTTP/1.1
Host: api.example.com
Content-Type: application/json
User-Agent: Mozilla/5.0 (Linux; Android 10; Android SDK built for x86)
{"username":"test","password":"123456"}
看到没?用户名和密码直接明文传输。这就是为什么我说 HTTPS 抓包是安全测试的第一步——你永远不知道 App 在背后偷偷传了什么。
4.4 知识体系:模拟器抓包的核心逻辑
为了让你更直观地理解整个流程,我画了一张图。你可以把它当作一个「路线图」:
这张图把整个流程串起来了。你按这个顺序走,基本不会出大问题。
4.5 避坑指南:我踩过的那些坑
最后,分享几个我实际项目中遇到的坑,希望能帮你省点时间。
- 坑一:模拟器时间不对 —— 证书安装后提示「证书已过期」或「尚未生效」。检查一下模拟器的系统时间,如果跟实际时间差太多,证书校验会失败。我建议你直接开启「自动日期和时间」。
- 坑二:Android 7.0+ 的证书限制 —— 用户安装的证书默认不被系统信任。解决办法有两个:要么 root 模拟器后把证书装到系统分区,要么用 VirtualXposed 或 Frida 来 hook 证书校验。后面章节会详细讲。
- 坑三:模拟器网络模式不对 —— 有些模拟器默认是「仅主机模式」,导致模拟器无法访问外网。改成「NAT 模式」或「桥接模式」就能解决。
嗯,差不多就这些了。模拟器抓包是入门,但也是基础。你把这个流程跑熟了,后面真机抓包、SSL Pinning 绕过,都会轻松很多。
公众号:蓝海资料掘金营,微信deep3321