安卓7.0+模拟器HTTPS抓包:Burp证书系统级安装与Mumu配置实战

安卓7.0+模拟器HTTPS抓包:Burp证书系统级安装与Mumu配置实战

1. 项目概述:一次典型的移动端安全测试环境搭建

今天想聊聊一个在移动应用安全测试中,几乎每个从业者都会遇到,但又常常被各种小问题卡住的经典场景:如何在安卓7.0及以上版本的模拟器中,配置Burp Suite进行HTTPS流量抓包。这个需求听起来简单,不就是装个证书、配个代理吗?但实际操作过的人都知道,从安卓7.0开始,系统对用户安装证书的信任策略收紧,导致很多“老方法”失效,尤其是在模拟器环境下,网络配置、证书安装路径、系统权限环环相扣,一步错就可能导致整个抓包流程失败。我最近在复现一个移动端应用的漏洞时,就重新完整地走了一遍这个流程,用的环境是Mumu模拟器和Burp Suite。整个过程下来,感觉有必要把其中的关键步骤、踩过的坑以及一些确保成功的小技巧系统地记录下来,这不仅仅是“能抓包”,更是要“稳定、可靠地抓包”,为后续的动态测试、参数篡改、漏洞挖掘打好基础。

对于安全测试人员、移动应用开发者和对应用通信安全感兴趣的朋友来说,掌握这套环境搭建方法是基本功。它让你能透视应用与服务器之间的数据交换,无论是分析API接口、测试逻辑漏洞,还是检查敏感信息传输,都离不开它。下面,我就以“Burp + Mumu模拟器 + 安卓7.0+”这个组合为例,拆解整个配置过程的核心思路、实操细节和排错心法。

2. 环境整体设计与核心思路解析

2.1 为什么是Burp + Mumu模拟器?

在移动端抓包领域,工具链的选择很多,比如Fiddler、Charles、Reqable等。我首选Burp Suite,原因在于它不仅仅是一个抓包工具,更是一个功能强大的Web应用安全测试平台。一旦代理设置成功,后续的拦截、重放、扫描、Intruder爆破等功能都能无缝对接,这对于安全测试的完整性至关重要。而选择Mumu模拟器(网易MuMu模拟器),则主要出于对安卓高版本兼容性和稳定性的考虑。Mumu对安卓7.0、8.0乃至更高版本的支持相对较好,图形性能稳定,且网络桥接模式配置清晰,不像某些模拟器在主机与模拟器网络互通上存在玄学问题。

这里有一个核心思路需要明确:我们的目标是将模拟器内的所有网络流量(特别是HTTPS)导向运行在主机上的Burp代理,并由Burp出示的证书完成HTTPS解密。这涉及到三个层面的配置:主机Burp代理设置、模拟器网络代理设置、以及模拟器系统对Burp证书的信任。安卓7.0是一个分水岭,在此版本之前,用户将CA证书安装到“用户凭据”存储区,大多数应用就会信任。但7.0之后,应用默认不再信任用户安装的CA证书,除非应用本身在网络安全配置中明确声明。因此,我们的方案必须绕过或解决这个限制。

2.2 核心方案选型:系统级证书安装

面对安卓7.0+的证书信任限制,通常有几种思路:

  1. 修改应用本身:给目标APK添加网络安全性配置,让其信任用户证书。但这需要反编译、重打包,不适合测试第三方应用或快速测试。
  2. 使用JustTrustMe等Xposed模块:在已Root的模拟器中安装Xposed框架及JustTrustMe模块,可以绕过证书固定(SSL Pinning)和系统证书信任验证。这是一个强大的方案,但涉及Root和框架安装,步骤较多,且在高版本安卓上兼容性是个挑战。
  3. 将Burp证书安装为系统证书:这是最彻底、最通用的方法。在已Root的模拟器中,将Burp的CA证书直接放入系统证书存储目录(/system/etc/security/cacerts/),系统会将其视为厂商预置证书,所有应用(包括那些设置了严格网络安全策略的应用)都会无条件信任。

对于追求稳定和通用性的渗透测试环境搭建,我倾向于方案三。它一劳永逸,配置成功后,后续测试任何应用都无需再为证书问题烦恼。当然,这需要模拟器具备Root权限。幸运的是,像Mumu这类模拟器,通常提供开启Root权限的选项,这为我们实施该方案提供了可能。因此,本次实践的核心路径确定为:开启Mumu Root权限 → 从Burp导出证书 → 转换证书格式 → 推送至模拟器系统证书目录 → 配置模拟器代理指向Burp。

3. 实操前的关键准备与要点解析

3.1 环境与工具清单

工欲善其事,必先利其器。开始操作前,请确保你已准备好以下环境:

  • 主机(你的电脑)

    • 操作系统:Windows 10/11 或 macOS。本文以Windows为例,macOS思路一致,路径和命令稍有不同。
    • Burp Suite:Professional或Community版均可。确保已安装并可以正常启动。建议使用相对较新的版本(如2024.x)。
    • Java环境:Burp Suite依赖Java,确保已安装合适版本的JRE或JDK。
    • ADB工具:Android Debug Bridge。这是与模拟器或真机通信的桥梁。通常Android SDK里包含,也可以单独下载。将其所在目录(如platform-tools)添加到系统的PATH环境变量中,方便在任意命令行调用。
    • OpenSSL工具:用于证书格式转换。可以从官网下载Windows版,或者使用Git Bash、WSL等自带OpenSSL的环境。
  • 模拟器

    • 网易MuMu模拟器:建议从官网下载最新版本。安装时,注意选择安装路径,避免中文和空格。
    • 模拟器设置:在模拟器设置中,找到并开启“Root权限”。这是后续操作的关键前提。

3.2 Burp Suite代理配置要点

启动Burp Suite后,第一件事是正确配置代理监听器(Proxy Listener)。

  1. 进入Proxy->Options标签页。
  2. Proxy Listeners部分,确保有一个监听器在运行。默认通常是监听本机(127.0.0.1)的8080端口。检查其状态是否为“Running”。
  3. 这里有个关键细节:为了让模拟器能访问到主机的Burp代理,监听地址不能只是127.0.0.1。因为127.0.0.1代表“本机”,在模拟器看来,它自己的本机不是你的物理主机。
    • 你需要将监听地址改为你的主机在局域网中的IP地址,或者直接改为0.0.0.0(表示监听所有网络接口)。改为0.0.0.0更为简单通用。
    • 操作:选中默认监听器,点击“Edit”,在“Bind to address”下拉框中选择“All interfaces”或直接输入0.0.0.0,端口保持8080(或其他你喜欢的端口,确保没被占用)。
  4. 点击“OK”保存。此时,Burp的代理服务就在主机的8080端口上对所有网络接口开放了。

注意:将监听器绑定到0.0.0.0意味着同一局域网内的其他设备也能连接到你的Burp代理,会带来一定的安全风险。在测试完成后,建议改回仅监听127.0.0.1,或者直接关闭Burp。

4. 分步实操:从证书导出到系统植入

4.1 第一步:从Burp Suite导出CA证书

要让模拟器信任Burp,首先需要获取Burp的根证书(CA Certificate)。

  1. 在主机浏览器中,访问http://burp。是的,就是这个地址。确保你的浏览器代理已设置为Burp(通常首次使用Burp时会自动配置浏览器插件或系统代理,如果没设置,手动将浏览器代理指向127.0.0.1:8080)。
  2. 页面加载后,点击“CA Certificate”按钮,下载证书文件。默认会下载一个名为cacert.der的文件。这是一个DER格式的证书。
  3. 我们需要将其转换为PEM格式,并生成系统证书所需的特定文件名。将下载的cacert.der放到一个方便操作的目录,比如D:\burp_cert

4.2 第二步:转换证书格式与计算哈希

安卓系统证书存储区要求证书文件以特定的哈希值加.0的扩展名命名。我们需要用OpenSSL来完成这个转换和计算。

  1. 打开命令行终端(CMD或PowerShell),切换到证书所在目录。
    cd D:\burp_cert
  2. 将DER格式证书转换为PEM格式:
    openssl x509 -inform DER -in cacert.der -out cacert.pem
    执行后会生成cacert.pem文件。
  3. 计算PEM证书的哈希值,并以此命名:
    openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -1
    这条命令会输出一个8位的十六进制字符串,例如9a5ba575。这就是证书的哈希值。

    实操心得-subject_hash_old参数是关键。安卓系统使用的是旧式哈希算法。使用-subject_hash(新算法)生成的哈希可能不被系统识别,导致证书安装无效。这是第一个容易踩的坑。

  4. 将PEM证书重命名为哈希值加.0的形式:
    copy cacert.pem 9a5ba575.0
    (请将9a5ba575替换为你自己命令输出的实际哈希值)。现在我们就得到了系统证书文件9a5ba575.0

4.3 第三步:配置Mumu模拟器网络代理

接下来,需要让模拟器的网络流量走向Burp。

  1. 启动Mumu模拟器,并确保已在设置中开启了Root权限。
  2. 查询主机的局域网IP地址。在Windows命令行输入ipconfig,找到“无线局域网适配器 WLAN”或“以太网适配器”下的IPv4地址,例如192.168.1.100
  3. 在Mumu模拟器内,进入系统设置 -> WLAN(或网络和互联网 -> 互联网)。
  4. 长按当前已连接的Wi-Fi网络(通常叫“WiredSSID”或类似名称),选择“修改网络”。
  5. 在高级选项中,将代理设置为“手动”。
    • 代理服务器主机名:填写你主机的IP地址,如192.168.1.100
    • 代理服务器端口:填写Burp代理监听的端口,如8080
  6. 保存设置。此时,模拟器的所有HTTP流量应该已经指向Burp了。你可以在Burp的Proxy -> Intercept标签页看到拦截的请求(如果Intercept是on的话)。但HTTPS流量会因为证书不受信任而失败。

4.4 第四步:推送证书至系统存储(核心步骤)

这是攻克安卓7.0+限制的核心环节。我们需要将准备好的系统证书文件推送到模拟器的/system/etc/security/cacerts/目录。

  1. 在主机上打开命令行,使用ADB连接模拟器。首先检查设备是否连接:
    adb devices
    你应该能看到一个设备列表,例如127.0.0.1:7555 device。Mumu模拟器的默认ADB端口通常是7555。
  2. 如果没看到设备,可能需要手动连接:
    adb connect 127.0.0.1:7555
    再次执行adb devices确认连接成功。
  3. 由于要修改系统目录,需要获取Root权限的ADB Shell:
    adb shell su
    执行su后,命令行提示符应该会从$变成#,表示已获得超级用户权限。
  4. 在推送前,最好先 remount 系统分区为可读写状态:
    mount -o rw,remount /system
    或者使用:
    remount
    (取决于系统环境)。这一步是为了获得向/system目录写入文件的权限。
  5. 关键操作:推送证书文件。不要退出当前的adb shell。另开一个主机命令行窗口,执行推送命令:
    adb push D:\burp_cert\9a5ba575.0 /system/etc/security/cacerts/
    (请替换你的证书文件路径和名称)。
  6. 回到第一个命令行窗口(adb shell内),进入证书目录查看是否推送成功,并修改文件权限:
    cd /system/etc/security/cacerts ls -l 9a5ba575.0 # 查看文件 chmod 644 9a5ba575.0 # 修改权限为644(rw-r--r--),这是系统证书的标准权限
  7. 重启模拟器。你可以直接在模拟器界面重启,或者在adb shell里执行reboot。重启是为了让系统加载新的证书。

4.5 第五步:验证与测试

模拟器重启后,进行最终验证。

  1. 再次配置模拟器的Wi-Fi代理指向Burp(步骤同4.3,因为重启后代理设置可能丢失,需要重设)。
  2. 在模拟器内打开浏览器,访问一个HTTPS网站,比如https://www.baidu.com
  3. 观察Burp Suite。如果一切配置正确,你应该能在Proxy -> HTTP history中看到完整的HTTPS请求和响应,并且内容已被解密,不再是乱码。你也可以在浏览器中看到正常的网页内容,而不会出现证书警告。
  4. 进一步测试:打开你想要测试的目标App,进行一些网络操作。在Burp的历史记录中,你应该能看到该App发出的所有HTTP/HTTPS请求。

至此,一个支持抓取安卓7.0+应用HTTPS流量的Burp+Mumu测试环境就搭建完成了。

5. 常见问题、排查技巧与深度避坑指南

即使按照步骤操作,也可能会遇到各种问题。下面是我在实践中总结的常见故障点及排查思路。

5.1 问题一:ADB连接不上模拟器

  • 现象adb devices列表为空。
  • 排查
    1. 确认Mumu模拟器已启动。
    2. 确认Mumu的ADB端口。不同模拟器端口不同,Mumu通常是7555。可以尝试adb connect 127.0.0.1:7555
    3. 检查主机是否安装了其他安卓工具(如手机助手、其他模拟器)导致ADB冲突。尝试关闭其他相关软件,或者重启ADB服务:adb kill-server然后adb start-server
    4. 在Mumu模拟器设置中,检查是否有“ADB调试”选项并确保其开启。

5.2 问题二:证书已安装,但HTTPS流量仍无法解密或报错

  • 现象:Burp能抓到HTTPS请求,但内容是乱码(加密状态),或者应用直接报网络错误、证书错误。
  • 排查
    1. 证书哈希计算错误:这是最常见的原因。务必使用openssl x509 ... -subject_hash_old命令计算哈希,并使用其输出作为文件名。用-subject_hash算出来的大概率不行。
    2. 证书权限错误:确保在adb shell中,使用chmod 644 <证书文件名>正确设置了权限。
    3. 证书未生效:推送证书并设置权限后,必须重启模拟器。不重启,系统不会读取新证书。
    4. 应用使用了证书固定(SSL Pinning):这是另一个层面的安全机制。即使系统信任了Burp证书,应用自身代码也会校验服务器证书是否与预设的证书或公钥匹配。此时,系统级证书安装方案也会失效。解决方法通常是反编译应用修改校验逻辑,或者使用Frida、Xposed(如JustTrustMe模块)等动态注入工具来绕过Pinning。这属于更高级的对抗,不在本文基础环境搭建范畴内。
    5. 代理设置问题:确认模拟器的代理设置正确指向了主机的IP和Burp端口。可以尝试在模拟器浏览器访问http://burp,如果能下载到证书,说明代理通路是好的。

5.3 问题三:推送证书时提示“Read-only file system”或权限不足

  • 现象adb push失败,或在adb shell内无法复制文件到/system/etc/security/cacerts
  • 排查
    1. 确保已成功执行su获得了root权限(提示符为#)。
    2. 务必执行了mount -o rw,remount /systemremount命令,将系统分区重新挂载为可读写。有些模拟器需要更具体的路径,如mount -o rw,remount /system
    3. 部分定制过的模拟器系统可能对/system分区保护更严格。可以尝试将证书先推到/sdcard/,然后在adb shell内用catcp命令复制过去:
      # 在adb shell (#) 内操作 cat /sdcard/9a5ba575.0 > /system/etc/security/cacerts/9a5ba575.0
    4. 如果仍不行,可以尝试在模拟器设置中寻找更彻底的“系统可写”选项,或者更换一个对Root支持更完善的模拟器版本。

5.4 问题四:Burp抓不到任何包

  • 现象:模拟器网络正常,但Burp的HTTP history一片空白。
  • 排查
    1. 检查Burp代理监听器:确认Proxy Listeners中对应端口的监听器是“Running”状态,且绑定地址是0.0.0.0或你的主机IP。
    2. 检查主机防火墙:Windows或macOS的防火墙可能会阻止外部连接(来自模拟器)访问Burp的监听端口。临时关闭防火墙测试,或者添加一条入站规则,允许对应端口(如8080)的TCP连接。
    3. 检查模拟器代理配置:确认模拟器Wi-Fi代理中填写的IP和端口完全正确。主机IP地址不能填127.0.0.1
    4. 尝试抓取HTTP流量:在模拟器浏览器访问一个HTTP网站(如http://neverssl.com)。如果HTTP能抓到而HTTPS不能,问题集中在证书上;如果HTTP也抓不到,问题集中在网络代理通路上。

5.5 一个高效的排查流程

当遇到问题时,建议按以下顺序排查,可以快速定位问题环节:

  1. 网络连通性测试:在模拟器浏览器访问http://<主机IP>:<Burp端口>。如果能显示Burp的欢迎页面或证书下载页面,证明从模拟器到Burp代理的网络通路是好的。否则,检查代理设置、防火墙、Burp监听器。
  2. 证书有效性测试:完成上述步骤后,访问一个普通的HTTPS网站(如百度)。如果Burp能解密,说明系统证书安装成功。如果不能,检查证书哈希、权限、重启。
  3. 目标应用测试:用目标App测试。如果普通浏览器HTTPS可解密,但目标App报错,很可能遇到了证书固定(SSL Pinning)。

6. 进阶技巧与可持续化维护

环境搭建好只是第一步,如何高效、稳定地使用这个环境同样重要。

6.1 证书的备份与复用

你转换好的那个9a5ba575.0文件,本质就是你的Burp CA证书的“系统身份证”。只要你的Burp不重装、不重置CA证书,这个文件就可以一直复用。

  • 备份:将这个.0文件妥善保存。以后在新模拟器、新测试环境中,可以直接使用,省去导出、转换、计算哈希的步骤。
  • 复用:在新环境中,只需要确保模拟器Root,然后通过adb push和chmod命令将其放入系统证书目录即可。这尤其适合需要频繁创建、销毁模拟器快照的测试场景。

6.2 应对复杂网络环境

有时,被测应用可能位于复杂的公司内网,或者需要访问多个不同环境的服务器。

  • Burp上游代理:如果你的主机需要通过公司代理才能上网,可以在Burp的User options -> Connections -> Upstream Proxy Servers中配置上游代理。这样,Burp会将从模拟器截获的请求,通过公司代理转发出去,再将响应返回。
  • 模拟器DNS设置:如果遇到域名解析问题,可以在模拟器的Wi-Fi代理设置高级选项中,手动指定DNS服务器(如8.8.8.8)。

6.3 性能与稳定性优化

  • 关闭不必要的拦截:长期测试时,记得关闭Proxy -> Intercept的拦截功能(设置为Intercept is off),否则所有请求都会被暂停,影响应用正常使用和测试效率。需要拦截时再临时打开。
  • 管理历史记录:长时间抓包会产生巨量历史记录,可能拖慢Burp。定期到Proxy -> HTTP history中点击“Filter”进行筛选,或者直接清除当前历史。
  • 模拟器快照:在Mumu模拟器完全配置好(网络代理、系统证书)且安装完常用测试工具后,可以创建一个“干净”的快照。以后测试不同应用时,可以基于这个快照创建新实例,避免重复配置。

这套Burp+Mumu+系统证书的抓包方案,经过多次实战检验,稳定性很高。它解决了安卓高版本抓包的核心痛点,为你进行深入的移动端安全测试扫清了基础障碍。剩下的,就是如何利用Burp强大的功能,去发现应用逻辑中的漏洞了。记住,工具和环境是辅助,最重要的永远是测试者的思路和对业务逻辑的理解。