Wechat手表协议逆向

大类
逆向
Android
技术标签
开发-HookPatch-JS
开发-HookPatch-Java
逆向-Java
优先级
Medium
状态
Monitoring
开始日期
Dec 28, 2025
最后更新
Dec 30, 2025
Public
  • 手表微信可以实现手机+电脑+平板+手表四端登录
    • 因此如果能够成功用起来,可以作为一个保底server
    • 手表微信需要一个license才能正常登录
      • 咸鱼上10块钱一个
 
  • 目前收集到了这些版本的手表微信
    • 儿童手表微信:
      • 1.x版本(黄色手表微信):
        • 1.7.3、1.6.2、1.3.3
      • 3.x版本(蓝色手表微信):
        • 3.0-beta1、3.0.9
    • 小米专版
    • watchOS版
 
我主要分析了儿童手表微信
  • 我分析了1.x和3.x版本,都能正常使用,并且代码基本一致
  • 通过在Java中搜索cgi-bin即可找到发送微信协议的位置
  • 核心协议部分在libwechat_alita.so里,整个手表微信的项目名都叫Alita
    • 保留了大部分的日志
    • 对cgi url做了简单的异或加密,对关键request解码部分做了ollvm平坦化
  • 通过patch so实现:
    • 修改cgi <functionlist>配置,使用long link cgi
    • 修改log level并开启logcat日志打印
  • 通过frida实现了主动发送微信协议请求
    • 能够发送大部分基础请求(收发消息、图片、群聊)
    • 但是没有小程序请求的能力
  • 进一步分析了微信协议
    • 协议接口要求发 cmdid(纯数字)、cgiurl(/cgi-bin/…)、protobuf body
    • 实测发现只发cmdid或者只发cgiurl都可以正常请求
    • 实测发现/cgi-bin/micromsg-bin下面的请求基本都能发,答案是/cgi-bin/mmbiz-bin下面的请求基本都发不出去
      • 正常请求发出去错误码是0、2等
      • 不存在的cmdid或cgiurl错误码是137
      • mmbiz-bin中的请求则总是直接返回-3003,无论是short link还是long link
 
  • 后续
    • 手表微信协议目前只能收发消息比较适合用来做后台备份server
    • alita的so中实际上有一个flag声明mmtls的版本(1还是2),根据程序中写的<functionlist>,version2其实是可以发js-login等一系列mmbiz-bin请求的,但是强行patch修改version为2后,直接登录不上去了
      • 这个其实是有希望的,应该继续看一下
    • 应该重新登录抓一次包,试试能不能直接修改协议,然后自己发包