微信红包抓包和原理分析

抓包方式

抓取微信红包数据包的工具是 Wireshark。Wireshark 的功能无需赘述了,最强大
的网络封包协议分析软件,没有之一。

另外还有手机型号系统和微信版本的问题,尝试过安卓系统手机和高版本的微信,只抓到两个微信红包数据包,难以进行分析,最后确定是在苹果系统和微信 6.5版本环境下才能抓到理想的数据包。

抓取微信红包数据包的方式就是笔记本电脑通过 WIFI 连接路由器上网,然后利用笔记本电脑网
卡的双频收发功能,连接 WIFI 的同时开启热点,手机WIFI 连接电脑开启的热点上网,最后在
Wireshark 中监听开启笔记本热点的网络连接即可。注意到 Wireshark 的抓包能力过强,抓到网络
协议的多层数据包,信息量巨大繁杂,因此要在过滤器工具栏中添加 http 协议的过滤规则,方便抓包。

抓包分析

关于微信红包,一般是发红包,收红包和查看红包这三个流程。

发红包

收红包

查看红包

每个数据包的Info一栏中的英文字段能直观地反应出这个数据包的作用,而高版本的微信再次巩固了安全性,对Info一栏进行了加密,变成复杂的英文数字组合。也可以看出红包的发起请求方法为POST,参数不会被保存,比起GET请求方法更加安全。在这些数据包中任意选中一个查看详情,发现主要交互域名为short.weixin.qq.com,实验时服务器的IP地址为同一个,为182.254.92.141

红包延迟

抢红包延迟可以分为网络传输延迟用户终端延迟两类。

从数据包角度来看,网络传输延迟主要发生在收到红包和打开红包这两个会话的延迟,如下图时间所示,客户端点击收到的红包消息时请求服务器,直至收到服务器返回红包状态的响应,来回延迟大约为0.11s。客户端点击拆开红包时请求服务器,直至收到服务器返回红包已打开和金额详情的响应,来回延迟则大约为0.53s。可见拆开红包时涉及了红包金额分配算法运行和支付管理入账等安全操作,需要更多的时间,服务器回复客户端显然要比单纯回复红包是否被抢光的前一个请求慢得多。

用户终端延迟则包括了用户操作延迟用户终端UI延迟。用户操作延迟无可厚非就是看人的反应和点击速度快慢了,因人而异。用户终端UI延迟集中在屏幕的物理响应和UI绘制延迟,据网上资料显示,苹果手机凭借着优异的系统性能和屏幕响应机制,抢红包比安卓手机更占优势。

参考

至于供应商流量环境和WIFI环境下的抢红包速度对比,一般而言,WIFI抢红包速度胜于流量。距离方面,无线传输距离越长,则耗费时间越长。WIFI环境下用户终端到路由器距离比流量环境下到基站距离短,减少了延迟,信号到达路由器或者基站后就能以有线光缆光速传输。设计标准方面,流量环境下的最佳技术LTE的目标时延为100ms,而WIFI在轻载之下可以达到10ms左右,速度相差了五倍。另外一个考虑因素是网络运营商建设,WIFI连接的有线网络运营商电信的骨干网建设优于流量运营商移动联通。腾讯的微信服务器和相关的红包服务器更有可能搭建在中国电信骨干网上。

红包规律

研究红包领取顺序与领取到的红包金额之间的关系。发红包设计方案如下:红包总额为20元,红包总数为20个,一共进行十轮红包发放,然后统计数据并分析,表格数据如下,黄色高亮为该轮最佳手气。

从散点图看出,绝大多数红包的金额大小分布在所有样本均值1附近。横坐标越大,纵坐标增大的概率越高,也就是说,最佳手气大多分布在领取顺序靠后的编号中,领取红包顺序越后,越容易领到最佳手气红包。因此,对于喜欢拼最佳手气的冒险主义者来说,不必见到红包就马上下手,静候片刻再拆开,或许能愿望成真,不过需要承担过于迟拆开导致红包被领光的风险。

从均值折线图看出,均值随领取顺序变化波动较为剧烈,但总体还是围绕1上下波动变化的,也有可能是样本数据过少,个体偶然因素影响大,导致样本不够典型。因此,想利用上面“越后抢红包越容易拿最佳手气”这条规律的也不用沾沾自喜,白忙活一场抢红包大战下来,有可能抢到的跟别人的随缘抢也差不多,大家抢到的红包面额在概率上是大致均匀的

从标准差折线图看出,横坐标增大,纵坐标也增大,就是说标准差随着领取时间的增大而增大。标准差能够描述数据的离散程度,说明数据的稳定性,标准差越大,数据则波动得越剧烈。这也印证了前面的说法,往后容易领到大金额红包,为了把均值稳定在1附近,也容易领到小金额红包,因而这种极端值过多的情况使得标准差和方差增大。

总结,研究得到的微信红包规律性如下:微信红包是公平的,多次抢红包,领取到的金额是差不多的。每次领取顺序越前,领到的红包金额越是稳定在均值,领取顺序越后,领到的红包越是可能手气最佳或者手气最差。

红包算法

根据资料,可认为微信红包满足的是截尾正态分布,算法即在截尾正态分布中取随机数,并用其求和数除以总价值,获得修正因子,再用修正因子乘上所有的随机数,得到红包价值。这种分布意味着:减少抽取红包大小分布的方差,让更多的人抽取的红包在均值附近,同时仍给一小部分人抽取大红包的机会,总体来说增加了红包抽取人的积极性和游戏的公平性。

并且为了防止最后领红包的人领时红包余额为0,红包机制可能为:当发红包者<准备红包>的时候,程序自动依照截尾分布产生了相应大小,相应个数的红包,然后随机发给抽取红包的人。同样,这样的一个随机过程有助于增加游戏的公平性,也减少了红包抽取人投机操作(亦即譬如故意等钱包半空的时候再抽取)的动机。 也即是说,不论先拿后拿,期望都是相同的。

参考


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!