Android抓包总结
字数 2281 2025-08-22 12:22:24
Android抓包技术全面指南
一、前言
本指南总结了Android平台抓包过程中遇到的各种问题及解决方案,涵盖HTTP/HTTPS协议抓包、SSL Pinning绕过、双向认证处理等技术要点,旨在为安全研究人员提供全面的抓包技术参考。
二、抓包工具介绍
常用抓包工具
- Fiddler:功能强大的HTTP/HTTPS抓包工具,支持代理设置和请求修改
- Burp Suite:专业的安全测试工具,支持拦截和修改HTTP/HTTPS请求
- Charles:Mac平台常用的抓包工具
- HttpCanary:移动端Fiddler,支持双向认证应用抓包
- Packet Capture:验证应用是否发送请求的实用工具
- tcpdump:命令行抓包工具,配合Wireshark分析
- Wireshark:强大的网络协议分析工具
工具选择建议
- 常规HTTP/HTTPS抓包:Fiddler/Burp Suite
- 非HTTP协议抓包:tcpdump + Wireshark
- 移动端快速验证:HttpCanary/Packet Capture
- 运营商特殊路由数据:可能需要iptables反向代理
三、Fiddler抓包配置
基础设置步骤
-
生成证书:
- 打开Fiddler → Tools → Options → HTTPS
- 勾选"Decrypt HTTPS traffic"并生成证书
-
网络配置:
- 使用
ipconfig查看电脑内网IP - 手机与电脑连接同一局域网
- 手机WLAN设置手动代理:主机名=电脑IP,端口=8888
- 使用
-
证书安装:
- 手机浏览器访问
http://电脑IP:8888 - 下载并安装"FiddlerRoot.certificate"
- 手机浏览器访问
常见问题解决
-
无法连接代理:
- 关闭电脑防火墙
- 修改注册表:
HKEY_CURRENT_USER\Software\Microsoft\Fiddler2下创建DWORD值80(十进制) - 添加FiddlerScript规则:
if (oSession.host.toLowerCase() == "webserver:8888") { oSession.host = "webserver:80"; }
-
抓不到包:
- 可能是SSL Pinning机制阻止
- 解决方案:使用Xposed+JustTrustMe绕过
请求拦截与修改
- 中断请求:在Fiddler左下角输入
bpu baidu.com中断所有发向baidu.com的请求 - 修改请求:在拦截界面修改后点击"Run to Completion"发送
四、Burp Suite抓包配置
基础设置
-
代理配置:
- 设置监听端口(通常8080)
- 确保手机代理设置与Burp一致
-
证书安装:
- 手机浏览器访问
http://burp下载cacert.der证书 - 将证书安装为系统证书(需root)
- 手机浏览器访问
系统证书安装步骤
-
转换证书格式:
openssl x509 -in cacert.der -inform DER -out cacert.pem -outform PEM -
获取证书hash:
openssl x509 -inform PEM -subject_hash -in cacert.pem -
推送证书到系统:
adb push 7bf17d07.0 /data/local/tmp adb shell su mount -o rw,remount / mv /data/local/tmp/7bf17d07.0 /system/etc/security/cacerts/7bf17d07.0 -
重启手机生效
五、HTTPS抓包原理与挑战
HTTPS工作原理
- 基于TLS协议,需要身份认证
- 客户端和服务器通过证书验证对方身份
- 数据传输前建立安全连接
抓包难点
- SSL Pinning:客户端锁定服务器证书
- 校验方式:与本地证书(asset或res/raw目录)比对
- 双向认证:服务器也验证客户端证书
- 需要提供有效的客户端证书
六、SSL Pinning绕过技术
常用方法
-
Xposed+JustTrustMe:
- 安装Xposed框架
- 启用JustTrustMe模块
- 重启应用
-
Frida脚本绕过:
- 准备Fiddler证书:
cert-der.crt - 推送证书到设备:
adb push cert-der.crt /data/local/tmp/ - 使用Frida脚本重写SSLContext初始化逻辑
- 准备Fiddler证书:
示例Frida脚本:
setTimeout(function(){
Java.perform(function (){
console.log("[.] Cert Pinning Bypass/Re-Pinning");
var CertificateFactory = Java.use("java.security.cert.CertificateFactory");
// ... 其他代码 ...
SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom").implementation = function(a,b,c) {
console.log("[o] App invoked javax.net.ssl.SSLContext.init...");
SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom").call(this, a, tmf.getTrustManagers(), c);
console.log("[+] SSLContext initialized with our custom TrustManager!");
};
});
});
执行命令:
frida -U -f it.app.mobile -l frida-android-repinning.js --no-pause
七、双向认证处理
识别双向认证
- 抓包时服务器返回400状态码
- 提示需要客户端证书
解决方案
-
获取客户端证书:
- 解压APK查找.p12/.pfx证书文件
- 常见位置:
/assets或/res/raw目录
-
获取证书密码:
- 反编译APK分析证书加载代码
- 查找"PKCS12"关键词定位证书加载位置
- 逆向分析获取密码逻辑
-
证书转换与安装:
Fiddler配置:
# .p12转.pem openssl pkcs12 -in client.p12 -out ClientCertificate.pem -nodes # .pem转.cer x509 -outform der -in ClientCertificate.pem -out ClientCertificate.cer- 将ClientCertificate.cer放入
<Fiddler安装路径>\Fiddler2
Burp Suite配置:
- 在Proxy → Options → SSL Pass Through中添加客户端证书
- 将ClientCertificate.cer放入
八、TCP协议抓包分析
技术方案
-
使用tcpdump抓取原始数据包:
tcpdump -i any -s 0 -w /sdcard/capture.pcap -
使用Wireshark分析捕获的pcap文件
分析要点
- 识别应用特有的TCP协议结构
- 分析数据包格式和加密方式
- 可能需要逆向工程配合分析
九、抓包问题排查流程
-
检查代理设置:
- 确认IP和端口正确
- 验证网络连通性
-
检查证书:
- 是否已安装正确证书
- 是否为系统证书(Android 7+)
-
识别防护机制:
- SSL Pinning
- 双向认证
- 非HTTP协议
-
尝试绕过:
- JustTrustMe/Xposed
- Frida脚本
- 客户端证书安装
-
特殊场景:
- 运营商SDK可能要求SIM卡通信
- 考虑反向代理方案
十、总结
Android抓包技术涉及多个层面的知识,从基础代理设置到高级的证书绕过技术。关键点包括:
- 正确配置抓包工具和代理
- 处理HTTPS特有的安全机制
- 掌握SSL Pinning和双向认证的绕过方法
- 了解非HTTP协议的分析方法
随着Android安全机制的不断加强,抓包技术也需要持续更新。建议安全研究人员掌握多种技术方案,并能够根据具体应用场景选择最合适的抓包策略。