Skip to content

lxy936260951/wxhook

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WeChatHook - 微信消息Hook工具

Language Platform WeChat License

一个现代化的微信PC版Hook工具,采用C++17开发,通过DLL注入方式实现对微信消息的实时捕获和控制。

✨ 核心特性

  • 🎯 双Hook模式 - 支持硬件断点和软件断点两种Hook方式
  • 📡 实时消息捕获 - 自动拦截并转发所有微信消息到Webhook
  • 🌐 完整HTTP API - 提供RESTful API控制微信发送消息
  • 📤 多种消息类型 - 支持文本、图片、文件、XML、表情、富文本、拍一拍
  • 👥 联系人管理 - 获取微信联系人列表和详细信息
  • 🔄 异步架构 - 基于asio的异步消息处理,不阻塞微信主线程
  • 🗑️ 智能去重 - 自动去重机制,避免重复消息
  • 📝 高性能日志 - 基于spdlog的结构化日志系统
  • 🌐 浏览器控制 - 主动打开微信内置浏览器并加载指定URL
  • ⚙️ 灵活配置 - JSON配置文件,支持运行时配置

🎯 支持的功能

1. 消息接收(自动推送到Webhook)

所有收到的微信消息会自动实时推送到配置的Webhook地址,包括:

消息类型 Type值 说明
文本消息 1 普通文字消息
图片消息 3 图片文件
语音消息 34 语音文件
视频消息 43 视频文件
动画表情 47 GIF/表情
链接/文件/小程序 49 包含XML数据
系统消息 10000 系统通知

推送格式:

{
  "is_self": false,
  "is_group": true,
  "type": 1,
  "ts": 1234567890,
  "id": 123456789012345,
  "sender": "wxid_xxx",
  "roomid": "xxx@chatroom",
  "content": "消息内容",
  "xml": "<xml>...</xml>",
  "moreInfo": "扩展信息"
}

2. 消息发送(HTTP API)

通过HTTP API主动发送各种类型的消息。

3. 账号信息

  • 获取当前登录用户信息(微信ID、昵称、手机号等)
  • 检查登录状态

4. 联系人管理

  • 获取完整联系人列表
  • 包含微信ID、昵称、备注、微信号、性别、地区等信息

5. 浏览器控制

  • 主动在微信中打开内置浏览器
  • 支持HTTP/HTTPS网页、公众号文章、微信内部页面

📡 完整API接口

基础接口

接口 方法 说明
/health GET 健康检查
/shutdown GET 关闭服务(需要令牌)

账号信息

接口 方法 说明
/userinfo GET 获取个人信息
/login_status GET 检查登录状态

响应示例:

{
  "code": 200,
  "msg": "success",
  "data": {
    "wxid": "wxid_xxxxx",
    "name": "昵称",
    "mobile": "13800138000",
    "home": "C:\\Users\\xxx\\Documents\\WeChat Files\\wxid_xxx",
    "alias": "微信号"
  }
}

联系人管理

接口 方法 说明
/contacts GET 获取联系人列表

响应示例:

{
  "code": 200,
  "msg": "success",
  "data": {
    "count": 100,
    "contacts": [
      {
        "wxid": "wxid_xxx",
        "code": "微信号",
        "remark": "备注",
        "name": "昵称",
        "country": "中国",
        "province": "广东",
        "city": "深圳",
        "gender": 1,
        "avatar": "头像URL",
        "cover": "背景图URL",
        "extra": ["其他信息"]
      }
    ]
  }
}

消息发送

1. 发送文本消息

POST /send_message
Content-Type: application/json

{
  "wxid": "接收者微信ID或群ID",
  "msg": "消息内容"
}

2. 发送图片消息

POST /send/image
Content-Type: application/json

{
  "wxid": "接收者微信ID",
  "path": "C:\\path\\to\\image.jpg"
}

3. 发送文件消息

POST /send/file
Content-Type: application/json

{
  "wxid": "接收者微信ID",
  "path": "C:\\path\\to\\file.pdf"
}

4. 发送XML消息

POST /send/xml
Content-Type: application/json

{
  "receiver": "接收者微信ID",
  "xml": "<msg>XML内容</msg>",
  "path": "缩略图路径(可选)",
  "type": 33
}

type说明:

  • 33 (0x21) - 链接消息
  • 8192 (0x2000) - 小程序消息

5. 发送表情/GIF消息

POST /send/emotion
Content-Type: application/json

{
  "wxid": "接收者微信ID",
  "path": "C:\\path\\to\\emotion.gif"
}

6. 发送富文本/卡片消息

POST /send/richtext
Content-Type: application/json

{
  "receiver": "接收者微信ID",
  "title": "标题",
  "url": "https://example.com",
  "thumburl": "缩略图URL(可选)",
  "digest": "摘要(可选)",
  "account": "公众号账号(可选)",
  "name": "公众号名称(可选)"
}

7. 拍一拍

POST /send/pat
Content-Type: application/json

{
  "roomid": "群聊ID",
  "wxid": "被拍用户的微信ID"
}

浏览器控制

1. 打开浏览器(Hook方式)

POST /open_browser
Content-Type: application/json

{
  "url": "https://www.example.com"
}

2. 打开浏览器(主动调用)

POST /api/browser/open
Content-Type: application/json

{
  "url": "https://www.example.com",
  "show": true
}

3. 检查浏览器功能可用性

POST /api/browser/check

支持的URL类型:

  • HTTP/HTTPS网页
  • 公众号文章: https://mp.weixin.qq.com/s/xxx
  • 微信内部页面: weixin://resourceid/xxx

🚀 快速开始

1. 系统要求

  • Windows 10/11 (x64)
  • Visual Studio 2019+ 或 CLion
  • vcpkg 包管理器
  • 微信PC版 3.9.12.51

2. 安装依赖

使用vcpkg安装所有依赖:

vcpkg install nlohmann-json:x64-windows-static
vcpkg install cpr:x64-windows-static
vcpkg install crow:x64-windows-static
vcpkg install asio:x64-windows-static
vcpkg install spdlog:x64-windows-static

3. 编译项目

# 配置CMake
cmake -DCMAKE_TOOLCHAIN_FILE="<VCPKG_ROOT>/scripts/buildsystems/vcpkg.cmake" ^
      -DVCPKG_TARGET_TRIPLET=x64-windows-static ^
      -B build

# 编译
cmake --build build --config Release

4. 配置文件

在DLL同目录创建 wechat_hook_config.json

{
  "web": {
    "bind": "127.0.0.1",
    "port": 8080,
    "shutdown_token": "your_secret_token"
  },
  "sender": {
    "webhook_url": "http://localhost:3000/webhook",
    "http_timeout_ms": 5000
  },
  "hook": {
    "use_software_breakpoint": false,
    "dedup_window_sec": 2,
    "show_console": false,
    "auto_hide_console": false,
    "enable_wechat_log_hook": false,
    "wechat_log_to_console": false,
    "wechat_log_prefix": "[WeChat]",
    "enable_browser_hook": false,
    "browser_block_ads": false
  }
}

5. 注入DLL

使用提供的注入工具将 WeChatHook.dll 注入到微信进程:

# 使用ModernInjector(推荐)
inject\ModernInjector.exe

# 或使用RemoteDll64
inject\RemoteDll64.exe

6. 测试API

注入成功后,HTTP服务会自动启动:

# 健康检查
curl http://localhost:8080/health

# 获取个人信息
curl http://localhost:8080/userinfo

# 发送消息
curl -X POST http://localhost:8080/send_message \
  -H "Content-Type: application/json" \
  -d "{\"wxid\":\"filehelper\",\"msg\":\"Hello World\"}"

⚙️ 配置说明

Web服务配置

配置项 说明 默认值
web.bind HTTP服务器绑定地址 127.0.0.1
web.port HTTP服务器端口 8080
web.shutdown_token 关闭服务的令牌 "" (空=不鉴权)

消息发送配置

配置项 说明 默认值
sender.webhook_url 消息转发目标URL http://localhost:3000/webhook
sender.http_timeout_ms HTTP请求超时时间(毫秒) 5000

Hook配置

配置项 说明 默认值 推荐值
hook.use_software_breakpoint 是否使用软件断点 true false
hook.dedup_window_sec 消息去重时间窗口(秒) 2 1-5
hook.show_console 是否显示控制台 false false
hook.auto_hide_console 是否自动隐藏控制台 false false

扩展功能配置

配置项 说明 默认值
hook.enable_wechat_log_hook 启用微信日志Hook false
hook.wechat_log_to_console 微信日志输出到控制台 false
hook.wechat_log_prefix 微信日志前缀 [WeChat]
hook.enable_browser_hook 启用浏览器Hook false
hook.browser_block_ads 自动拦截广告链接 false

📦 项目结构

WeChatHook/
├── include/              # 头文件
│   ├── config/          # 配置管理
│   ├── contact/         # 联系人管理
│   ├── hook/            # Hook实现
│   ├── message/         # 消息发送
│   ├── transport/       # 传输层
│   ├── util/            # 工具类
│   │   ├── WeChatHelper.h    # 微信辅助工具
│   │   ├── WebHelper.h       # Web辅助工具
│   │   ├── Encoding.h        # 字符编码转换
│   │   ├── Logger.h          # 日志系统
│   │   └── Offsets.h         # 内存偏移量
│   └── web/             # Web服务
├── src/                 # 源文件
│   ├── config/
│   ├── contact/
│   ├── hook/
│   ├── message/
│   ├── transport/
│   ├── util/
│   ├── web/
│   ├── dllmain.cpp      # DLL入口
│   └── receive.cpp      # 消息接收处理
├── inject/              # DLL注入工具
├── config/              # 配置文件示例
└── CMakeLists.txt       # CMake构建脚本

🔧 技术架构

核心技术

  • Hook技术: 硬件断点(调试寄存器)和软件断点(INT3)
  • 异步I/O: 基于asio的异步消息处理
  • HTTP服务: Crow框架提供RESTful API
  • 日志系统: spdlog高性能日志
  • JSON处理: nlohmann/json
  • HTTP客户端: cpr (libcurl封装)

消息处理流程

微信消息函数
    ↓ (Hook拦截)
消息解析 (UTF-16 → UTF-8)
    ↓
消息去重 (时间窗口)
    ↓
JSON格式化
    ↓
异步发送 (asio线程池)
    ↓
Webhook服务器

📊 使用示例

Python示例

import requests

BASE_URL = "http://localhost:8080"

# 1. 获取个人信息
response = requests.get(f"{BASE_URL}/userinfo")
print(response.json())

# 2. 获取联系人列表
response = requests.get(f"{BASE_URL}/contacts")
contacts = response.json()
print(f"联系人数量: {contacts['data']['count']}")

# 3. 发送文本消息
response = requests.post(f"{BASE_URL}/send_message", json={
    "wxid": "filehelper",
    "msg": "Hello from Python!"
})
print(response.json())

# 4. 发送图片
response = requests.post(f"{BASE_URL}/send/image", json={
    "wxid": "filehelper",
    "path": "C:\\path\\to\\image.jpg"
})
print(response.json())

# 5. 打开浏览器
response = requests.post(f"{BASE_URL}/api/browser/open", json={
    "url": "https://www.baidu.com"
})
print(response.json())

Node.js示例

const axios = require('axios');

const BASE_URL = 'http://localhost:8080';

// 发送消息
async function sendMessage(wxid, msg) {
  try {
    const response = await axios.post(`${BASE_URL}/send_message`, {
      wxid: wxid,
      msg: msg
    });
    console.log(response.data);
  } catch (error) {
    console.error('发送失败:', error.message);
  }
}

// 获取联系人
async function getContacts() {
  try {
    const response = await axios.get(`${BASE_URL}/contacts`);
    console.log(`联系人数量: ${response.data.data.count}`);
    return response.data.data.contacts;
  } catch (error) {
    console.error('获取失败:', error.message);
  }
}

// 使用示例
sendMessage('filehelper', 'Hello from Node.js!');
getContacts();

Webhook服务器示例

from flask import Flask, request
import json

app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def webhook():
    """接收微信消息的Webhook"""
    msg = request.json
    
    print(f"收到消息:")
    print(f"  类型: {msg['type']}")
    print(f"  发送者: {msg['sender']}")
    print(f"  内容: {msg['content']}")
    print(f"  是否群消息: {msg['is_group']}")
    
    # 自动回复示例
    if not msg['is_self'] and msg['type'] == 1:  # 文本消息
        if '你好' in msg['content']:
            # 调用API发送回复
            import requests
            requests.post('http://localhost:8080/send_message', json={
                'wxid': msg['sender'],
                'msg': '你好!我是自动回复机器人'
            })
    
    return 'ok'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=3000)

⚠️ 注意事项

重要提示

  1. 微信版本: 本项目仅支持微信版本 3.9.12.51,其他版本可能无法正常工作
  2. 路径格式: 发送图片、文件时必须使用绝对路径
  3. 编码格式: 所有接口使用 UTF-8 编码
  4. 安全令牌: 生产环境请设置 shutdown_token 保护关闭接口
  5. Hook方式: 推荐使用硬件断点(use_software_breakpoint: false

常见问题

Q: 注入后没有反应? A: 检查微信版本是否为3.9.12.51,查看日志文件 logs/wechathook.log

Q: 消息发送失败? A:

  1. 确认微信已登录
  2. 检查目标wxid是否正确
  3. 文件路径必须是绝对路径且文件存在

Q: 无法接收消息? A:

  1. 检查 webhook_url 配置是否正确
  2. 确认Webhook服务器正常运行
  3. 查看日志文件排查问题

Q: DLL注入失败? A:

  1. 使用管理员权限运行注入器
  2. 确保微信版本为3.9.12.51
  3. 关闭杀毒软件重试

📝 日志系统

日志文件位置:logs/ 目录

日志文件 内容
wechathook.log 所有级别的日志(trace/debug/info/warn/error)
wechathook_error.log 仅错误和严重错误(error/critical)

日志级别:

  • trace - 详细跟踪信息
  • debug - 调试信息
  • info - 一般信息
  • warn - 警告信息
  • error - 错误信息
  • critical - 严重错误

🔒 安全与免责

使用声明

本项目仅供学习和研究使用,请遵守以下规定:

  • ✅ 个人学习C++、逆向工程、Windows编程
  • ✅ 研究微信PC版的内部机制
  • ✅ 测试Hook技术和DLL注入
  • 禁止用于商业用途
  • 禁止用于非法用途
  • 禁止用于骚扰他人
  • 禁止用于批量营销

免责声明

  1. 使用本工具产生的一切后果由使用者自行承担
  2. 请遵守相关法律法规和微信用户协议
  3. 本项目不对使用本工具造成的任何损失负责
  4. 使用前请备份重要数据

🛠️ 开发相关

依赖库

版本 用途
nlohmann/json latest JSON处理
cpr latest HTTP客户端
crow latest HTTP服务器
asio latest 异步I/O
spdlog latest 日志系统

编译选项

  • C++标准: C++17
  • 运行库: 静态链接 (/MT)
  • 字符集: Unicode
  • 平台: x64

贡献指南

欢迎提交Issue和Pull Request,但请注意:

  1. 保持代码风格一致
  2. 添加必要的注释和文档
  3. 测试功能正常后再提交
  4. 遵守项目的使用声明

📊 更新日志

v1.3.0 (2024-01-15)

重构优化:

  • ✅ 创建 WeChatHelper 工具类,消除25处重复代码
  • ✅ 创建 WebHelper 工具类,消除30+处重复代码
  • ✅ 删除未使用的文件和代码,减少318行代码
  • ✅ 统一字符串转换逻辑
  • ✅ 重写项目文档

Bug修复:

  • 🐛 修复内存泄漏问题
  • 🐛 优化异常处理机制

v1.2.0 (2024-01-10)

功能变更:

  • ❌ 移除数据库相关接口(偏移失效)
  • ❌ 移除群聊管理接口(偏移失效)
  • ❌ 移除消息转发接口(偏移失效)
  • ❌ 移除二维码Hook功能(偏移失效)
  • ✅ 保留核心消息发送和接收功能
  • ✅ 保留联系人管理功能
  • ✅ 保留账号信息查询功能

v1.1.0

新增功能:

  • ✨ 添加结构化日志系统 (spdlog)
  • ✨ 添加浏览器控制功能
  • 🔧 改进异常处理机制
  • ⚡ 性能优化

v1.0.0

初始版本:

  • 🎉 支持硬件/软件断点Hook
  • 🌐 HTTP API服务器
  • 📡 异步消息转发
  • 📤 多种消息类型发送

📞 联系方式

📄 许可证

本项目仅供学习交流使用,请勿用于商业用途。


⭐ 如果这个项目对你有帮助,请给个Star!

🔔 关注项目获取最新更新

💡 有问题请提Issue,欢迎贡献代码

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors