Fiddler抓包原理及教程(附带解决高版本Android抓包无网络问题)
文章目录
- 概述
- Fiddler基本原理
- 正常连接
- Fiddler代理连接
- Fiddler抓取HTTPS原理
- HTTPS基础
- Fiddler截取HTTPS流程
- 抓包教程
- 一、安装Fiddler
- 二、配置Fiddler
- 三、抓包Web浏览器
- 四、抓包iOS
- 五、抓包Android
- 高版本Android设备抓包使用代理后无法连接网络?
- 方法一:懒人解决办法,让开发处理,使App`信任用户证书:`
- 方法二:使用root手机/模拟器,将Fiddler证书装到系统证书目录下,伪装成系统证书:
- 六、抓包PC端程序
概述
Fiddler是位于客户端和服务器端之间的HTTP代理,通过代理的方式获取程序HTTP通讯的数据。它能够记录客户端和服务器之间的所有HTTP(S)请求,并且可以针对特定的HTTP(S)请求,分析网络传输的数据,还可以设置断点、修改请求的数据和服务器返回的数据。
Fiddler基本原理
正常连接
正常客户端和服务器之间是直接连接的:
Fiddler代理连接
Fiddler将会在客户端和服务器之前建立一个代理服务器,Fiddler启动后会自动将代理服务器设置成本机,默认端口为8888。
数据传递流程大致如下:
- 客户端向服务器发送HTTP(S)请求时,请求会先经过Fiddler代理服务器
- Fiddler代理服务器截取客户端的请求报文,再转发到服务器(转发前可修改请求参数)
- 服务器处理完请求后返回响应报文,Fiddler代理服务器会截取WEB服务器的响应报文
- Fiddler处理完响应报文后再返回给客户端
Fiddler抓取HTTPS原理
HTTPS基础
HTTPS = HTTP + SSL/TLS(SSL/TLS协议作用于HTTPS建立前客户端与服务端建立信任的过程,HTTP协议作用于客户端与服务端的正式通信过程),二者通信的数据是被TLS协议最终生成的密钥加密。
HTTPS两种加密方式:
Fiddler截取HTTPS流程
Fiddler截取HTTPS报文的流程大致如下:
- 客户端请求建立HTTPS链接,发送客户端支持的加密协议及版本列表等信息给服务器
- Fiddler接受客户端请求并伪装成客户端向服务器发送相同的请求
- 服务器收到Fiddler的请求后,从请求中筛选合适的加密协议,并返回服务器CA证书(含公钥信息)
- Fiddler收到服务器的响应后保存服务器证书,并自签名一个CA证书,伪装成服务器,把该证书下发给客户端
- 客户端验证证书合法性(Fiddler能否抓取到HTTPS报文关键看这一步)
- 客户端生成对称密钥,通过证书的公钥加密发送给服务器
- Fiddler拦截客户端的请求后,使用私钥解密报文,获取对称加密秘钥,并使用服务器证书中的公钥加密该对称密钥发送给服务器(此时对称密钥已泄露)
- WEB服务器接收到加密的对称密钥后使用私钥解密,并使用对称密钥加密测试数据传给客户端
- Fiddler使用前面获取的对称密钥解密报文
- 客户端验证数据无误后HTTPS连接建立完成,开始向服务器发送使用对称密钥加密的业务数据
- Fiddler使用获取的对称密钥解密客户端发送的数据并重新加密转发给服务器
抓包教程
一、安装Fiddler
下载地址:https://www.telerik.com/download/fiddler(下载classic版本)
安装步骤:在自定义路径下,无脑下一步安装,安装后先不运行
注:也可以下载使用Fiddler Everywhere(适用于MacOS、Windows和Linux),但需要付费
二、配置Fiddler
Tools
→Options
→Connections
→ 设置端口号(默认8888),并允许远程连接
Tools
→Options
→HTTPS
→勾选Decrypt HTTPS traffic
,并选择...from all processes
,勾选ignore server certificate errors(unsafe)
,然后点击OK
保存设置
- 重启Fiddler(修改Fiddler配置要重启后才能生效)
三、抓包Web浏览器
Tools
→Options
→HTTPS
→Actions
→Export Root Certificate to Desktop
将Fiddler证书导出到桌面
- 在浏览器设置 → 隐私设置和安全性 → 管理证书的受信任的根证书颁发机构 → 导入Fiddler证书
Chrome浏览器路径为例:设置 → 隐私设置和安全性 → 安全 → 管理设备证书
- 重启浏览器(如果无法访问,去管理证书的中间证书颁发列表中删除Fiddler证书,重新导入进受信任的根证书颁发机构列表)
web抓包比较少用,因为一般可以直接开发者工具F12查看
四、抓包iOS
- 确保电脑和手机处于同一局域网内(或用手机连接电脑发射的热点),
ipconfig
查看电脑的IP - 修改WIFI的网络配置,代理IP地址填电脑的IP,端口填写8888,并保存
- 打开手机浏览器,输入
192.168.xxx.xx:8888
(电脑IP:端口),点击FiddlerRoot certificate
- 进入手机设置,安装下载的配置描述文件:进入
通用
→关于本机
→证书信任设置
→ 对FiddlerRoot
证书启用完全信任 - 检查能否打开浏览器,重启app,即可进行抓包
注意:如果已有配置文件,进入
通用
→VPN与设备管理
→ 找到FiddlerRoot
描述文件移除再重试
五、抓包Android
- 确保电脑和手机处于同一局域网内(尽量用手机连接电脑发射的热点),
ipconfig
查看电脑的IP - 修改WIFI的网络配置,代理IP地址填电脑的IP,端口填写8888,并保存
- 打开手机浏览器,输入
192.168.xxx.xx:8888
(电脑IP:端口),点击FiddlerRoot certificate
,下载Fiddler证书
- 在手机设置 → 安全与隐私设置里 → 高级证书设置,安装Fiddler证书
注意:有些安卓手机可以下载证书后直接安装,有些则需要去设置里安装证书
- 检查能否打开浏览器,重启app,即可进行抓包
高版本Android设备抓包使用代理后无法连接网络?
因为Android7.0开始,系统默认不信任用户CA证书,解决的办法有2种:
方法一:懒人解决办法,让开发处理,使App信任用户证书:
-
在App应用的
res/xml
目录下添加文件network_security_config.xml
:```xml <?xml version="1.0" encoding="utf-8"?> <network-security-config><!-- 设置允许http明文传输--><base-config cleartextTrafficPermitted="true"><trust-anchors><!-- 设置信任系统级别证书--><certificates src="system" /><!-- 设置信任用户自定义证书--><certificates src="user" /></trust-anchors></base-config> </network-security-config> ```
-
然后
application
标签下设置属性:android:networkSecurityConfig="@xml/network_security_config"
(需要注意的是上面的代码只适合添加在测试环境)
方法二:使用root手机/模拟器,将Fiddler证书装到系统证书目录下,伪装成系统证书:
- 先将 Fiddler 证书导出到桌面
- 下载和安装openssl:http://slproweb.com/products/Win32OpenSSL.html ,选择最上面的64位 EXE 点击下载安装即可
- 安装完成之后,需要配置环境变量,配置完成后,打开cmd命令行输入:
openssl
,显示相应信息即代表成功 - 将 桌面的Fiddler cer证书转pem证书,在 cmd中输入:
openssl x509 -inform DER -in C:\Users\29125\Desktop\FiddlerRoot.cer -out C:\Users\29125\Desktop\FiddlerRoot.pem
- 用 md5 方式显示 pem证书的 hash值,在 cmd中输入:
openssl x509 -inform PEM -subject_hash_old -in C:\Users\29125\Desktop\FiddlerRoot.pem
- 将 pem证书重命名,使用上面显示的 hash值 (如hash值为:269953fb)对pem证书进行重命名:
ren C:\Users\Administrator\Desktop\FiddlerRoot.pem 269953fb.0
- 将安装证书到模拟器的系统目录(/system/etc/security/cacerts),注意需要root 及磁盘写入权限
- 前往手机设置,长按 wifi,修改 wifi 代理地址(参考前面的修改网络配置)
- 给模拟器设置全局代理:
adb shell settings put global http_proxy 192.168.xxx.xx:8888
(代理IP及端口) - 关闭全局代理:
adb shell settings delete global http_proxy
六、抓包PC端程序
- 安装Proxifier:https://www.proxifier.com,可以让任意程序通过HTTPS/SOCKS5 代理访问网络,无脑安装即可
- 安装完毕后,运行软件,选择菜单 Profier >> Proxy Servers >> Add
在Address输入本机IP192.168.xxx.xx
,Port输入端口8888
,Protocol选择HTTPS
,(点击Advanced
中可以设置label名称,命名IP:端口
),点击OK
保存 - 点击
check
,用代理检查器中检查代理是否配置成功,看显示的测试结果,测试通过
即表示成功 - 选择菜单 Profier >> Proxification Rules , 选中第一栏,点击Action下的Direct,更改为上一步设置的 label 地址,点击OK
- 重启要测试的PC程序,即可验证抓包(无法抓包时,检查配置是否正确)
参考文档:https://cloud.tencent.com/developer/article/1607505