微信网页版的通信协议,很多人都想自己写了个程序,实现微信的登录、初始化、读取联系人列表、发送微信、接收微信等功能,其实大家在网上看一下也有不少人做过这方面的内容。我主要用的工具是HTTPAnalyzer,我认为这个是目前分析http/https协议最好用的工具了,比wireshark和fiddler都清晰明确,推荐大家分析http/https协议内容使用这个工具。其实分析了协议自己再写代码就很容易了。
我们如何入手分析呢?
1.抓包
抓包显然是没有办法看到啥的,不过我们只关心短连接,所以我们需要一个环境来触发短连接的mmtls初始化,而且我们只关心mmtls,并不关心其他的信息,所以,我们可以利用一个早期版本,理由是,早期版本可以屏蔽掉长连接,而强制使用短连接。
2.算法
显然我们应该先对算法,有一些了解,甚至我们应该先阅读一下github上的tls1.3的实现,这样我们才能对tls1.3的答题轮廓有些印象,在我们逆向分析的过程中,省去很多的麻烦,所以我们应该先了解以下算法,包括以下算法的原理和使用。
ECDH(ecdh主要用于秘钥协商,签名验证)
AESGCM(aes gcm 带校验的aes加密算法,相比于之前的aes cbc要更安全)
hkdf扩展(hkdf扩展是用来扩展秘钥的)
sha256(哈希算法,基本上用于验证数据)
hmac(签名)
Hook
在微信的登录请求中,有个rqt(Reliability Qualification Test)算法,在微信风控中扮演着重要角色,根据这个算法,可以对登录微信的环境可靠性进行判断,做为是否是外挂的重要依据。当然,除了这个算法,24字段里面的那么多子字段也是风控的依据。7.0.x版本的rqt比较简单,8.0.x版本的rqt就比较复杂了,不过也是可以搞定的。
8.0.x的rqt算法,入口函数与7.0.x一样,也是先求md5值,再对md5进行处理。
接着进行魔改后的SHA*算法。
再接着,跟0x85来了一些运算。
最后,使用了类似7.0.x的处理,才得到最终结果。
最终结果,7.0.x的rqt值是以0x21开头,8.0.x的rqt值是以0x42开头。
因为对于如下式子
1
(r1 << 5 | key & 0x1f) << 24
7.0.x版本,r1=1, key=1,所以
1
1 << 5 | 1 & 0x1f) << 24 = 0x21000000
而对于8.0.x,r1 =2, key=2,所以
1
2 << 5 | 2 & 0x1f) << 24 = 0x42000000
可以看出来,算法难度比7.0.x版本高多了。
标签:ipad,协议,rqt,853,微信,7.0,算法,8.0,版本 From: https://blog.csdn.net/2403_87755661/article/details/143505746