Frida Hook 微信接收信息功能(PC)
字数 1566 2025-08-29 08:30:05

Frida Hook 微信PC版接收信息功能技术文档

1. 准备工作

1.1 所需工具

  • CheatEngine:用于内存搜索和定位
  • x64dbg:用于调试和分析函数调用
  • Python:运行Frida脚本
  • Frida:动态插桩工具
  • 一台root的手机/模拟器:用于运行frida-server
  • ADB工具:推送frida-server到设备

1.2 环境配置

  1. 安装Python和Frida:pip install frida frida-tools
  2. 下载对应架构的frida-server并推送到设备:
    adb push frida-server /data/local/tmp/
    adb shell chmod +x /data/local/tmp/frida-server
    adb shell /data/local/tmp/frida-server &
    

2. 定位消息内存位置

2.1 使用CheatEngine搜索

  1. 启动微信PC版(版本3.9.12.51)和小号
  2. 使用小号发送测试消息(如"imatest")
  3. 在CheatEngine中:
    • 附加到wechat.exe进程
    • 搜索字符串"imatest"
    • 发送多条不同消息,筛选出值随消息变化的地址

2.2 验证内存地址

  1. 右键候选地址,选择"Browse in this memory region"
  2. 寻找同时包含以下内容的内存区域:
    • 微信ID
    • 消息内容
    • XML标签结构
  3. 排除临时内存区域(等待一段时间观察是否被回收)

3. 定位消息处理函数

3.1 设置硬件断点

  1. 打开x64dbg,附加到wechat.exe
  2. 按Alt+E打开模块列表,选择wechatwin.dll
  3. 按Ctrl+G跳转到CheatEngine中找到的地址
  4. 右键地址设置1字节硬件断点
  5. 按F9继续运行程序

3.2 触发断点分析

  1. 用小号发送新消息触发断点
  2. 观察右下角栈窗口,向下滚动
  3. 注意SQL语句(消息存入数据库的操作)
  4. 定位数据库操作之前的最近函数调用

3.3 确定关键函数

  1. 在栈窗口中找到数据库名称
  2. 向上查找最近的函数调用(数据库名称之前的)
  3. 右键返回地址,选择"在反汇编中转到指定QWORD"
  4. 在调用语句处设置断点
  5. 移除硬件断点

4. 分析消息数据结构

4.1 寄存器分析

  1. 触发断点后,查看寄存器窗口
  2. 64位程序传参顺序:RDI → RSI → RDX → RCX → R8 → R9 → stack
  3. 右键RDI值,选择"在内存窗口中转到"

4.2 消息结构偏移

  1. 观察内存窗口中的消息结构
  2. 确定关键偏移:
    • 微信ID:RDI + 0x48
    • 消息内容:RDI + 0x88
  3. 验证偏移的正确性(发送不同消息测试)

5. 计算函数偏移

5.1 获取运行时地址

  1. 在x64dbg中复制断点处的地址
  2. 按Alt+E打开模块列表,复制wechatwin.dll基址
  3. 计算文件偏移:运行时地址 - 模块基址

5.2 脱离调试器

完成分析后,选择菜单"文件→脱离"退出调试状态

6. Frida脚本实现

6.1 脚本结构

// 计算目标函数地址
const baseAddr = Module.findBaseAddress("wechatwin.dll");
const hookAddr = baseAddr.add(0x123456); // 替换为实际偏移

// Hook目标函数
Interceptor.attach(hookAddr, {
    onEnter: function(args) {
        // args[0]对应RDI寄存器
        const wxid = args[0].add(0x48).readUtf8String();
        const message = args[0].add(0x88).readUtf8String();
        console.log(`[+] 收到消息 - 发送者: ${wxid}, 内容: ${message}`);
    }
});

6.2 Python加载脚本

import frida
import sys

def on_message(message, data):
    print(message)

with open("hook_wechat.js", "r", encoding="utf-8") as f:
    js_code = f.read()

session = frida.attach("wechat.exe")
script = session.create_script(js_code)
script.on("message", on_message)
script.load()
sys.stdin.read()

7. 效果验证

  1. 运行Python脚本
  2. 用小号发送测试消息
  3. 观察控制台输出:
    • 正常显示接收的消息
    • 即使消息被撤回,控制台仍保留记录
    • 显示发送者ID和消息内容

8. 注意事项

  1. 微信版本差异:不同版本偏移量可能不同,需重新分析
  2. 内存保护:某些版本可能有反调试措施
  3. 稳定性:长时间Hook可能导致微信不稳定
  4. 法律风险:仅限学习和研究用途,勿用于非法目的

9. 扩展思路

  1. 消息拦截:修改onEnter函数可实现消息拦截
  2. 自动回复:结合发送函数Hook可实现自动回复
  3. 消息存储:将消息保存到本地数据库或文件
  4. 多账号支持:分析多账号登录时的内存结构差异

10. 排错指南

  1. 无法附加进程:检查是否以管理员权限运行
  2. 偏移无效:确认微信版本和模块基址正确
  3. 无输出:检查断点是否在正确的消息处理路径
  4. 崩溃问题:减少Hook函数的操作,避免内存错误

通过以上步骤,可以实现对微信PC版接收消息功能的Hook和监控,为后续的自动化处理和消息分析提供基础。

Frida Hook 微信PC版接收信息功能技术文档 1. 准备工作 1.1 所需工具 CheatEngine:用于内存搜索和定位 x64dbg:用于调试和分析函数调用 Python:运行Frida脚本 Frida:动态插桩工具 一台root的手机/模拟器:用于运行frida-server ADB工具:推送frida-server到设备 1.2 环境配置 安装Python和Frida: pip install frida frida-tools 下载对应架构的frida-server并推送到设备: 2. 定位消息内存位置 2.1 使用CheatEngine搜索 启动微信PC版(版本3.9.12.51)和小号 使用小号发送测试消息(如"imatest") 在CheatEngine中: 附加到wechat.exe进程 搜索字符串"imatest" 发送多条不同消息,筛选出值随消息变化的地址 2.2 验证内存地址 右键候选地址,选择"Browse in this memory region" 寻找同时包含以下内容的内存区域: 微信ID 消息内容 XML标签结构 排除临时内存区域(等待一段时间观察是否被回收) 3. 定位消息处理函数 3.1 设置硬件断点 打开x64dbg,附加到wechat.exe 按Alt+E打开模块列表,选择wechatwin.dll 按Ctrl+G跳转到CheatEngine中找到的地址 右键地址设置1字节硬件断点 按F9继续运行程序 3.2 触发断点分析 用小号发送新消息触发断点 观察右下角栈窗口,向下滚动 注意SQL语句(消息存入数据库的操作) 定位数据库操作之前的最近函数调用 3.3 确定关键函数 在栈窗口中找到数据库名称 向上查找最近的函数调用(数据库名称之前的) 右键返回地址,选择"在反汇编中转到指定QWORD" 在调用语句处设置断点 移除硬件断点 4. 分析消息数据结构 4.1 寄存器分析 触发断点后,查看寄存器窗口 64位程序传参顺序:RDI → RSI → RDX → RCX → R8 → R9 → stack 右键RDI值,选择"在内存窗口中转到" 4.2 消息结构偏移 观察内存窗口中的消息结构 确定关键偏移: 微信ID:RDI + 0x48 消息内容:RDI + 0x88 验证偏移的正确性(发送不同消息测试) 5. 计算函数偏移 5.1 获取运行时地址 在x64dbg中复制断点处的地址 按Alt+E打开模块列表,复制wechatwin.dll基址 计算文件偏移:运行时地址 - 模块基址 5.2 脱离调试器 完成分析后,选择菜单"文件→脱离"退出调试状态 6. Frida脚本实现 6.1 脚本结构 6.2 Python加载脚本 7. 效果验证 运行Python脚本 用小号发送测试消息 观察控制台输出: 正常显示接收的消息 即使消息被撤回,控制台仍保留记录 显示发送者ID和消息内容 8. 注意事项 微信版本差异:不同版本偏移量可能不同,需重新分析 内存保护:某些版本可能有反调试措施 稳定性:长时间Hook可能导致微信不稳定 法律风险:仅限学习和研究用途,勿用于非法目的 9. 扩展思路 消息拦截:修改onEnter函数可实现消息拦截 自动回复:结合发送函数Hook可实现自动回复 消息存储:将消息保存到本地数据库或文件 多账号支持:分析多账号登录时的内存结构差异 10. 排错指南 无法附加进程:检查是否以管理员权限运行 偏移无效:确认微信版本和模块基址正确 无输出:检查断点是否在正确的消息处理路径 崩溃问题:减少Hook函数的操作,避免内存错误 通过以上步骤,可以实现对微信PC版接收消息功能的Hook和监控,为后续的自动化处理和消息分析提供基础。