抓不到APP的包怎么办?
字数 1055 2025-08-11 08:35:57
绕过APP强制不走代理的抓包方法:DNS劫持+隐形代理
背景介绍
许多APP现在做了特殊安全处理,导致无法通过传统HTTP代理方式抓取数据。当手机设置代理后,APP仍能正常使用而浏览器无法访问网站,这表明APP设置了"强制不走代理"机制。
解决方案概述
使用DNS劫持+隐形代理的方法可以绕过这种防御机制,主要需要以下组件:
- 客户端(手机、平板或模拟器)
- DNS服务器(推荐Linux+dnsmasq)
- 隐形代理(推荐Windows+Burp)
详细配置步骤
1. Burp配置隐形代理
- 打开Burp Suite
- 进入Proxy -> Options
- 添加新的代理监听器
- 选择"Invisible"(隐形)模式
- 设置监听端口(通常为8080)
2. 搭建DNS服务器(以dnsmasq为例)
-
安装dnsmasq(Linux系统):
sudo apt-get install dnsmasq -
编辑配置文件
/etc/dnsmasq.conf:address=/.com/192.168.1.10 address=/.cn/192.168.1.10将192.168.1.10替换为Burp所在机器的IP地址
-
重启dnsmasq服务:
sudo systemctl restart dnsmasq
3. 客户端证书安装
iOS设备:
- 安装Burp证书
- 进入"设置"->"通用"->"关于本机"->"证书信任设置"
- 针对根证书启用完全信任
Android 7以下:
- 常规方法安装Burp证书
Android 7及以上:
-
将Burp的cer证书转换为pem格式:
openssl x509 -inform der -in demo.der -out demo.pem -
计算证书哈希值:
openssl x509 -subject_hash_old -in demo.pem -
重命名证书文件为"哈希值.0"(如9a5ba575.0)
-
将证书复制到系统证书目录:
adb remount adb push 9a5ba575.0 /system/etc/security/cacerts/
4. 客户端网络设置
- 设置DNS服务器地址为自建DNS服务器IP
- 确保不修改Burp所在机器的DNS设置(避免死循环)
注意事项
-
该方法不适用于以下情况:
- 使用HTTP DNS请求的APP
- 直接使用IP地址通信的APP
-
对于上述特殊情况,可考虑IP层劫持:
- 在路由器上设置静态路由
- 在Burp机器网卡上绑定多个IP地址
-
虚拟机使用建议:
- 避免同时使用安卓模拟器和VMware虚拟机
- 推荐使用安卓7以下版本的模拟器(避免证书安装问题)
开始抓包
完成以上配置后:
- 启动APP
- 在Burp中查看Proxy -> HTTP history
- 所有APP请求应已成功捕获
补充说明
对于更高级的防御机制,可能需要结合其他技术手段,如:
- 逆向分析APP的证书校验逻辑
- 使用Xposed框架或Frida进行运行时hook
- 修改APP的network_security_config.xml文件
此方法已在多种场景下验证有效,但具体实施可能因APP和系统版本差异而需要适当调整。