Flutter应用配合Burp代理异常问题排查咨询
Flutter应用Burp代理拦截后响应报错的排查方案
1. 证书信任问题(最可能的原因)
Flutter的HTTP客户端(包括自带的HttpClient或第三方库如dio)默认会严格校验服务器证书链。当通过Burp代理时,Burp会替换服务器证书为自身根证书——即便你在设备上安装了Burp证书,Android 7+系统默认要求应用显式信任系统证书,而Flutter应用可能未开启该配置,或仅信任内置的根证书列表。
- 验证依据:开启Burp的TLS透传后应用恢复正常,完全符合证书验证失败的特征。
- 解决方向:确认Burp证书已安装到设备的系统证书目录(而非用户目录,Android 7+用户证书默认不被应用信任);如果是调试版应用,检查Flutter项目是否配置了
android:networkSecurityConfig以允许信任系统证书。
2. 代理或TLS指纹检测
Flutter本身不会主动检测代理,但应用可能通过原生层逻辑实现了检测:
- 调用Android/iOS原生API获取系统代理状态,一旦发现代理就返回错误
- 校验TLS握手指纹:Burp的TLS握手特征与原生客户端不同,部分应用会通过指纹识别代理
- 解决方向:用Frida或Objection注入脚本,hook掉代理检测的原生方法;在Burp的
Settings->TLS中开启TLS Fingerprinting,模拟Flutter客户端的TLS指纹(比如选择Chrome Mobile或对应版本的客户端指纹)。
3. Burp的请求/响应自动篡改
Burp默认会自动修改请求或响应的部分内容,比如调整Content-Length、自动解码gzip内容,这可能导致Flutter客户端解析失败。
- 解决方向:进入Burp的
Proxy->Options,关闭Request Modification和Response Modification下的自动修改选项;对比直接请求(无Burp)和经过Burp的请求/响应原始内容,检查是否存在编码、换行符、头部的差异。
4. 隐形代理与流量转发问题
即便配置了隐形代理,iptables规则可能未覆盖应用的所有流量:
- 检查ProxyDroid是否针对目标应用的UID做了流量转发,避免漏过部分请求
- 确认Burp的隐形代理监听端口与ProxyDroid的转发规则匹配,无端口冲突或转发遗漏
内容的提问来源于stack exchange,提问作者Tomoko
相关产品推荐
相关产品推荐

