ipad协议827版技术分析

微信网页版的通信协议,很多人都想自己写了个程序,实现微信的登录、初始化、读取联系人列表、发送微信、接收微信等功能,其实大家在网上看一下也有不少人做过这方面的内容。我主要用的工具是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版本高多了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值