
1. 为什么高版本安卓抓包这么难最近几年安卓系统安全机制越来越严格特别是从Android 7.0开始引入的网络安全配置Network Security Configuration让很多开发者头疼。我去年在做一款社交APP的安全测试时就遇到了这个问题——明明在低版本手机上运行良好的抓包方案换到Android 10上就完全失效了。问题的核心在于证书安装机制的变化。在Android 7.0之前用户安装的CA证书会被系统完全信任。但现在系统只信任预装在/system/etc/security/cacerts/目录下的证书而且这些证书必须满足特定的命名规则和权限设置。这就导致我们常用的Burpsuite证书直接安装方法完全失效。更麻烦的是现在很多APP还额外启用了证书锁定Certificate Pinning机制。就算你成功安装了Burpsuite证书APP还是会检测到中间人攻击而拒绝连接。不过今天我们先把重点放在最基础的证书安装问题上毕竟这是所有抓包操作的前提条件。2. 环境准备搭建抓包基础设施2.1 选择合适的安卓模拟器经过多次测试我发现MuMu模拟器12是目前最适合抓包测试的安卓模拟器。它有以下几个优势默认支持root权限省去了刷机的麻烦文件系统访问限制较少方便我们修改系统目录性能稳定对ARM应用兼容性好内置adb调试功能端口固定不会随机变化安装MuMu模拟器12时有个小技巧建议选择自定义安装路径不要用默认的C盘位置。我遇到过因为路径包含中文导致adb连接失败的情况所以推荐使用纯英文路径比如D:\MuMu\emulator\nemu。2.2 配置Burpsuite监听设置Burpsuite的配置相对简单但有几个关键点需要注意在Proxy - Options里添加监听器绑定本机IP和8080端口取消勾选Support invisible proxying选项在Request Handling中设置Redirect to host和Redirect to port这里最容易出错的是IP地址的选择。如果你使用WiFi应该选择无线网卡的IP如果使用有线网络则选择以太网适配器的IP。我建议在cmd里运行ipconfig确认当前使用的网络接口。2.3 安装必备工具链除了Burpsuite和MuMu模拟器还需要准备两个关键工具ADB工具包建议下载最新版本的Platform Tools解压后记得将路径添加到系统环境变量OpenSSL用于证书格式转换Windows版推荐使用Win64 OpenSSL v1.1.1配置环境变量后一定要测试下工具是否可用。打开cmd分别运行adb version openssl version如果显示版本信息就说明安装成功了。我遇到过openssl命令报错的情况后来发现是因为系统里同时安装了多个版本的OpenSSL导致冲突。3. 证书处理突破系统限制的关键步骤3.1 导出并转换Burpsuite证书在浏览器访问http://你的IP:8080下载CA证书时很多人会忽略证书格式的选择。Burpsuite默认提供der格式但我们需要的是可以重命名的证书文件。这里有个小技巧先保存为der格式然后用文本编辑器另存为pem格式。转换证书的关键命令是openssl x509 -subject_hash_old -in cacert.der这个命令会输出一个8位哈希值比如9a5ba575。我们需要将证书重命名为9a5ba575.0确保文件权限是644rw-r--r--所有者设置为root:root我在测试时发现有些OpenSSL版本会报unable to load certificate错误。这时候可以尝试先用以下命令转换格式openssl x509 -inform DER -in cacert.der -out cacert.pem3.2 将证书推送到系统目录MuMu模拟器的adb默认端口是16384连接命令是adb connect 127.0.0.1:16384连接成功后我们需要分几步操作将证书推送到临时目录adb push 9a5ba575.0 /sdcard/进入adb shell挂载系统目录为可写adb shell su mount -o rw,remount /system移动证书到系统CA存储mv /sdcard/9a5ba575.0 /system/etc/security/cacerts/ cd /system/etc/security/cacerts/ chmod 644 9a5ba575.0 chown root:root 9a5ba575.0这里最容易出错的是/system目录的挂载权限。如果遇到Read-only file system错误说明没有正确获取root权限。可以尝试先执行su -切换到超级用户。4. 实战测试与问题排查4.1 验证证书安装效果完成所有操作后重启模拟器adb reboot重启后打开浏览器访问https://burp应该能看到Burpsuite的欢迎页面而不会出现证书警告。如果仍然报错可以检查证书是否确实存在于/system/etc/security/cacerts/证书权限是否正确ls -l查看证书哈希值是否计算正确我遇到过最棘手的问题是证书安装成功但某些APP仍然无法抓包。这通常是因为APP启用了证书锁定。对于这种情况可以考虑使用Frida等工具绕过证书检查但这已经超出本文讨论范围。4.2 常见错误解决方案问题1adb devices显示unauthorized解决方法在模拟器设置中重新启用USB调试运行adb kill-server后重试检查adb版本是否过旧问题2openssl命令返回不是内部命令解决方法确认OpenSSL安装路径已加入PATH尝试在OpenSSL的bin目录下执行命令检查系统是否安装了多个冲突的OpenSSL版本问题3证书安装后部分APP仍无法抓包可能原因APP使用了证书锁定APP使用了TLS 1.3等新协议网络请求走的是WebSocket或其他非HTTP协议5. 高级技巧与优化建议5.1 自动化脚本实现一键部署每次手动操作确实很麻烦我写了个批处理脚本来自动化整个过程echo off set CERT_NAME9a5ba575.0 set ADB_PORT16384 set OPENSSL_PATHC:\OpenSSL-Win64\bin\openssl %OPENSSL_PATH% x509 -subject_hash_old -in cacert.der hash.txt set /p HASHhash.txt ren cacert.der %HASH%.0 adb connect 127.0.0.1:%ADB_PORT% adb push %HASH%.0 /sdcard/ adb shell su -c mount -o rw,remount /system mv /sdcard/%HASH%.0 /system/etc/security/cacerts/ chmod 644 /system/etc/security/cacerts/%HASH%.0 chown root:root /system/etc/security/cacerts/%HASH%.0 reboot5.2 多设备管理技巧当需要同时测试多款APP时我建议为每个测试项目创建独立的模拟器实例使用不同的Burpsuite项目文件保存抓包数据配置不同的监听端口如8080、8081等MuMu模拟器支持多开功能可以在多开器中创建多个实例。每个实例的adb端口会依次递增16384、16385...记得在连接时指定正确的端口号。5.3 抓包性能优化长时间抓包可能会导致Burpsuite内存占用过高。我的优化建议是在Proxy - Options中设置合适的请求/响应存储大小定期导出历史记录并清空对目标域名设置精确的Scope避免捕获无关流量对于大量图片/视频请求可以考虑启用Dont intercept images选项6. 安全测试实战案例最近我测试了一款电商APP遇到了几个典型问题。首先是登录接口使用了双向证书认证普通抓包方法完全无效。解决方案是在模拟器中同时安装客户端证书并在Burpsuite的Proxy - Options - TLS中配置客户端证书。另一个难题是APP使用了WebSocket传输敏感数据。Burpsuite默认会拦截WebSocket消息但需要额外配置Decoder才能正确解析protobuf格式的数据。我的做法是在Proxy - WebSockets中启用消息拦截使用Burp Collaborator捕获非HTTP流量对加密数据编写自定义解码脚本最麻烦的是遇到证书绑定代码混淆的情况。这时候单纯的抓包已经不够用了需要结合动态分析工具。我通常会先用Frida绕过SSL验证然后用Burpsuite配合Charles做流量分析。不过这种深度测试需要专门的调试设备不建议在主力手机上操作。