当前位置: 首页 > news >正文

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。

数据传递流程大致如下:

数据传递

  1. 客户端向服务器发送HTTP(S)请求时,请求会先经过Fiddler代理服务器
  2. Fiddler代理服务器截取客户端的请求报文,再转发到服务器(转发前可修改请求参数)
  3. 服务器处理完请求后返回响应报文,Fiddler代理服务器会截取WEB服务器的响应报文
  4. Fiddler处理完响应报文后再返回给客户端

Fiddler抓取HTTPS原理

HTTPS基础

HTTPS = HTTP + SSL/TLS(SSL/TLS协议作用于HTTPS建立前客户端与服务端建立信任的过程,HTTP协议作用于客户端与服务端的正式通信过程),二者通信的数据是被TLS协议最终生成的密钥加密。

HTTPS两种加密方式:
HTTPS

Fiddler截取HTTPS流程

Fiddler截取HTTPS报文的流程大致如下:

拦截流程

  1. 客户端请求建立HTTPS链接,发送客户端支持的加密协议及版本列表等信息给服务器
  2. Fiddler接受客户端请求并伪装成客户端向服务器发送相同的请求
  3. 服务器收到Fiddler的请求后,从请求中筛选合适的加密协议,并返回服务器CA证书(含公钥信息)
  4. Fiddler收到服务器的响应后保存服务器证书,并自签名一个CA证书,伪装成服务器,把该证书下发给客户端
  5. 客户端验证证书合法性(Fiddler能否抓取到HTTPS报文关键看这一步)
  6. 客户端生成对称密钥,通过证书的公钥加密发送给服务器
  7. Fiddler拦截客户端的请求后,使用私钥解密报文,获取对称加密秘钥,并使用服务器证书中的公钥加密该对称密钥发送给服务器(此时对称密钥已泄露)
  8. WEB服务器接收到加密的对称密钥后使用私钥解密,并使用对称密钥加密测试数据传给客户端
  9. Fiddler使用前面获取的对称密钥解密报文
  10. 客户端验证数据无误后HTTPS连接建立完成,开始向服务器发送使用对称密钥加密的业务数据
  11. Fiddler使用获取的对称密钥解密客户端发送的数据并重新加密转发给服务器

抓包教程

一、安装Fiddler

下载地址:https://www.telerik.com/download/fiddler(下载classic版本)

安装步骤:在自定义路径下,无脑下一步安装,安装后先不运行

注:也可以下载使用Fiddler Everywhere(适用于MacOS、Windows和Linux),但需要付费

二、配置Fiddler

  1. ToolsOptionsConnections → 设置端口号(默认8888),并允许远程连接
    连接设置项1
    连接设置项2
  2. ToolsOptionsHTTPS→勾选Decrypt HTTPS traffic,并选择...from all processes,勾选ignore server certificate errors(unsafe),然后点击OK保存设置
    在这里插入图片描述
  3. 重启Fiddler(修改Fiddler配置要重启后才能生效)

三、抓包Web浏览器

  1. ToolsOptionsHTTPSActionsExport Root Certificate to Desktop 将Fiddler证书导出到桌面
    在这里插入图片描述
  2. 在浏览器设置 → 隐私设置和安全性 → 管理证书的受信任的根证书颁发机构 → 导入Fiddler证书
    Chrome浏览器路径为例:设置 → 隐私设置和安全性 → 安全 → 管理设备证书
    在这里插入图片描述
  3. 重启浏览器(如果无法访问,去管理证书的中间证书颁发列表中删除Fiddler证书,重新导入进受信任的根证书颁发机构列表)
    web抓包比较少用,因为一般可以直接开发者工具F12查看

四、抓包iOS

  1. 确保电脑和手机处于同一局域网内(或用手机连接电脑发射的热点),ipconfig查看电脑的IP
  2. 修改WIFI的网络配置,代理IP地址填电脑的IP,端口填写8888,并保存
  3. 打开手机浏览器,输入192.168.xxx.xx:8888(电脑IP:端口),点击FiddlerRoot certificate
  4. 进入手机设置,安装下载的配置描述文件:进入通用关于本机证书信任设置 → 对FiddlerRoot证书启用完全信任
  5. 检查能否打开浏览器,重启app,即可进行抓包

注意:如果已有配置文件,进入通用VPN与设备管理 → 找到FiddlerRoot描述文件移除再重试

五、抓包Android

  1. 确保电脑和手机处于同一局域网内(尽量用手机连接电脑发射的热点),ipconfig查看电脑的IP
  2. 修改WIFI的网络配置,代理IP地址填电脑的IP,端口填写8888,并保存
    在这里插入图片描述
  3. 打开手机浏览器,输入192.168.xxx.xx:8888(电脑IP:端口),点击FiddlerRoot certificate,下载Fiddler证书
    在这里插入图片描述
  4. 在手机设置 → 安全与隐私设置里 → 高级证书设置,安装Fiddler证书

注意:有些安卓手机可以下载证书后直接安装,有些则需要去设置里安装证书

  1. 检查能否打开浏览器,重启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端程序

  1. 安装Proxifier:https://www.proxifier.com,可以让任意程序通过HTTPS/SOCKS5 代理访问网络,无脑安装即可
  2. 安装完毕后,运行软件,选择菜单 Profier >> Proxy Servers >> Add
    在Address输入本机IP192.168.xxx.xx,Port输入端口8888,Protocol选择HTTPS,(点击Advanced中可以设置label名称,命名IP:端口),点击OK保存
  3. 点击check ,用代理检查器中检查代理是否配置成功,看显示的测试结果,测试通过即表示成功
  4. 选择菜单 Profier >> Proxification Rules , 选中第一栏,点击Action下的Direct,更改为上一步设置的 label 地址,点击OK
  5. 重启要测试的PC程序,即可验证抓包(无法抓包时,检查配置是否正确)

参考文档:https://cloud.tencent.com/developer/article/1607505

http://www.xdnf.cn/news/1416403.html

相关文章:

  • 【Android】Span富文本简介
  • Python 爬虫案例:爬取豆瓣电影 Top250 数据
  • 华为云CCE
  • 【Flask】测试平台开发,实现全局邮件发送工具 第十二篇
  • [免费]基于Python的气象天气预报数据可视化分析系统(Flask+echarts+爬虫) 【论文+源码+SQL脚本】
  • 【Proteus仿真】蜂鸣器控制系列仿真——蜂鸣器控制/蜂鸣器播放音乐/蜂鸣器播放多种音乐/蜂鸣器和LED组成报警装置
  • 如何在Github中创建仓库?如何将本地项目上传到GitHub中?
  • 【HTML】draggable 属性:解锁网页交互新维度
  • 深入探讨Java异常处理:受检异常与非受检异常的最佳实践
  • 领码方案:低代码平台前端缓存与 IndexedDB 智能组件深度实战
  • Eclipse Compiler for Java (ECJ):安装指南与高效快捷键全解析
  • 玩转OurBMC第二十一期:前端页面仪表盘的设计与使用实践
  • Trae x MCP:一键打造品牌专属高质量SVG封面
  • CompletableFuture初体验
  • (9.1)Python测试之记录
  • Shell 编程 —— 正则表达式与文本处理器
  • 函数,数组与正则表达式
  • Android原生HttpURLConnection上传图片方案
  • 打造智能写作工作流:n8n + 蓝耘MaaS平台完整实战指南
  • Apollo学习之决策模块
  • 【Linux手册】Unix/Linux 信号:原理、触发与响应机制实战
  • Ajax笔记(下)
  • 在.NET标准库中进行数据验证的方法
  • Java视觉跟踪入门:使用OpenCV实现实时对象追踪
  • 【开题答辩全过程】以 基于php的校园兼职求职网站为例,包含答辩的问题和答案
  • 【Android】使用Handler做多个线程之间的通信
  • 【Flask】测试平台开发,应用管理模块实现-第十一篇
  • 【lucene核心】impacts的由来
  • 旧物回收小程序:科技赋能,开启旧物新生之旅
  • 山东省信息技术应用创新开展进程(一)