突破SSL Pinning:使用Xposed+JustTrustMe框架抓取安卓App及微信小程序HTTPS数据包
1. 为什么需要突破SSL Pinning当你用BurpSuite或Fiddler抓取安卓App的HTTPS数据包时经常会遇到明明配置了代理却抓不到包的情况。这通常是因为目标应用启用了SSL Pinning证书绑定技术。简单来说SSL Pinning就像给App装了个防伪标识它会预先存储合法的证书指纹只接受特定证书建立的加密连接。我遇到过最典型的情况是用常规方法抓微信小程序数据包时要么显示Tunnel to要么直接报证书错误。后来发现从Android 7.0开始系统默认不再信任用户安装的CA证书这给安全测试带来了双重阻碍。不过别担心Xposed框架配合JustTrustMe模块就是专治这种问题的特效药。2. 环境搭建全攻略2.1 模拟器选择与配置经过多次测试我发现逍遥模拟器是最稳定的选择。具体操作步骤官网下载最新版逍遥模拟器打开多开管理器新建一个Android 7.1的64位实例启动后进入设置-关于手机连续点击版本号7次开启开发者模式在开发者选项中开启USB调试和允许安装未知来源应用注意务必选择Android 7.1版本实测这个版本对Xposed框架兼容性最好而且能避开新版Android的证书限制。2.2 Xposed框架安装这里有个小技巧先安装Xposed Installer版本3.1.5最稳定然后按这个顺序操作# 在模拟器终端执行 su mount -o remount,rw /system cp /sdcard/xposed.zip /system chmod 755 /system/xposed.zip我建议把框架文件放在/system分区而不是常规安装这样重启后不会丢失。安装完成后记得在Xposed Installer里检查状态如果显示已激活但提示找不到ZIP文件不用紧张这属于正常现象。2.3 JustTrustMe模块配置JustTrustMe其实有三个变体版本标准版最常用增强版支持更多证书验证方式实验版最新但可能不稳定我的经验是三个都装上在Xposed里逐个启用测试。安装后一定要记得进入Xposed的模块管理界面勾选JustTrustMe重启模拟器使配置生效打开目标App检查是否仍然报证书错误3. 证书配置实战技巧3.1 Fiddler证书安装最新版Fiddler有个隐藏坑点导出的证书默认是PKCS#7格式安卓无法识别。正确做法是在Tools Options HTTPS勾选Decrypt HTTPS traffic导出证书时选择Base64编码的X.509(.CER)将证书重命名为fiddler.cer后放入模拟器共享文件夹在模拟器端操作# 查看证书哈希值 openssl x509 -inform DER -in /sdcard/fiddler.cer -noout -subject_hash # 重命名证书文件 mv /sdcard/fiddler.cer /system/etc/security/cacerts/hash.03.2 BurpSuite证书处理BurpSuite的证书需要特别注意导出时选择DER格式必须包含完整的证书链建议使用PortSwigger官方提供的CA证书兼容性更好有个实用技巧在Burp的Proxy Listeners设置里把绑定地址改为All interfaces这样模拟器和主机都能访问到代理服务。4. 微信小程序抓包专项4.1 微信版本选择实测发现微信8.0.0版本最容易被抓包新版基本都强化了证书校验。安装旧版时要注意先卸载现有微信关闭自动更新安装时跳过权限检查可用ADB命令强制安装4.2 小程序抓包技巧当遇到Tunnel to问题时试试这个方法在Fiddler的Rules Customize Rules中添加if (oSession.HostnameIs(wechat.com)) { oSession[x-no-decrypt] bypass; }开启Fiddler的Stream模式不要用Buffering模式清除微信缓存后重新进入小程序5. 常见问题排查指南5.1 证书仍然不被信任如果配置后还是报证书错误检查/system/etc/security/cacerts目录权限是否为755证书文件权限是否为644是否有多余的空格或特殊字符5.2 数据包内容乱码HTTPS解密后出现乱码通常是因为没有正确配置解密选项目标App使用了自定义加密证书链不完整解决方法# 在BurpSuite的User Options里添加 -Djavax.net.debugssl,handshake5.3 模拟器网络异常遇到网络连接问题时按这个顺序排查检查主机防火墙是否放行8888端口确认模拟器代理设置正确主机IP:8888尝试关闭IPv6协议我在实际测试中发现逍遥模拟器的网络桥接模式有时会抽风这时切换到NAT模式往往能解决问题。如果抓包过程中突然中断可以尝试重启模拟器的网络服务adb shell svc wifi disable adb shell svc wifi enable