• 因为csdn自动压缩了上传的图片,导致高清图非常的小,稍后将发布可以下载的文档说明 下载地址,可以看到超清的图片,请自行下载
  • (现在经过朋友反应实在太小,重新截了一次图,这次是正常比例,但是改变了高清分辨率,如若需要高清,还是请下载)
  • https://download.csdn.net/download/sos768/11230576

  • 1.通过使用wireshark分析网络协议。
    2.了解微信认证、聊天协议。

  • 有朋友配置AP的时候遇到了一些麻烦,如果相处于同一个wifi时候,又不想用手机的热点,用宿舍的网线的话,可以使用这个: http://wifi.ggsafe.com/
  • 如若软件出错,请自行搜索: http://wifi.ggsafe.com/faq.shtml
  • 或者可以私聊博主,借用无线wifi 网卡usb进行配置

二、实验内容原理实验结果与分析

1.选择微信使用模式(微信App或者网页微信),合理配置网络环境。
【实验步骤】

  • 使用mac进行wireshark抓包,并选择使用客户端微信,同时将机器置于手机热点wifi之下
    在这里插入图片描述
  • 可以看到当前实验机器获得的ip为 172.20.10.2
    所以当前连接的AP站点ip为172.20.10.1

【实验结果与分析】

配置当前的ip以及微信所在的实验环境,如上图所示

2.分析微信登录认证方式。

【实验步骤】

  • 因为不必要的ipv6的信息传输干扰,所以先屏蔽了一些ipv6的信息
  • 以下是我之前使用的笨方法,一个一个去屏蔽
    在这里插入图片描述
  • 经过朋友提醒,还可以这么做,直接ip筛选,效果是一样的:
  • 在这里插入图片描述

在这里插入图片描述

  • 从上图可以看出,我的电脑获得的ip是172.20.10.2,并且网关是172.20.10.1

  • 此时,我的电脑正在发出dns,域名查询的包,之所以是8.8.8.8,是因为我对电脑做了一些配置,如下图所示,我的电脑会默认向一下两个dns服务器发出请求,(10.61.10.10是学校的dns服务器之一emm)。
    在这里插入图片描述

  • 当我们拆开去解读消息的时候会发现他的query是去查询这个域名 szshort.weixin.qq.com。并且在之后dns返回了查询到的IP
    在这里插入图片描述
    在这里插入图片描述

  • 当我打开完客户端,扫了二维码之后但还没在手机按下确认键的时候,我的wireshark抓到了这些包,看样子是在获取二维码和一些相关的信息。
    在这里插入图片描述

  • 点击确认之后,从抓取的包里面也可以看出,双方在不停的发包并进行ssl加密传输,和一些相关的认证信息。
    在这里插入图片描述
    在这里插入图片描述

  • 建立连接,并且获取一些好友队列的信息
    发送post请求进行data验证并且获取消息。
    在这里插入图片描述

【实验结果与分析】

成功与服务器进行了连接,并且认证成功

3.分析微信好友聊天过程。

【实验步骤】
作为测试,发送了四条消息:
在这里插入图片描述

  • 做完实验后,又去查了以下相关资料,原来抓包软件可以进行设置成ip显示成域名,下图是对之后实验的ip更直观的一种显示
    在这里插入图片描述

握手协议,也是一次认证
在这里插入图片描述
在这里插入图片描述

  • 一共抓到了以下这些包,经过分析,可以确定此次信息传输是与之前dns查询中查到一个服务器121.51.140.144进行了交互

在这里插入图片描述

  • 进行以下筛选,172.20.10.2是我电脑的ip地址
    在这里插入图片描述

  • 可以看到信息数据干净了许多,继续进行分析
    在这里插入图片描述

  • 前三个包是在进行tcp三步握手认证,由我的电脑向服务器发送syn请求,服务器收到后发送syn和ack进行确定,最后从客户端向服务器发送ack完成认证。
    在这里插入图片描述

  • 之后从第20个包开始,便一直在进行交互,不断的进行连接,传送完消息之后客户端的Fin断开连接请求,和之后恢复连接的ack,
    (在发送fin之后,一定时间内,如果客户端和服务端还有数据交互,两者可以恢复连接而不需要再进行三步握手认证)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 期间有一次重置,断开连接并且重新进行了三步握手认证进行连接
    在这里插入图片描述

  • 测试中途发现了一些不是微信服务器的ip频繁出现,如下图中的121.51.8.102,在我使用小号进行测试的时候出现了多次,而且其flags是psh和ack居多(数据传输),然后去ip138.com进行了ip查询,结果与预料相差不大。

  • 查询网站时 ip138.com (仅供参考)
    在这里插入图片描述
    在这里插入图片描述

4.分析微信群聊过程。

【实验步骤】

  • 选择了群聊进行分析,一共发送了以下这些信息:
    在这里插入图片描述

  • 使用121.51.24.106进行ssl加密传输,在中间传输的时候出现了数据重传的情况,说明当不可达时,数据包会自动选择进行重传,直到传输成功。
    在这里插入图片描述

  • 这一步里面syn同步请求包也在不断的重新发送,直到之后的syn+ack包的确认连接使得连接开始建立,非常经典的tcp三步握手认证。

  • 在这里插入图片描述

  • 与和之前的单独私聊的过程几乎一致,只是请求的服务器发生了改变,从121.51.24.144 转换成了121.51.24.101
    在这里插入图片描述

  • 这是客户端向服务端提交数据和服务端向客户端发送的回应包
    可以看到传送的信息是进行加密之后的,只有提交的data数组 是可以明文可见的,还有服务端的回应中的code等信息是可见的
    在这里插入图片描述

  • 这些http请求和回应组成了信息交互的大部分过程
    在这里插入图片描述

5. 总结微信聊天协议

  • 可以发现微信的聊天信息都进行了ssl加密进行传输,并且在选择服务器的时候会选择最近的服务器。更容易发现的是,微信的聊天基于http协议,通过get,post与服务器进行交互,穿插在包里的http响应和请求包足以证明这一点,而当我把传送数据替换成图片时,交互的服务器并没有发生大的改变,依旧是在121.51.24.144和121.51.24.101进行切换交互。

  • 对于微信好友头像的获取,从wx.qlogo.cn和cwx.qlogo.cn里进行get获取
    在这里插入图片描述
    在这里插入图片描述

  • 在做完了全部客户端的测试之后,我又去进行了web端的测试,发现传输消息使用的服务器域名为szshort.weixin.qq.com,文字数据和图片的传输,get和post请求,而在调用地图的时候,会转换成另一个服务器去调取数据进行同步。以下是一部分web测试数据。
    在这里插入图片描述

  • 对web端来说,原来还有一些密文随机数的认证方式,且随时间会发生改变

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

三、本课程心得及建议

  • 在动手实验的时候,遇到了很多的困难,但在自己的动手实践,和在不断的尝试中获取的知识来看,这是值得的。
  • 在失败中,我收获了许多,巩固了一些基础知识,在复杂的包堆里面找到了正确的包,也学会了如何去过滤一些不需要的包,希望这门课之后会更加的广阔,也希望更多的同学可以收获宝贵的知识。

参考blogs

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐