-
-
[原创]企业微信协议发消息字段分析
-
发表于:
2021-7-9 21:14
32653
-
企业微信协议发消息字段分析
声明:本文只做技术交流,不可用于商业用途,否则后果自负。
1. 背景
这两年企业微信的崛起,很多公司开始用它来做私域流量的运营。个微的风控越来越严,很好奇企微是否会借助个微的风控算法呢,所以就研究看看吧。登陆流程搞定后,只能感叹企微风控做得不行,可能跟灰产都不怎么会用企微有关吧,也可能是现在还处在红利期,鼓励大家把营销转到企微上来。登录搞定了,那就再看看如何收发消息,于是把分析的字段分享出来,供大家参考,相关字段数据有进行修改,如果读者发现对不上,请见谅。
2. 发消息请求的构造
发消息优先使用长连接,当长连接失效时,会使用短连接进行发送。但是当长连接失效且重连失败后,就收不到消息了,这是企业微信的bug吧。
发消息的请求由两部分构成,一部分是包头pb,每个请求的包头就只有个别字段有差别,用于说明是什么类型的请求,另一部分是包体pb,携带与请求相关的数据。
2.1 包头pb的格式
包头pb如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 1 : 1
2 : 6
3 : 1684752517971958 (发送者 id )
4 : 131075
5 : 1001 (请求类型)
6 : 79
7 : 128
8 : "0AA0718F-163B-45B5-A3C1-C8B0F32FF18A" (设备 id )
9 : "3.1.5.*****" (app版本号)
10 : 1970335353054066 (公司 id )
11 {
1 {
1 {
1 : 1
2 : 0
}
2 : "7u\213\333U2\010l\320+\317\007]\333\222g\nJgfg[\034\365\265\tjU\3266\006\335"
3 : "X\003G\325l\245\003\353H\031\213>G%\263\326\357\236l\016\222\3751\232\032\334P\234\235gL\207\007l\016\316\374\223\325\331L2\301\250\201\034,lH^\035\254}BC8W\001\010\2368C\257\356"
}
4 {
1 {
1 : 0
2 : 0
3 : 0
}
}
}
12 : 1
13 : 0
14 : ""
15 : 0
16 : 2251914379752856 (发送者uin)
17 : 0
|
字段11是一个key,在登录阶段返回的,每个请求都必须携带该数据。
2.2 包体pb的格式
包体pb如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 1 : 10670659 (消息 id )
2 : 0
3 : 1688852877731652 (接收者 id )
5 : 0
6 {
1 {
1 : 0
2 {
1 : "hello world" (文本消息)
}
}
}
9 : "CAQQl9SrgwIY9r/bn4qAgAUgnrbv6Qc="
10 : 131075
13 : "\345\210\233\345\247\213\344\272\272" (昵称)
14 : 1
15 : 131072
17 : ""
18 : 1
19 : 2
20 : 0
21 : 0
|
字段9解密出来的格式如下
1 2 3 4 | 1 : 4
2 : 162877655
3 : 1684752517971958 (发送者 id )
4 : 1791074718
|
3. 发消息返回结果的解析
返回结果的pb数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 1 {
1 : 0
2 : "ok"
}
2 {
5 {
1 : 1023396 (服务器保存的消息 id )
2 : 10691567
3 : 0
4 : 1684752517971958 (发送者 id )
5 : 1688852877731652 (接收者 id )
6 : 0
7 : 0
8 {
1 {
1 : 0
2 {
1 : "hello world"
}
}
}
12 : 1626417164 (时间戳)
13 : 131074
14 : 131075
15 : "CAQQl9SrgwIY9r/bn4qAgAUgnrbv6Qc="
16 : "\345\210\233\345\247\213\344\272\272"
17 : 1688852877731652
21 : 0
}
6 : 0
}
|
响应数据个人觉得没必要返回消息内容了吧,毕竟是自己发出去的消息。只需要返回消息id等必要信息就行了,减少数据量。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课