【以太网数据包】微信数据包

【以太网数据结构】系列文章链接
http://blog.csdn.net/u012819339/article/category/5849175


本次抓包主要针对微信app进行,时间是2016年9月

微信使用了一下几种协议
sync协议:(大量)在发送微信消息的时候会发现大量该协议的数据包
http协议:(大量)在访问微信朋友圈的时候会发现大量该协议的数据包,以及微信支付的时候(不要怀疑,在填写微信支付密码以及支付成功的过程抓包显示确实是走的http协议,而不是https,微信对http的post数据自行进行了加密)
ssl协议:(少数)在涉及到比较隐私的数据时会发现该协议的数据包,比如:其他app通过微信开发者平台提供的接口调起微信支付窗口的过程
unknown协议:(一般)叫这个名字是因为我确实不知道该私有协议叫什么名字,暂且称为unknown协议吧,在通过微信传输图片的时候发现大量该协议的数据
其他未知协议:微信app内部有很多模块,比如摇一摇,附近的人,发红包 等等,这些都可能有其对应的协议,目前还不能抓全

微信sync协议

先看看抓包数据:
这里写图片描述

微信sync协议头部有5部分组成,图中分别标出,解释如下:
1. 4字节 数据包长度(sync包头+sync包体),这个长度和tcp报文去掉tcp头的长度是相等的
2. 2字节 头部长度(一般为0x0010,即16字节)
3. 2字节 版本号(目前为0x0001)
4. 4字节 操作数
5. 4字节 序列号

程序中可以使用以下sync报头结构体

//author: arvik
//email: 1216601195@qq.com
//微信sync协议报头
typedef struct wx_sync_hr
{
   u_int32_t packet_len; /* 前4字节表示数据包长度,可变* */
   u_int16_t header_len; /*2个字节表示头部长度,固定值,0x0010*/
   u_int16_t thx_ver; /*2个字节表示版本,固定值,0x0001*/
   u_int32_t operation_code; /*4个字节操作说明数字,可变*/
   u_int32_t serial_number; /*序列号,可变*/
}__attribute__((packed, aligned(2))) wx_sync_hr_t;

微信unknown协议

先看看抓包数据:
请求包:
这里写图片描述
返回包,这里就只截图做个对比:
这里写图片描述

按照图中标出的顺序,解释如下:
1. 1字节 标识,一般为0xab,目前未见过其他值
2. 2字节 标识,一般为0x00
3. 2字节 报文长度,如果低于或等于tcp分段长度的话,这个值是和tcp报文数据部分长度是相等的(注意:第2、3部分有可能都表示报文长度,即:用4字节表示报文长度
4. 2字节 标识, 未知
5. 16字节 标识,一般都为0x00
6. 2字节 标识, 数据长度, = 总长度 - 头部长度(25字节)

程序中可以使用以下报头结构体:

//微信推送图片协议头,协议头部25字节
typedef struct wx_unknown_hr
{
    uint8_t ver; // 标识 一般为0xab
    uint16_t flag;// 标识 一般为0x0000
    uint16_t tot_len; //报文长度(包括报头,和tcp的数据长度是一样的)
    uint16_t seq; //标识,未知
    char unbuf[16]; //未知,一般全部为0x00
    uint16_t bodylen; //数据长度,一般为  tot_len - 25
}__attribute__((packed)) wx_unknown_hr;

微信http协议

微信http数据就比较多了,请求基本都是post方法,就不一一列举了,随便抓个包
这里写图片描述

它有个显著的特点,就是User-Agent字段为MicroMessenger Client,这是微信客户端特有的一个UA标识
另外,也可以通过host找到微信域名的关键字weixin来确认这是微信的数据包

微信ssl协议

ssl协议中往往包含的是http协议,所以整体就是https协议,可以通过ssl协议传输公钥中的域名来确定,不过用程序分析起来就比较麻烦了,一般做协议分析只分析到ssl协议包报头位置,并不深入确定某帧数据包ssl协议属于谁
抓个包看看:
这里写图片描述

证书中指定的域名为*.swiftpass.cn,实际抓包中发现在微信支付的过程中可能使用了该域名pay.swiftpass.cn,用站长工具查询该域名对应的ip为203.195.142.238,地址为香港腾讯云
这里写图片描述

另外,arvik还写了几篇关于深度报文分析的文章,里面讲解了基于开源框架opendpi的ndpi的源码框架以及协议分析器的编写,有兴趣的鞋童可以前去观看我的《智能路由器》专栏一探究竟!

时间仓促,错误难免,如果发现博客有误,欢迎指正!


好了,到此结束,作者arvik
【以太网数据结构】系列文章链接
http://blog.csdn.net/u012819339/article/category/5849175

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值