安卓APP抓包实战:MuMu模拟器12配置Burpsuite与HTTPS证书安装避坑指南
1. 项目概述:为什么需要抓包安卓APP?
在移动应用开发、安全测试或者逆向分析的过程中,我们经常需要知道一个安卓APP到底在和服务器“聊”些什么。它发送了什么请求?接收了什么数据?接口参数是如何构造的?这些信息对于调试API、分析业务逻辑、发现潜在的安全漏洞至关重要。这就是“抓包”的核心价值——像电话窃听一样,监听并记录客户端与服务器之间的网络通信。
市面上抓包工具很多,比如Fiddler、Charles、Wireshark,但在Web应用安全测试领域,Burpsuite以其强大的拦截、重放、扫描和自动化功能,成为了安全研究员和开发者的首选。然而,直接在物理安卓手机上配置Burpsuite代理和安装证书,步骤繁琐,且受手机系统版本、厂商定制限制,容易遇到各种“玄学”问题,比如证书无法安装、HTTPS流量抓不到等。
这时,安卓模拟器的优势就体现出来了。它运行在你的电脑上,环境完全可控,可以轻松设置网络代理,也能方便地安装和信任证书。MuMu模拟器12作为一款性能稳定、兼容性好的主流模拟器,成为了我们搭建这个可控测试环境的理想选择。本教程的目标,就是带你从零开始,在MuMu模拟器12上搭建Burpsuite抓包环境,并重点攻克最让人头疼的证书配置环节,让你能稳定、清晰地捕获到APP的HTTPS流量。
2. 环境准备与工具安装
工欲善其事,必先利其器。在开始抓包之前,我们需要准备好所有必要的软件,并确保它们处于正确的版本和配置状态。这一步的细致程度直接决定了后续操作的顺利与否。
2.1 Burpsuite的安装与基础配置
首先,你需要从PortSwigger官网下载Burpsuite Community Edition(社区版)。对于学习和大多数测试场景,社区版的功能已经足够强大。下载完成后,直接运行JAR文件即可启动。如果你没有Java环境,需要先安装JDK 8或更高版本。
启动Burpsuite后,首次运行会提示你创建临时项目或加载已有项目,选择“Temporary project”并点击“Next”,在下一个界面选择“Use Burp defaults”然后“Start Burp”即可。
接下来是关键的网络代理配置:
- 进入Proxy->Options选项卡。
- 在“Proxy Listeners”区域,确保有一个监听器在运行。默认会有一个监听
127.0.0.1:8080的条目。如果没有,点击“Add”添加一个。 - 在添加或编辑监听器时,绑定地址选择“All interfaces”或者特定的本机IP(如
192.168.x.x),端口可以保持8080,也可以换成其他未被占用的端口(如8081)。这里有一个重要细节:为了让模拟器能访问到,绑定地址不能仅仅是127.0.0.1,因为这是电脑本机的环回地址,模拟器作为一个“独立设备”无法直接访问。最好选择“All interfaces”或你电脑在局域网中的IP地址。 - 勾选“Running”复选框,启动监听。
注意:如果你的电脑开启了Windows防火墙,可能会弹出提示,询问是否允许Burpsuite通过防火墙进行通信,务必选择“允许”。
2.2 MuMu模拟器12的安装与网络设置
从网易MuMu模拟器官网下载并安装MuMu模拟器12。安装过程很简单,一路下一步即可。安装完成后启动模拟器。
为了让模拟器的网络流量经过Burpsuite,我们需要在模拟器内部设置代理:
- 打开模拟器,进入系统“设置”。
- 找到“WLAN”或“网络和互联网”设置(不同安卓版本路径略有差异)。
- 长按当前已连接的Wi-Fi网络(通常是“Wired Ethernet”或一个默认连接),选择“修改网络”。
- 在高级选项中,将代理设置为“手动”。
- 代理服务器主机名:这里不能填
127.0.0.1或localhost!因为这是模拟器自身的环回地址。需要填写你电脑的局域网IP地址。你可以在电脑的命令行中输入ipconfig(Windows)或ifconfig(Mac/Linux)来查看,通常是192.168.x.x这样的地址。 - 代理服务器端口:填写你在Burpsuite中设置的端口,例如
8080。 - 保存设置。
设置完成后,你可以在模拟器内打开浏览器,访问一个HTTP网站(注意是HTTP,不是HTTPS),同时在Burpsuite的Proxy->Intercept选项卡下,确保“Intercept is on”是打开状态。如果浏览器页面打不开,且Burpsuite的Intercept界面收到了请求,说明代理设置成功。如果没收到,请检查IP地址和端口是否正确,以及防火墙设置。
2.3 导出与准备Burpsuite证书
要让模拟器信任Burpsuite,从而解密HTTPS流量,必须将Burpsuite的CA证书安装到模拟器的系统信任证书库中。第一步是导出证书。
- 在电脑浏览器中,访问
http://burpsuite或你设置的代理IP和端口,例如http://192.168.1.100:8080。 - 页面右上角有一个“CA Certificate”按钮,点击它下载证书文件
cacert.der。这是一个DER格式的证书文件。 - 安卓系统通常需要PEM或CRT格式的证书。我们需要转换一下。将下载的
cacert.der文件重命名为cacert.cer(或者保持原样,但后续命令需对应修改)。 - 打开命令行工具,使用OpenSSL进行转换(如果你没有OpenSSL,可以搜索在线转换工具,但注意证书安全):
这条命令将DER格式转换为PEM格式。得到openssl x509 -inform DER -in cacert.der -out cacert.pemcacert.pem文件。 - 为了在安卓上安装,我们还需要将PEM文件再次转换为DER格式(但这次是带有BEGIN CERTIFICATE头的),或者直接重命名为
.crt后缀。最简单的方法是直接将cacert.pem文件重命名为cacert.crt。
现在,我们得到了一个cacert.crt文件,这就是需要安装到模拟器中的证书。将这个文件通过拖拽的方式,从电脑桌面复制到MuMu模拟器的共享文件夹中,或者使用模拟器自带的“文件传输”功能上传到模拟器的/sdcard/Download/目录下,方便在模拟器内找到它。
3. 证书安装的深度避坑指南
这是整个流程中最关键、最容易失败的一环。安卓系统从7.0(API 24)开始,引入了名为“网络安全配置”的机制,APP默认不再信任用户安装的CA证书,只信任系统预装的证书。这意味着,即使你把Burpsuite的证书成功安装到了“用户凭据”中,很多现代APP(特别是targetSdkVersion >= 24的)依然会忽略它,导致HTTPS流量无法解密,你看到的只是一堆TLS握手失败的记录。
MuMu模拟器12默认的安卓版本通常较高(例如安卓9、11),因此我们必须采用系统级安装方法。
3.1 常规方法(用户证书)及其局限性
首先,我们看一下常规操作,了解为什么它可能不行:
- 在模拟器中,进入“设置” -> “安全” -> “加密与凭据” -> “安装证书”。
- 选择“CA证书”,系统会警告此操作有风险,点击“仍然安装”。
- 从文件管理器(如刚刚存放证书的Download目录)中找到
cacert.crt文件,点击安装。 - 为证书命名,例如“PortSwigger CA”,然后点击“确定”。
安装成功后,你可以在“用户凭据”列表中看到它。此时,用模拟器浏览器访问一些HTTPS网站,Burpsuite可能已经可以解密内容了。但是,这只是假象。很多原生APP、银行APP、大型互联网公司的APP,由于严格遵循了安卓的网络安全策略,会完全无视这张用户证书。你尝试抓它们的包,会发现要么连接失败,要么Burpsuite里看到的HTTPS请求是乱码或直接显示“Client SSL negotiation failed”。
3.2 系统级证书安装(Root环境)
要让所有APP,包括那些最“顽固”的,都信任我们的Burpsuite证书,必须将其放入系统的信任证书库。这需要模拟器具有Root权限。
第一步:获取MuMu模拟器12的Root权限幸运的是,MuMu模拟器12通常默认就开启了Root权限,或者可以非常方便地开启。
- 打开模拟器,进入“设置” -> “关于平板电脑”(或类似选项)。
- 连续点击“版本号”7次,开启“开发者选项”。
- 返回设置主菜单,进入新出现的“开发者选项”。
- 在其中找到“Root授权”或“开启Root权限”的开关,将其打开。不同版本位置可能不同,也可能在模拟器侧边栏的设置中找到“Root开关”。
第二步:将证书推送至系统证书目录系统CA证书存放在/system/etc/security/cacerts/目录下,并且每个证书文件有特定的命名规则:必须是<hash>.<number>的格式,其中hash是证书主题的哈希值(旧算法),number通常为0。
- 在模拟器内安装一个终端应用,比如“Termux”,或者使用ADB(Android Debug Bridge)连接模拟器。MuMu模拟器通常会在安装目录下提供
adb.exe工具。 - 打开电脑的命令行,导航到MuMu安装目录,连接ADB:
(7555是MuMu模拟器常见的ADB端口,如果不对,可以在模拟器设置中查看)adb connect 127.0.0.1:7555 - 连接成功后,依次执行以下命令:
adb root # 获取root权限 adb remount # 重新挂载系统分区为可读写(关键!)adb remount命令可能在某些系统上失败。如果失败,可以尝试:adb shell su mount -o rw,remount /system exit exit - 计算证书哈希值。首先将
cacert.pem文件放到ADB所在目录,然后:
这条命令会输出一个8位的十六进制字符串,例如openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -19a5ba575。 - 将证书文件推送到系统目录,并重命名:
adb push cacert.pem /system/etc/security/cacerts/ adb shell cd /system/etc/security/cacerts mv cacert.pem 9a5ba575.0 # 将`9a5ba575`替换为你上一步得到的哈希值 chmod 644 9a5ba575.0 # 修改文件权限为644(rw-r--r--) chown root:root 9a5ba575.0 # 修改文件所有者为root exit - 重启模拟器。重启后,Burpsuite的证书就已经成为系统信任的根证书了。
实操心得:
adb remount是关键。如果这一步不成功,系统分区就是只读的,无法写入证书。MuMu模拟器有时需要特定的启动参数或在多开器中设置“开启Root”才能成功remount。如果实在不行,可以搜索“Magisk模块方式安装系统证书”,这是另一种更强大的方法,但步骤更复杂。
3.3 针对高版本安卓(Android 10+)的额外配置
安卓10及以上版本进一步收紧了网络安全。即使证书安装到了系统目录,APP仍然可以通过在AndroidManifest.xml中配置networkSecurityConfig来明确声明不信任用户证书。作为测试者,我们有时需要“说服”APP信任我们的证书。
一种常见的方法是使用“证书锁定解除”工具,但这需要更深入的逆向工程。对于抓包测试,一个更简单粗暴但经常有效的方法是:修改APK的包名并重打包。因为很多APP的证书锁定(Certificate Pinning)实现是检查特定域名或证书,但有时其逻辑与包名绑定不深。不过,这已属于逆向工程范畴,本教程不展开。
对于我们可控的测试环境(比如测试自己开发的APP),最根本的解决方案是在APP的networkSecurityConfig中明确信任用户安装的证书。这需要在开发阶段完成。
4. 完整抓包流程与实战演示
环境配置妥当后,让我们进行一次完整的实战抓包。假设我们要分析一个新闻类APP的数据流。
4.1 配置Burpsuite代理与拦截
- 确保Burpsuite的代理监听器正在运行(Proxy -> Options,监听器状态为Running)。
- 在Proxy -> Intercept选项卡,确保“Intercept is on”是关闭状态。我们初期先不拦截,只做流量记录。
- 切换到Proxy -> HTTP history选项卡。这里会记录所有流经代理的HTTP/HTTPS请求。
4.2 在模拟器中操作目标APP
- 在MuMu模拟器中安装目标APP。
- 确保模拟器的Wi-Fi代理设置正确指向Burpsuite(主机:电脑IP,端口:8080)。
- 打开APP,进行一些常规操作,比如刷新首页、点击新闻分类、查看新闻详情等。
4.3 分析捕获的流量
回到Burpsuite的HTTP history界面,你应该能看到大量的请求记录。
- 筛选目标:在Filter栏中,你可以输入APP的域名或关键词来筛选请求,避免被其他无关流量干扰。
- 查看请求与响应:点击任意一条记录,下方会分栏显示原始的HTTP请求(Raw, Headers, Params等)和服务器返回的响应(Raw, Headers, Hex等)。
- HTTPS解密成功标志:如果证书配置成功,你看到的HTTPS请求的Host会是真实的域名,请求参数和响应体(如JSON数据)都是明文可读的。如果证书有问题,你可能会看到“Client SSL negotiation failed”的提示,或者请求的Host是乱码、IP地址。
- 重放与篡改:这是Burpsuite的核心功能之一。右键点击任何一个请求,选择“Send to Repeater”。在Repeater选项卡中,你可以任意修改这个请求的参数、头部、方法,然后点击“Send”重新发送,观察服务器返回的不同响应,这对于测试接口漏洞(如SQL注入、越权)非常有用。
- 扫描:右键请求,还可以选择“Do an active scan”,让Burpsuite自动对该请求相关的功能进行安全漏洞扫描。
4.4 处理抓包中的常见现象
- 没有流量:检查模拟器代理设置、电脑防火墙、Burpsuite监听器是否绑定正确IP和端口。尝试在模拟器浏览器访问
http://burp,应该能打开Burpsuite的欢迎页。 - 只有HTTP流量,没有HTTPS或HTTPS乱码:这是证书问题。请严格按照第3章的系统证书安装步骤检查。确认证书哈希、文件名、权限都正确无误。重启模拟器后,可以尝试访问
https://portswigger.net/测试。 - 某个特定APP抓不到包:这个APP很可能使用了证书锁定(SSL Pinning)。它会在代码里硬编码服务器证书的公钥或哈希值,只信任这个特定的证书,而忽略系统CA。对付这种情况,需要反编译APP,修改其网络库代码或使用Frida、Xposed等动态插桩工具来绕过证书检查,这属于进阶内容。
- Burpsuite卡顿或无响应:如果流量非常大,Burpsuite的JAVA应用特性可能导致内存占用过高。可以在启动Burpsuite的批处理文件或命令行中增加JVM内存参数,例如
java -Xmx2048m -jar burpsuite_community.jar。
5. 高阶技巧与问题排查实录
掌握了基础抓包后,一些高阶技巧和深度排查方法能让你事半功倍。
5.1 精准过滤与流量搜索
面对海量请求,如何快速定位?
- Scope设置:在Target -> Scope中,你可以定义目标范围。添加你的目标域名(如
*.example.com),然后勾选“Use advanced scope control”。之后,在Proxy、Scanner等模块,都可以选择只显示在Scope范围内的项目,极大净化视野。 - 搜索功能:在HTTP history界面,使用搜索框(快捷键Ctrl+F)。你可以搜索关键词、正则表达式,范围可以选择请求、响应、注释等。比如搜索“password”、“token”、“uid”,快速找到认证相关的接口。
- Filter表达式:Filter功能非常强大。例如,
MIME type == JSON可以过滤出所有JSON格式的响应;Response status == 200只看成功的请求;Request in scope只看目标范围内的。
5.2 处理WebSocket与gRPC流量
现代APP越来越多地使用WebSocket进行实时通信,或使用gRPC这类高性能RPC框架。Burpsuite对它们的支持情况如下:
- WebSocket:Burpsuite专业版原生支持WebSocket消息的拦截、重放和修改。在Proxy -> Intercept选项卡,当有WebSocket连接建立时,你可以看到并拦截其消息。社区版不支持拦截,但可以在HTTP history中看到WebSocket的握手请求。
- gRPC:gRPC基于HTTP/2,其负载是二进制的Protocol Buffers格式。Burpsuite可以捕获到HTTP/2的流量,但默认无法解析Protobuf内容,显示为二进制乱码。你需要安装如“Burp Suite Protobuf Decoder”这类扩展,并配置对应的
.proto文件,才能实现消息的可读和可编辑。这是一个相对专业的领域。
5.3 模拟器与Burpsuite的进阶配合
- 多开器抓包:MuMu模拟器自带多开器,你可以同时运行多个模拟器实例。为每个实例设置不同的代理端口(如8081,8082),然后在Burpsuite中创建多个对应的监听器,就可以同时抓取多个APP或同一APP多个账号的流量,方便进行对比测试或并发测试。
- 手机代理到模拟器:有时需要在真机上测试,但不想配置手机。可以搭建一个Wi-Fi热点,将热点的代理指向运行Burpsuite的电脑,然后将手机连接到这个热点。这样手机流量也会经过Burpsuite。不过,手机上的证书安装同样需要按照系统证书的方式处理,且过程比模拟器更复杂。
- 利用Burpsuite扩展:Burpsuite强大的扩展生态(BApp Store)能极大增强其能力。例如,“Logger++”提供了更强大的流量记录和搜索功能;“Autorize”用于自动化越权测试;“Collaborator Everywhere”用于发现SSRF等盲注漏洞。在MuMu模拟器这个稳定环境中测试这些扩展,是非常好的学习方式。
5.4 疑难杂症排查清单
当你遇到抓包失败时,可以按照这个清单自上而下排查:
| 问题现象 | 可能原因 | 排查步骤 |
|---|---|---|
| 模拟器无法上网 | 代理设置错误;电脑网络问题 | 1. 关闭代理,看模拟器能否正常上网。 2. 检查电脑IP是否变更。 3. 在模拟器内ping电脑IP。 |
| Burpsuite无任何流量 | 代理未启动;防火墙阻挡;IP/端口错误 | 1. 确认Proxy Listeners中对应条目Running已勾选。 2. 临时关闭电脑防火墙测试。 3. 在模拟器浏览器访问 http://<电脑IP>:<端口>,应看到Burpsuite页面。 |
| HTTPS流量无法解密(显示TLS错误) | 证书未安装或未受信任 | 1. 确认证书已按系统证书方式安装(/system/etc/security/cacerts/)。2. 重启模拟器。 3. 访问 https://burpsuite.com测试。若仍失败,检查证书哈希和文件名。 |
| 特定APP无法抓包(其他APP正常) | 该APP使用了SSL Pinning | 1. 尝试低版本APK。 2. 使用Frida等工具绕过证书锁定(需Root)。 3. 尝试使用“虚拟大师”等可安装Xposed框架的模拟器环境。 |
| 请求响应缓慢或Burpsuite卡死 | 流量过大;JVM内存不足 | 1. 在Burpsuite中设置Scope,过滤无关流量。 2. 增加启动Burpsuite的JVM内存参数( -Xmx4096m)。3. 关闭不需要的Burpsuite模块(如Scanner)。 |
最后,我个人在实际操作中的体会是,抓包环境的搭建,尤其是证书配置,是一个“细节决定成败”的过程。很多时候失败不是因为方法不对,而是某一步的细微差别,比如证书哈希计算错了、文件权限没改、或者模拟器没有真正以可读写方式挂载系统分区。耐心地按照步骤操作,并理解每一步背后的原理(比如为什么用户证书不行,为什么要用特定的哈希文件名),远比盲目复制命令更重要。一旦环境配通,MuMu模拟器12+Burpsuite这个组合就会变成一个极其强大的移动端分析沙箱,无论是开发调试还是安全测试,都能让你清晰地洞察应用内的一切网络交互。
