首页
社区
课程
招聘
[原创]企业微信协议发消息字段分析
发表于: 2021-7-9 21:14 32773

[原创]企业微信协议发消息字段分析

2021-7-9 21:14
32773

企业微信协议发消息字段分析

声明:本文只做技术交流,不可用于商业用途,否则后果自负。

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等必要信息就行了,减少数据量。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 2
支持
分享
最新回复 (7)
雪    币: 3221
活跃值: (3031)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2

安全性确实很差

2021-7-10 21:30
0
雪    币: 2106
活跃值: (2639)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
3

不错

最后于 2022-11-9 18:59 被evilbeast编辑 ,原因:
2021-8-7 05:26
0
雪    币: 345
活跃值: (720)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
啊这,明文的probuff?
2021-8-21 21:07
0
雪    币: 82
活跃值: (187)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
哎,已经被玩烂了!
2021-9-14 18:38
0
雪    币: 281
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6

已解决

最后于 2021-11-2 11:23 被机械皇帝编辑 ,原因:
2021-10-28 23:34
0
雪    币: 755
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
你应该是没有干过产品吧  主要这个企微消息内容不是返回给你 而是通知给各个客户端的 方便各个客户端ui显示之类的(估计后续会有优化,例如wx发的就不显示,直接渲染了)
微信协议里的消息是各个C端自己去请求的 所以不需要返回具体内容 有通知自己去拿
2021-12-23 08:10
0
雪    币: 1
活跃值: (280)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kbb
8
15年就拿到protobuf了
2022-1-12 02:52
0
游客
登录 | 注册 方可回帖
返回
//