本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除!
抓包
网络上说是ws的包,但是我找到的是HTTPS的包:/v1/message/send
请求体还原
网络上说是protobuf格式的,那我们就还原下protobuf文件先
关于这部分不想多写,因为是最简单的了。不管是跟栈还是直接搜索请求体中那几个能看懂的字符串都能找到protobuf部分,然后将代码直接丢给DeepSeek去还原就行了。
这里给不是很懂protobuf的人提一嘴,这东西就像对象,里面能一层套一层,你要是全部都还原的话工作量太大了,假设请求的数据里面没有A字段那么关于A字段的部分可以直接省去还原。
下面就是还原后的结果了,网上大部分的文章也就到这一步了。

请求体字段分析
咋们来看看哪些字段是要逆向的。
- 首先headers中貌似没有,不管是webid还是fp直接从浏览器复制就行。
build_number貌似是固定值。token,ts_sign从浏览的本地存储中复制。sdk_certbase64解码下就知道了。reuqest_sign这个是关键。conversation_id貌似是接收人和发信人id(其实也是create接口返回)。sequence_id和conversation_short_id暂时不知道。client_message_id就是uuid4。ticket暂时不知道
reuqest_sign分析
你没看错是reuqest_sign,不是我拼写错误,而是就叫这个名字…..咋们直接搜索。s就是你发送的一些数据了,然后使用&进行拼接起来当参数传入到sign方法,那接下来就是进入sign方法了。

单步进入的,给DeepSeek分析下知道req_sign就是我们想要的===>l就是我们想要的===>l来源于(0,===>参数f来源于
v.MU)(f || "")y.sign(e || c)

进入sign方法后实际上就知道加密方式了,本来想使用python直接写算法的,但是我不知道算法有没有魔改就选择直接扣代码了。

我们已经知道了f的值了,那么(0,v.MU)(f || "")就简单了,跟一下知道是hextob64方法。自此完成了此参数的逆向。整理下方法就是下面这样了

conversation_short_id和ticket分析
时隔几天又来更新了,这次搞的是conversation_short_id和ticket。
/v2/conversation/create接口返回的!逆向protobuf就行,结束。
sequence_id分析
接口索引?每次加一,结束
有开源代码吗
您好,能劳烦您贴一下完整的reuqest_sign构建代码吗,我跟了一遍js但是还是发送消息失败