Skip to content

基于 DLL 注入技术的微信 (版本 4.1.2.17) 机器人服务,提供 HTTP API 接口进行微信自动化控制。

Notifications You must be signed in to change notification settings

RipperTs/wxbot-new

Repository files navigation

WxBot New

基于 DLL 注入技术的微信 (版本 4.1.2.17) 机器人服务,提供 HTTP API 接口进行微信自动化控制。
接口文档(示例):

请自行根据实际情况准备 NoveLoader.dllNoveHelper.dll 注入文件
本项目会有封号风险,自行承担后果


快速开始

使用已编译的二进制文件

  1. Releases 页面下载对应版本的 exe 程序以及NoveLoader.dllNoveHelper.dll文件, 并将其都放在同一个目录下
  2. 下载 4.1.2.17 版本的微信
  3. 启动 exe 程序,此时会自动拉起微信
  4. 扫码登录,完成注入

具体启动流程

  1. 首次运行自动生成 config.json 配置文件(如不存在)
  2. 创建共享内存 windows_shell_global__,写入固定密钥(供 DLL/微信进程探测)
  3. 经过 2~6 秒随机延迟后开始执行注入逻辑(降低被检测概率)
  4. 启动 HTTP API 服务,默认监听 http://0.0.0.0:5000
  5. 初始化微信服务、加载 DLL、注册回调、启动心跳与自动重连协程

开发

环境要求

  • Go 1.18+
  • 构建环境:macOS / Linux / Windows,需支持交叉编译
  • 目标运行环境:32 位 Windows
  • MinGW-w64 交叉编译器:i686-w64-mingw32-gcc(macOS/Linux)
  • 运行时依赖:NoveLoader.dllNoveHelper.dll(需与 exe 放在同一目录)

编译运行

# 使用 Makefile 编译(推荐)
make build

# 手动编译(32 位 Windows,启用 CGO)
GOOS=windows GOARCH=386 CGO_ENABLED=1 CC=i686-w64-mingw32-gcc go build -o dist/wxbot.exe .

# 运行(在 Windows 上)
cd dist
wxbot.exe

项目特性

  • 完整 HTTP API:RESTful 设计,覆盖登录、消息、好友/群管理等能力
  • 异步响应管理:支持同步等待 DLL 回调结果,超时自动清理
  • 自动重连:心跳监控 + 自动重连机制,提升稳定性
  • 配置管理:支持动态更新配置、HTTP Basic 认证、日志/回调开关
  • 消息回调推送:可将指定消息类型转发至自定义 HTTP 回调地址
  • 日志落盘:按天滚动写入 ./logs/wxbot-YYYY-MM-DD.log,同时输出控制台
  • 安全混淆:手动映射 DLL + 动态 Windows API 调用 + CGO 回调,降低静态检测风险

项目结构

wxbot-new/
├── main.go                     # 程序入口
├── config.example.json         # 配置示例
├── internal/
│   ├── api/                    # HTTP API 服务层
│   ├── config/                 # 配置管理
│   ├── loader/                 # DLL 加载 + 回调
│   ├── logging/                # 日志初始化(按天切割)
│   ├── memory/                 # 共享内存管理
│   ├── message/                # 消息类型与数据结构
│   ├── obfuscate/              # 混淆与动态 API 调用
│   ├── service/                # 微信业务服务层
│   └── utils/                  # 日志工具等
├── dist/                       # 构建产物(wxbot.exe)
├── Makefile                    # 构建脚本(推荐通过 make 构建)
├── pythondemo.py               # 旧 Python 示例(仅作对照,不参与构建)
├── NoveLoader.dll              # 加载器 DLL(需自行准备,运行时放在 exe 同目录)
└── NoveHelper.dll              # 助手 DLL(需自行准备,运行时放在 exe 同目录)

核心功能模块

1. HTTP API 服务层(internal/api

提供完整的 RESTful API 接口:

微信服务状态 / 登录

  • GET /api/wechat/status - 检查微信服务运行状态、当前 ClientID、连接数
  • GET /api/wechat/login-info - 获取当前登录账号信息(同步等待 DLL 回调)
  • POST /api/wechat/logout - 注销当前微信账号
  • GET /api/wechat/refresh-qrcode - 刷新登录二维码(同步)

消息发送

半协议半Hook

  • POST /api/wechat/send-text - 发送普通文本消息(JSON)
  • POST /api/wechat/send-at-text - 发送群 @ 文本消息(支持 @ 全体)
  • POST /api/wechat/send-image - 发送图片消息(multipart/form-data,字段:wxid + file
  • POST /api/wechat/send-file - 发送文件消息(multipart/form-data,字段:wxid + file
  • POST /api/wechat/send-card - 发送名片消息

好友 / 群管理

  • GET /api/wechat/friend-list - 获取好友列表
  • GET /api/wechat/friend-info - 获取指定好友信息(?wxid=xxx
  • GET /api/wechat/group-list - 获取群列表(支持 detail=0|1,1 时包含成员列表)
  • GET /api/wechat/group-member-list - 获取群成员列表(?room_wxid=xxx
  • POST /api/wechat/invite-group-member- 邀请好友进群
  • POST /api/wechat/modify-group-name - 修改群名称

小程序 / 语音

  • GET /api/wechat/mini-program-code - 获取小程序 code 及会话信息(?appid=xxx
  • GET /api/wechat/voice-to-text - 语音转文本(?msgid=xxx

配置管理接口

  • GET /api/config - 查询完整配置
  • POST /api/config - 创建配置
  • PUT /api/config - 更新完整配置
  • DELETE /api/config - 删除配置(恢复默认)
  • GET /api/config/{key} - 查询单项配置
  • PUT /api/config/{key} - 更新单项配置

健康检查

  • GET /health - 服务健康检查(不依赖微信 DLL)

中间件

  • 日志中间件:记录所有 HTTP 请求(方法、路径、状态码、耗时)
  • CORS 中间件:统一跨域配置
  • 恢复中间件:捕获 panic 并返回 500
  • 内容类型中间件:校验 Content-Type,仅允许 application/json / multipart/form-data
  • Basic 认证中间件:当配置中存在 auth 时启用 HTTP Basic 认证
  • 微信服务中间件:对 /api/wechat/*(除 /status)自动检查微信服务是否已启动

2. 配置管理(internal/config

  • 支持 JSON 配置文件(默认 config.json,首次运行自动生成)
  • 动态更新配置无需重启(通过 HTTP 接口修改后实时生效)
  • 支持 HTTP Basic 认证用户列表
  • 支持微信消息回调地址配置
  • 线程安全的配置读写
  • 默认监听 0.0.0.0:5000

配置字段说明:

  • host:HTTP 服务监听地址,默认 "0.0.0.0"
  • port:HTTP 服务端口,默认 5000
  • auth:HTTP Basic 认证用户列表(为空则关闭认证)
  • log_recv_callback:是否打印 DLL 回调消息日志(0 关闭,1 开启,默认 1
  • callback_urls:消息回调地址数组,当非空时会向这些地址推送部分消息

配置示例:

{
  "host": "0.0.0.0",
  "port": 5000,
  "auth": [
    {
      "username": "admin",
      "password": "password123"
    }
  ],
  "log_recv_callback": 1,
  "callback_urls": [
    "http://127.0.0.1:8080/wx/callback"
  ]
}

3. 微信业务服务层 (internal/service)

服务管理 (service.go)

  • 生命周期管理:Initialize → Start → Stop
  • 心跳监控:每 60 秒更新心跳时间戳
  • 自动重连:120 秒无心跳自动重连(最多 5 次,间隔 10 秒)
  • 连接状态管理:追踪已连接的客户端

异步响应管理 (response_manager.go)

  • 支持同步等待响应的消息操作
  • 自动超时处理(默认 10 秒)
  • 定期清理过期请求
  • 基于消息类型 + ClientID 匹配响应

消息回调推送

  • 使用 callback_urls 配置一组 HTTP 回调地址
  • 当收到特定消息类型(如聊天消息、登录/登出、好友/群事件等,范围大致为 11046-11054 及部分扩展码)时:
    • POST application/json 向每个地址推送一条记录
    • 请求体格式:
{
  "client_id": 12345,
  "msg_type": 11046,
  "data": { }
}

其中 data 字段结构可参考 internal/message/types.go 中相关数据结构定义。

4. DLL 加载层 (internal/loader)

DLL 函数调用(loader.go + manual_map_windows.go

  • 通过硬编码偏移地址调用 DLL 非导出函数
  • 使用手动映射(Manual DLL Mapping)和动态 Windows API 调用加载 NoveLoader.dll
  • 使用 syscall.Syscall9 进行底层调用
  • 支持的操作:
    • 初始化微信 Socket
    • 注入微信进程(多种方式:普通、PID、多开)
    • 发送数据到微信
    • 销毁连接

回调系统(callback.go

  • 连接回调:客户端连接时触发
  • 接收消息回调:收到微信消息时触发
  • 断开回调:客户端断开时触发
  • 使用 CGO 提供纯 C 回调函数,DLL 侧只看到标准 C 函数指针
  • 自动解析 JSON 并统一转换为 map[string]interface{} 传给上层
  • 线程安全的回调链管理(支持多回调同时注册)

HTTP API 使用示例

检查服务状态

curl http://localhost:5000/api/wechat/status

响应:

{
  "code": 0,
  "message": "状态检查完成",
  "data": {
    "running": true,
    "message": "微信服务正常运行",
    "client_id": 12345,
    "connected_count": 1
  }
}

获取登录信息

curl http://localhost:5000/api/wechat/login-info

响应:

{
  "code": 0,
  "message": "success",
  "data": {
    "account": "your_account",
    "avatar": "https://...",
    "nickname": "Your Name",
    "wxid": "wxid_xxxxx"
  }
}

刷新二维码

curl http://localhost:5000/api/wechat/refresh-qrcode

响应:

{
  "code": 0,
  "message": "success",
  "data": {
    "file": "C:\\path\\to\\qrcode.png",
    "qrcode": "base64_encoded_qrcode_data",
    "pid": 12345
  }
}

配置管理

查询配置:

curl http://localhost:5000/api/config

更新配置:

curl -X PUT http://localhost:5000/api/config \
  -H "Content-Type: application/json" \
  -d '{"host":"0.0.0.0","port":5000,"auth":[{"username":"admin","password":"123456"}]}'

更新单项配置:

curl -X PUT http://localhost:5000/api/config/port \
  -H "Content-Type: application/json" \
  -d '{"value":8080}'

自定义消息处理

推荐通过配置 callback_urls 将消息推送给自建 HTTP 服务,在外部实现业务逻辑。

  1. config.json 中添加回调地址:
{
  "callback_urls": [
    "http://127.0.0.1:8080/wx/callback"
  ]
}
  1. 当收到聊天消息、登录/登出等事件时,WxBot 会向上述地址发送 POST 请求:
{
  "client_id": 12345,
  "msg_type": 11046,
  "data": {
    "...": "具体字段见 internal/message/types.go"
  }
}
  1. 在你的服务中根据 msg_typedata 进行路由与处理,例如收到聊天消息后自动回复、转发到 IM/队列等。

如需在进程内直接处理消息,可按需修改 internal/service/service.go 中的 registerCallbacks(),在现有回调逻辑中插入自定义处理代码。

技术架构

分层架构

┌─────────────────────────────────────┐
│         HTTP API 服务层              │ (api/)
│   - Server, Router, Handler          │
│   - Middleware (日志/CORS/认证)       │
└──────────────┬──────────────────────┘
               │
┌──────────────▼──────────────────────┐
│        微信业务服务层                 │ (service/)
│   - WeChatService                    │
│   - ResponseManager (异步响应管理)    │
│   - HelperSend*/HelperGet* 方法      │
└──────────────┬──────────────────────┘
               │
┌──────────────▼──────────────────────┐
│      DLL加载和回调转换层              │ (loader/)
│   - NoveLoader (DLL 函数调用)        │
│   - CallbackManager (Go ↔ C 回调)   │
└──────────────┬──────────────────────┘
               │
┌──────────────▼──────────────────────┐
│     基础设施层 + Windows API          │ (memory/, message/)
│   - SharedMemoryManager              │
│   - MessageType 定义                 │
│   - kernel32.dll, ntdll.dll API      │
└─────────────────────────────────────┘

数据流

启动流程

main()
  → 加载配置 (config.json)
  → 创建共享内存 (延迟3秒)
  → 启动 HTTP API 服务 (0.0.0.0:5000)
  → 启动微信服务
    → 加载 DLl
    → 注册回调函数
    → 初始化 Socket
    → 注入 DLL
    → 启动心跳监控协程
    → 启动响应清理协程

消息发送流程 (同步方法)

HTTP Request → WeChatHandler
  → WeChatService.HelperGetCurrentLoginInfo()
    → ResponseManager.RegisterRequest() (注册请求,返回 Channel)
    → SendMessage(JSON) → NoveLoader.SendWeChatData()
      → syscall.Syscall9(offsetSendWeChatData, ...)
    → ResponseManager.WaitForResponse() (阻塞等待)
      ← DLL 回调 onRecv()
      ← CallbackManager 触发 RecvCallback
      ← WeChatService 处理响应
      ← ResponseManager.HandleResponse() (写入 Channel)
    → 解析响应并返回
  ← HTTP Response (JSON)

心跳和重连流程

runService() 主循环 (每1秒检查)
  → 检查 time.Since(lastHeartbeat) > 120秒?
    YES → reconnect()
      → DestroyWeChat()
      → sleep(10秒)
      → InjectWeChat() (重新注入)
      → 更新 lastHeartbeat

startHeartbeat() 协程 (每60秒)
  → 更新 lastHeartbeat = time.Now()

注意事项

  1. 仅支持 Windows 系统:DLL 是 32 位的,必须编译为 32 位程序(GOARCH=386
  2. DLL 文件:需要自行准备 vcruntime140.dll msvcp140.dll (注意这是变种并非真实文件名)
  3. 微信版本兼容性:确保 DLL 与微信版本兼容,偏移地址硬编码
  4. 安全性警告:DLL 注入属于侵入性操作,请在授权环境下使用
  5. 仅供学习:本项目仅供学习交流,请勿用于非法用途
  6. 更多 API 文档:详见顶部 Apifox/ShowDoc 链接

常见问题

Q: 编译后无法运行? A: 确保编译为 32 位(GOARCH=386),且 DLL 文件在程序同目录

Q: 如何启用调试日志? A: 在代码中调用 loader.SetDebugMode(true) 可打印 DLL 回调的原始 JSON 数据(默认仅输出解析后的结构化日志)

Q: HTTP API 如何认证? A: 在 config.json 中配置 auth 字段,启用 HTTP Basic 认证

Q: 消息发送失败? A: 检查 ClientID 是否有效、微信是否已登录、网络是否正常

Q: 心跳超时频繁? A: 可能是微信进程不稳定,检查微信版本兼容性

Q: 如何扩展新接口? A: 在 internal/api/router.go 中注册新路由,在对应 Handler 中实现逻辑

声明

本项目仅供学习交流使用,请勿用于非法用途。使用本项目产生的任何法律责任由使用者自行承担。

About

基于 DLL 注入技术的微信 (版本 4.1.2.17) 机器人服务,提供 HTTP API 接口进行微信自动化控制。

Resources

Stars

Watchers

Forks