Fiddler手机抓包使用


手机上无法直接查看网络请求数据,需要使用抓包工具。Fiddler是一个免费的web调试代理,可以用它实现记录、查看和调试手机终端和远程服务器之间的http/https通信。

PC端Fiddler使用

安装

配置

  1. 手机上的应用很多涉及到个人信息,采用比较安全的HTTPS加密过,而fiddler默认只捕获http会话而不抓取HTTPS报文,导致打开fiddler后就打不开https网页。
    解决办法:打开Fiddler->Tool->Fiddler Options->HTTPS tab,勾选上并Capture HTTPS CONNECTs(捕获 HTTPS 连接)和 Decrypt HTTPS traffic (HTTPS 请求解密),并安装证书(首次使用无证书,会弹出是否信任fiddler证书和安全提示,直接点击yes就行),重启Fiddler生效。在localhost:8888中也可以安装证书。
  2. 如果想要捕获手机上的通信数据,就需要手机连接上Fiddler代理,而Fiddler默认是不允许其他设备进行连接的。
    解决办法:点击 Fiddler->Tools -> Options,在 Connections 面板选中 Allow remote computers to connect 允许其他设备连接(此操作需重启Fiddler生效)。
  3. 修改手机WLAN需先代理查看电脑ip地址。
    解决办法:可通过cmd命令行输入ipconfig查询。也可以将鼠标置于fiddler右上角的online图标中显示电脑的ip地址。

手机端Fiddler使用

证书配置

需要在移动终端(手机或pad)上指定代理服务器为Fiddler所在主机IP(需要处于同一网络),端口默认8888(即在PC端配置的端口)。

  1. 要保证手机和安装有fiddler的电脑处在同一局域网内,手机能ping通电脑。
    解决办法:家用或办公环境把PC和手机WLAN连接上同一个路由器的无线SSID获取到同一网段内的IP地址即可。在你的手机上打开你连接的 wifi高级设置,设置http代理服务器和端口,IP
    设置为DHCP。这里的服务器地址就是PC端刚找到的IPv4地址,端口默认8888。
  2. 在手机上需要安装Fiddler根证书,因为Fiddler是通过自己生成的证书对网络请求重新签名进行https会话解密的,如果不安装证书的话只能抓取HTTP请求。
    解决办法:打开手机浏览器,输入Fiddler Server地址http://ipv4.fiddler:8888/(因为fiddler装在PC上,所以Fiddler Server地址就是PC的IP地址,带上默认端口号8888),或直接输入http://pcip:8888/。跳转到 Fiddler Echo Service 证书下载页,点击FiddlerRoot certificate下载并安装,为证书命名后点击确定。

问题处理

  1. PC端Log报错:
    !SecureClientPipeDirect failed: System.Security.Authentication.AuthenticationException
    解决办法:证书未被信任,导致主机拒绝连接。解决报错的方法是将fiddler设置中 Decrypt Https traffic 选项去掉,但是这样很可能将无法抓取https包。有一个Stackflow的解释:

    TLS1.0可能是Fiddler中最受支持的HTTPS协议。如果发生报错,相关的Android应用程序已启用Certificate Pinning(证书锁定)。如果您非常想避免锁定,可以越狱设备并使用许多第三方工具箱中的任何一个禁用锁定代码即可。

    关于证书固定:

    极少数HTTPS客户端应用程序支持一种称为“证书固定”的功能,该功能会将客户端应用程序硬编码为仅接受一个特定的证书。当证书固定的应用程序通过CONNECT隧道与Fiddler进行HTTPS握手时,它将检查响应的证书,并在发现Fiddler生成的证书时拒绝发送任何进一步的请求。不幸的是,没有通用的解决方法可以解决此问题。

  2. 手机端打不开Fiddler Server地址,或手机设置代理后,无法访问网络了,如断网般。
    解决办法

    1. 在PC端打开注册表,在HKEY_CURRENT_USER\SOFTWARE\Microsoft\Fiddler2下创建一个DWORD,值设置为80(十进制)
    2. 编写FiddlerScript rule,点击Rules > Customize Rules,用ctr+f查找到OnBeforeRequest方法添加一行代码:
      if (oSession.host.toLowerCase() == "webserver:8888"){ oSession.host = "webserver:80";}
      //pass
      if (m_AlwaysFresh && (oSession.oRequest.headers.Exists("If-Modified-Since") || oSession.oRequest.headers.Exists("If-None-Match")))
           {
               oSession.utilCreateResponseAndBypassServer();
               oSession.responseCode = 304;
               oSession["ui-backcolor"] = "Lavender";
           }
           if (oSession.host.toLowerCase() == "webserver:8888"){ oSession.host = "webserver:80";}
       }
      //pass

还原手机状态

抓包结束后,手动还原手机状态,方法如下(不同机型可能有些微差别):

  1. 停止电脑对手机的网络监控:系统设置-WLAN,长按wifi修改网络,高级选项找到代理,去掉手动代理即可;
  2. 删除手机中证书:安卓系统设置-系统-设备安全-受信任的凭据-用户 ,点击证书删除即可;

评论
  目录