Wxbot
PC微信Hook模块、Hook WeChat / 微信逆向、微信机器人、WeChatRobot
Install / Use
/learn @jwping/WxbotREADME
wxbot - 微信聊天机器人
适用于微信(WeChat 3.9.8.25 | 3.9.8.15 | 3.9.7.29) 可在Windows PC微信 设置 - 关于微信 - 版本信息 中获取您当前的微信版本,如果您当前的微信版本不在上述可用的版本列表中,请至下方 3、可用版本微信安装包获取 选择最新版微信重新安装使用
未经过大量测试,存在封号风险!
免责声明
本仓库发布的内容,仅用于学习研究,请勿用于非法用途和商业用途!如因此产生任何法律纠纷,均与作者无关! 无任何后门、木马,也不获取、存储任何信息,请大家在国家法律、法规和腾讯相关原则下学习研究! 不对任何下载和使用者的任何行为负责,请于下载后24小时内删除!
关于免注
因注入版本(注入DLL,功能多点)被举报了后续不再更新了,和使用方式(
READNE.md)一起放在wxbot-injector目录下了 现在只更新免注版本了 (免注只是不注入DLL了,并不是真的不需要注入!)
1、运行
bin目录下wxbot-sidecar.exe,直接运行即可
- wxbot-sidecar.exe (bin/wxbot-sidecar.exe)
多种情况说明:
- 当无微信进程在运行时会主动拉起微信(会从注册表找微信安装目录,如果是非Setup方式安装的可能拉不起来,那么请手动启动微信并使用
-p参数指定pid) - 如微信已运行(非多开模式下)会获取当前运行中的微信进程号
- 您也可以使用
-p参数手动指定微信进程号
> .\wxbot-sidecar.exe -p 30568
> .\wxbot-sidecar.exe --help
Usage: wxbot-sidecar.exe -p [pid] [ OPTIONS ] [ VALUE ]
Options:
-p, --pid [ pid ] Specify the process number for injection
-c, --config [ path ] Specify the configuration file path
-a, --address Specify listening address (e.g. 0.0.0.0:8080)
-b, --auto-click-login Automatically click login when there is a login button
-q, --qrcode-callback If there is a QR code when WeChat is not logged in, specify the callback address for the QR code URL, using English commas as as separators (e.g. http://127.0.0.1:8081/callback,http://127.0.0.1:8082/callback)
-w, --wechat [wechat_path,optional] Ignoring the -p parameter will pull up a WeChat instance. Please use this -w parameter after lifting the multi opening restriction!
-s, --silence Enable silent mode(without popping up the console)
-m, --multi Remove WeChat multi instance restrictions (allowing multiple instances)
-v, --version Output Version Information
-h, --help Output Help Information
目前免注入版本仅支持 3.9.8.25,请务必确认版本号正确
Linux下Docker部署
在
Linux下使用Docker部署wxbot全部流程已经跑通了,目前构建的公共镜像测试时间不长稳定性未知,建议各位使用时先测试 构建方式在docker路径下查看README.md和Dockerfile
ENV:
WXBOT_ARGS:wxbot的运行参数,默认已经指定了-w和-b参数
WINEPREFIX:指定wine运行的目录(一些驱动文件、程序目录的存放地址),基本无需变动
# 运行
# -e 指定环境变量
# -p 指定端口映射,这里是将本地环境的8080端口映射到容器内的8080端口,可按需更改
$ docker run -itd --name wxbot -e WXBOT_ARGS="-q xxx" -p 8080:8080 registry.cn-shanghai.aliyuncs.com/jwping/wxbot:v1.10.1-9-3.9.8.25
# 如果希望将微信的数据持久化出来(包括指定wxbot.json),请使用-v参数把/home/wxbot目录映射出来
$ docker run -itd --name wxbot -e WXBOT_ARGS="-q xxx" -p 8080:8080 -v xxxx:/home/wxbot registry.cn-shanghai.aliyuncs.com/jwping/wxbot:v1.10.1-9-3.9.8.25
# 可能会刷一些错误日志,不用担心,不影响使用
# 查看登陆URL,可通过百度随便找个二维码在线生成工具将登陆URL转为二维码后使用手机扫码登陆
# 再次提醒,URL不是直接访问出二维码,或者手机微信访问就可以登陆,是需要百度一个二维码在线生成,将此URL生成为二维码后使用手机微信扫码登陆!
# wxbot第一次运行时需要进行一些初始化动作,时间会较久(大约3-5分钟),此命令会占用shell不断输出,5分钟内无输出也可能是正常的,等待它初始化完成后输出登陆地址即可,期间任何报错都可以忽略,只要容器没有退出运行都可以继续等待
# 二维码扫描确认登陆后也需要一段时间才会触发服务端口监听(因为微信也有一些初始化动作),期间他也会一致刷登陆URL,这是正常的,后面再次启动就不需要了
# 直到日志出现Http Server Listen 0.0.0.0:8080,那么就可以进行访问验证了
# 正常来说初始化动作不会超过五分钟(具体视你的环境配置),如果出现了login url但是没有具体的地址并且一直无输出了那么大概率挂掉了,请尝试使用docker rm -f wxbot后重新run一个
$ docker logs -f wxbot
# 如果最终日志输出报错:
Manager Init Base faild: -3
Please review the logs and provide feedback
Manager init faild: -1
那么这可能是您当前的docker版本较低(> 20.10.8),或者在docker run时添加--security-opt seccomp=unconfined参数,完整运行命令如下:
$ docker run -itd --name wxbot -e WXBOT_ARGS="-q xxx" -p 8080:8080 --security-opt seccomp=unconfined registry.cn-shanghai.aliyuncs.com/jwping/wxbot:v1.10.1-9-3.9.8.25
# 如果您还是无法成功运行,那么请尝试registry.cn-shanghai.aliyuncs.com/jwping/wxbot:v1.10.1-8-3.9.8.25镜像,启动命令如下:
$ docker run -itd --name wxbot -e WXBOT_ARGS="-q xxx" -p 8080:8080 registry.cn-shanghai.aliyuncs.com/jwping/wxbot:v1.10.1-8-3.9.8.25
# docker运行微信是加了自动登陆点击的,所以对于二次及以上的运行会自动触发登陆,只需要等待手机上弹出登录框即可,如果启动长时间无响应请使用下面的命令重启
$ docker restart wxbot
2、使用
如果您在使用时遇到了缺少运行库的报错 如:由于找不到
MSVCP140.dll,无法继续执行代码。重新安装程序可能会解决此问题 如果您遇到了此类问题可通过文档最下方的网盘链接中下载 微软常用运行库.exe 进行安装 或通过此链接下载最新微软常用运行库合集解决
如果您不希望在启动时弹出命令行窗口(CMD黑框框),那么您可以使用-s参数以静默方式运行!
2.1、自动登陆
目前已支持自动登陆,这里有两种情况:
- 之前微信已登陆过,再次启动时出现登陆按钮,如果您启动
wxbot-sidecar时指定了-b参数,则会自动触发登陆,您只需在手机端确认登陆即可(请注意,当您使用-s/--silence参数进行静默运行时-b/--auto-click-login参数不生效!) - 之前微信未登陆过或被取消登陆,此时会渲染出二维码图片,您可以在命令行参数中指定
-q参数,例如:-q http://127.0.0.1:8081/qrcode-callback来指定一个二维码图像的回调地址,或者您也可以在配置文件中指定(参考下方的配置文件示例),当然如果您就在屏幕前,您可以直接扫码登陆
配置二维码图片回调时,命令行参数中指定的回调地址优先级要高于配置文件
2.2、多开
- 如果您只有一个微信实例在运行并需要注入或快速上手,那么您无需关心其它参数,直接双击运行即可
- 如果您需要多开微信,那么请先使用
wxbot-sidecar.exe -m解除微信多开限制(执行时机并不重要,您可以在任何情况下去解除多开限制) - 如果您已经解除了多开限制,并希望对运行中的多个微信实例进行注入:
- (可选)使用
-a参数指定每个实例监听的地址(格式为:ip:port),如果您的配置文件中未指定addr或地址冲突,那么此-a参数是必选项,否则会导致端口冲突 - (可选)使用
-c参数指定第二个配置文件地址,如果您不指定一个新的配置文件地址,那么可能会导致您多个wxbot-sidecar实例共用一份配置文件(包括但不限于回调地址操作会同时影响该配置文件),推荐用法是对于多开实例每份实例使用-c参数去指定不同的配置文件运行
- (可选)使用
- 请注意!如果您在多开模式下希望使用
wxbot-sidecar.exe拉起新的微信实例,那么您需要为每个微信新实例加上-w参数,例如:wxbot-sidecar.exe -w或是wxbot-sidecar.exe -w -a 0.0.0.0:8081
2.3、配置文件
配置文件支持两种方式分别是:
- wxbot.json: 这是默认的配置文件(如果有的话)
Tips: 配置文件路径为
wxbot-sidecar.exe所在的同级目录,或使用-c参数指定配置文件路径 配置文件为json格式,默认不自动创建! 配置文件优先级:-c参数指定的配置文件 > wxbot.json > 无配置文件时的默认值
2.3.1、配置文件示例
{
"addr": "0.0.0.0:8080",
"sync-url": {
"qrcode": [
{
"timeout": 3000,
"url": "http://localhost:8081/qrlogin-callback"
}
],
"public-msg": [
{
"timeout": 3000,
"url": "http://localhost:8082/callback"
}
],
"general-msg": [
{
"timeout": 3000,
"url": "http://localhost:8081/callback"
}
]
},
"authorization": {
"enable": false,
"users": [
{
"user": "admin",
"password": "123",
"token": "token123"
},
{
"user": "user",
"password": "321",
"token": "token321"
}
]
},
"root-dir": "D:\\WeChat",
"log": {
"level": "info"
}
}
- addr: wxbot服务监听地址(固定为ip:port形式)
- sync-url: http回调地址列表(建议通过下面的/sync-url接口修改,不要手动修改)
- qrcode: 登陆界面出二维码图像时,二维码URL的回调地址
- url: 回调url
- timeout: 回调超时时间
- general-msg: 普通类型消息回调地址
- url: 回调url
- timeout: 回调超时时间
- qrcode: 登陆界面出二维码图像时,二维码URL的回调地址
Tips:这里的http://localhost:8081/callback只是一个例子,而并非必须的,如果您未启动此回调地址,那么请删除它,否则一个不可达地址将会影响后续每个回调的到达时间!
- authorization: 鉴权 鉴权使用方法请您至下方
5、鉴权了解更多- enable: 是否开启鉴权
- users: 用户列表(这是一个对象数组)
- user: 用户名
- password: 密码
- token: 登陆后的token
- root-dir: 发送和获取的泛文件(图片、语音、视频、文件)存放路径,同时也会启动一个文件服务端,默认值是微信安装目录下
- log
- level: 日志级别:分为 trace、debug、info、warn,如果您在使用中遇到了闪退、崩溃等问题,那么请将此
log.level指定为trace后收集日志反馈
- level: 日志级别:分为 trace、debug、info、warn,如果您在使用中遇到了闪退、崩溃等问题,那么请将此
实际上配置文件中的所有字段都是非必填项,它们都可以独立存在,如果您不需要配置任何项,那么请不要创建它!
2.2、路由列表
响应信息 固定为JSON格式响应: {"code": 200, data: xxxx, "message": "xxx"}
- code: 固定200
- message: 成功为success,失败为faild,或是其它错误提示信息
- data: 根据请求接口不同数据不同,无特别描述时下面的请求接口返回字段全部为该data字段的子字段
路由列表概览:
-
功能类
- /api/checklogin - 检查登陆状态
- /api/userinfo - 获取登陆用户信息
- /api/contacts - 获取通讯录信息(wxid从这个接口获取),不建议使用,请使用下面的
/api/dbcontacts - /api/dbcontacts - 从数据库中获取通讯录信息(wxid从这个接口获取)
- /api/sendtxtmsg - 发送文本消息(好友和群聊组都可通过此接口发送,群聊组消息支持艾特)
- /api/sendimgmsg - 发送图片消息(支持json和form-data表单上传两种方式,json方式请将二进制数据使用base64编码后发送)
- /api/sendfilemsg - 发送文件消息(支持json和form-data表单上传两种方式,json方式请将二进制数据使用base64编码后发送)
- /api/chatroom - 获取群聊组成员列表,不建议使用,请使用下面的
/api/dbchatroom - /api/dbchatroom - 从数据库中获取群聊组信息和成员列表
- /api/accountbywxid - WXID反查微信昵称(支持好友、群聊组和群聊组内成员等),不建议使用,请使用下面的
/api/dbaccountbywxid - /api/dbaccountbywxid - 从数据库中通过WXID反查微信昵称(支持好友、群聊组和群聊组内成员等)
- /api/forwardmsg - 消息转发
- /api/dbs - 获取支持查询的数据库句柄
- /api/execsql - 通过数据库句柄执行
SQL语句 - /api/lz4decode - 将lz4压缩的数据进行解码(请求数据需要base64)
- /close - 停止
wxbot-sidecar(此命令用来停止http server,并中止程序运行)
-
回调注册类(目前仅用来获取微信实时消息 - 同步消息接口,同时支持WebSocket和http两种方式!)
- /ws/generalMsg - 注册websocket回调(支持注册多个ws通道):通用消息回调
- /ws/publicMsg - 注册websocket回调(支持注册多个ws通道):订阅号(公众号)消息回调
- /api/syncurl - http回调相关(支持注册多个http接口,注册请带上协议头:http/https,注册成功会持久化到配置文件中)
2.2.1、功能类接口
以
[]中括号括起来的字段为可选字段 目前所有请求和响应字段均按大驼峰命名法规范
2.2.1.0、检查登陆状态
协议信息
GET /api/checklogin
别名
/api/checkLogin
/api/check-login
/api/check_login
响应字段
- status string: 1: 登陆正常,其余非1值都为异常状态
- wxid string: 登陆用户wxid
2.2.1.1、登陆用户信息
协议信息
GET /api/userinfo
别名
/api/userInfo
/api/user-info
/api/user_info
响应字段
- customAccount string: 微信号
- city string: 城市
- country string:国家
- dbKey string:数据库加密key,可解密读取数据库
- nickname string: 微信昵称
- phone string: 手机号
- phoneSystem string: 手机系统
- privateKey string:私钥
- profilePicture string: 头像
- province string:省
- publicKey string:公钥
- signature string:个性签名
- wxid string
2.2.1.2、通讯录
不建议使用,请使用下面的从数据库中获取通讯录接口
协议信息
GET /api/contacts
响应字段
- contacts array
- customAccount string: 微信号
- nickname string: 昵称
- v3 string
- note string: 备注
- notePinyin string: 备注拼音首字母大写
- notePinyinAll string: 备注拼音全
- pinyin string: 昵称拼音首字母大写
- pinyinAll string: 昵称拼音全
- profilePicture string:头像
- profilePictureSmall string:小头像
- reserved1 string
- reserved1 string
- type string
- verifyFlag string
- wxid string
- total uint64: 通讯录成员总数
2.2.1.3、从数据库中获取通讯录
协议信息
GET /api/dbcontacts
别名
/api/dbContacts
/api/db-contacts
/api/db_contacts
响应字段
- contac
