Fiddler 抓包

抓包目的

线上的产品出现BUG无法通过代码注入或者获取日志的方式定位问题,或者要抓取第三方应用程序的接口。这时候就需要用到抓包了,它通过一种网络层的方式来获取所有的网络请求。

抓包原理

目前 Windows 上主流的抓包软件有两类

  1. 监听网卡(Wireshark)
  2. 监听端口(Fiddler)

Wireshark

Wireshark 通过 libpcap/WinPcap 从底层抓取网络数据包,并通过不同类型的网络接口(包括以太网、令牌环网、ATM网等)获取数据包。

Fiddler

Fiddler 抓包的原理主要是开启一个 HTTP 网络代理服务,监听并拦截本机某端口的 HTTP 请求,再将其转发到目标服务器。

其行为类似 中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)
在这里插入图片描述

区别

  1. Fiddler 仅作为监听 HTTP/HTTPS/FTP 的专用软件,简单好用,界面直观。
  2. Wireshark 是全能软件,除了 HTTP/HTTPS,TCP,ICMP 之类的包也不在话下,但是功能就比较复杂了,操作略显繁琐

下载 Fiddler

https://www.telerik.com/download/fiddler/fiddler4

在这里插入图片描述

Fliddler 抓取 PC 上的 HTTPS

https 的协议是带有安全功能,

  1. 工具栏 Tools —> Options,打开 Options 对话框。
  2. 因为我们要捕获的是 HTTPS,切换到 HTTPS 选项卡,勾选 Decrypt HTTPS traffic(解密 HTTPS 通信)
  3. 在弹出的 SCARY TEXT AHEAD:Read Carefully!(前面有可怕的文字:请仔细阅读),勾选 Yes,表示信任 Fiddler 的根证数。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

下面,开始抓取 HTTPS 的网络通信了

  1. 删除之前的所有记录
  2. 浏览器打开百度,搜索一个关键词,我这里搜索 “数码宝贝”
  3. 右侧的选项卡切换到 “WebForms”,即可查看到所有请求参数了。该表格中的值字段会将 URLEncode 之后的字符进行解码,从而展现一个原始的字符串,方便查看。

在这里插入图片描述

Fiddler 抓取 Android 上的 HTTPS

获取证数

  1. 首先,将手机与PC连到同一个局域网(同一个WIFI)
  2. 工具栏 Tools —> Options,打开 Options 对话框。
  3. 在 Connections 选项卡中,勾选 Allow remote computers to connect,允许远程计算机连接
  4. 切换到 HTTPS 选项卡,点击 Actions 按钮,Export Root Certificate to Desktop,将 FiddlerRoot.cer 证数导出到桌面。
  5. 将 FiddlerRoot.cer 下载到手机中

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

将证数安装到手机

我用的是乐檬3S,andorid 6.0

如果直接点击证数文件,会提示 “无法安装该证数,因为无法读取证数文件”。

解决办法:
设置 —> 安全 —> 凭据存储 —> 从内部存储设备安装。然后打开证数,随便起一个名字,凭证用途选则 “VPN和应用”,点击确定。证数就被安装进去了。

设置 —> 安全 —> 凭据存储 —> 信任的凭据,可以看到,刚刚安装的 Fiddler 证数,被安装到用户证数,这一栏里了,还自动添加了一个前缀 DO_NOT_TRUST

但不影响,至此,证数安装成功

添加证数后,有的手机需要重启一下才能生效,否则很多信息捕获不到

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

设置代理

  1. 使用 ipconfig,查看当前网络地址。
  2. 在手机上长按 wifi,修改当前网络。勾选 “高级选项”,代理改为手动,服务器主机名填入“上面的IP地址”,端口号填入 8888(这个就是 Tools -> Option -> Connections 中监听的端口)
    在这里插入图片描述
    在这里插入图片描述

开始抓取

抓取百度搜索关键词

跟之前一样,清空抓取结果列表。然后使用手机浏览器,访问百度,我这里搜的关键词是 “圣斗士星矢”,从右侧的 WebForms 列表中,可以看到,访问记录已经被捕获了。
在这里插入图片描述

抓取酷狗音乐歌曲链接

手机打开酷狗APP,搜索 “年少有为” 这首歌,点击播放。这时候 Content-Type = audio/mpeg 的就是歌曲链接了。

在这里插入图片描述

高版本限制

Android 7.0 及后面的版本,即便是导入了 Fiddler 根证数,应用的 URLConnection、OkHttp、Retrofit、WebView,也仍然不会信任它。

原因在 Android 的官网上有说 https://developer.android.google.cn/training/articles/security-config.html

网络安全配置

借助网络安全配置功能,应用可以在一个安全的声明性配置文件中自定义其网络安全设置,而无需修改应用代码。您可以针对特定网域和特定应用配置这些设置。此功能的主要特性如下所示:

  • 自定义信任锚:针对应用的安全连接自定义哪些证数机构(CA)值得信赖。例如,信任特定的自前面证数或限制应用信任的公共CA集
  • 仅调试替换:在应用中以安全的方式调试安全连接,而不会增加安装设备的风险
  • 选择停用文明流量:防止应用意外使用明文流量
  • 证数固定:限制应用仅安全连接到特定的证数
    在这里插入图片描述
添加网络安全配置文件

在 AndroidManifest.xml 中,application 标签下,添加 android:networkSecurityConfig 属性,指向 res/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config"
                    ... >
        ...
    </application>
</manifest>
配置文件格式

res/xml/network_security_config.xml 文件的格式如下

 <?xml version="1.0" encoding="utf-8"?>
 <network-security-config>
     <base-config>
         <trust-anchors>
             <certificates src="..."/>
             ...
         </trust-anchors>
     </base-config>

     <domain-config>
         <domain>android.com</domain>
         ...
         <trust-anchors>
             <certificates src="..."/>
             ...
         </trust-anchors>
         <pin-set>
             <pin digest="...">...</pin>
             ...
         </pin-set>
     </domain-config>
     ...
     <debug-overrides>
         <trust-anchors>
             <certificates src="..."/>
             ...
         </trust-anchors>
     </debug-overrides>
 </network-security-config>

标签含义

  • base-config 配置可信赖的域名和CA(应用范围的自定义)
  • domain-config 配置可信赖的域名和CA(网域范围的自定义)
  • domain 信赖的域名
  • trust-auchors 信任其他CA
  • debug-overrides 配置用于调试的CA
  • pin-set 固定证数集合,可设置其有效时间
  • pin 公钥的哈希值(X.509证书的 SubjectPublicKeyInfo)
  • cleartextTrafficPermitted 允许明文的HTTP
自定义可信CA

应用可能需要信任自定义的 CA 集,而不是平台默认值。出现此情况的最常见原因包括:

  • 连接到具有自定义证书授权机构(如自签名或在公司内部签发的CA)的主机
  • 仅限您信任的CA(而不是每个预装CA)
  • 信任未包含在系统中的其他CA

默认情况下,来自所有应用的安全连接(使用 TLS 和 HTTPS 之类的协议)均信任预装的系统CA,而面向 Android 6.0(API 级别 23)及更低版本的应用默认情况下还会信任用户添加的 CA 存储区。 应用可以使用 base-config(应用范围的自定义)或 domain-config(网域范围的自定义)自定义自己的连接。

因此,在 Android 7.0及以上的版本中,Fiddler 的证书会被安装到 “用户区”。但这个用户区又是默认不被信任的。因此,我们只需要添加上述配置,让应用程序信任用户区的 CA 即可

<?xml version="1.0" encoding="utf-8"?>
<network-security-config xmlns:android="http://schemas.android.com/apk/res/android">
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" overridePins="true" />
            <certificates src="user" overridePins="true" />
        </trust-anchors>
    </base-config>
</network-security-config>

第三方程序,绕过限制

下面结论(暂未验证)摘自:https://blog.csdn.net/qq_15156393/article/details/90520825?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

Android7.0及以上系统,默认只信任系统自带的CA

解决方案

1、直接使用低版本系统化的安卓手机(低于7.0)
2、使用Xposed或兼容Xposed的框架 + JustTrustMe
3、将抓包工具的证书直接安装到系统根目录中
4、VirtualXposed(VirtualAPP)
安装好后,把你要抓包的app在VirtualXposed克隆一份,连接抓包工具(例如fiddler),使用app就可以顺利抓包破解ssl pinning。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值