- 下载并安装 x64dbg:https://x64dbg.com/
- 找到 wrapper.node 文件位置:
C:\Program Files\Tencent\QQ\resources\app.asar.unpacked\node_modules\wrapper.node
- 打开 x64dbg (x64 版本)
- 点击
文件→打开 - 浏览到 wrapper.node 文件并打开
- 等待加载完成
加载完成后,有几种方式查看基址:
方式 A - 查看状态栏
- 底部状态栏会显示:
模块: wrapper.node, 基址: XXXXXXXX - 记录这个基址,例如:
180000000
方式 B - 查看内存映射
- 点击顶部菜单:
查看→内存映射 - 在列表中找到 wrapper.node
- 查看
基址列的值
使用 Windows 计算器(程序员模式):
- 按
Win键,搜索计算器 - 点击左上角菜单,选择
程序员 - 选择
HEX(十六进制) - 输入基址,例如:
180000000 - 点击
+ - 输入偏移值,例如:
A9CE90 - 得到结果,例如:
180A9CE90
- 在 x64dbg 中按
Ctrl+G - 输入计算后的完整地址(不带 0x):
180A9CE90 - 按回车跳转
到达地址后,查看汇编代码:
典型的函数开头应该像这样:
push rbp ; 保存栈帧
mov rbp, rsp ; 设置新栈帧
sub rsp, XXX ; 分配栈空间
mov [rbp+XX], rcx ; 保存第1个参数
mov [rbp+XX], rdx ; 保存第2个参数
mov [rbp+XX], r8 ; 保存第3个参数
mov [rbp+XX], r9d ; 保存第4个参数不是函数的情况:
db XX ; 数据字节
00 00 00 00 ; 空白区域
int3 ; 断点指令如果当前地址看起来不对,尝试其他偏移值:
| 偏移值 | 来源版本 | 计算示例 (基址 180000000) |
|---|---|---|
| A9CE90 | 9.9.12-25765 | 180000000 + A9CE90 = 180A9CE90 |
| A996E0 | 9.9.12-25493 | 180000000 + A996E0 = 180A996E0 |
| A84980 | 9.9.12-25234 | 180000000 + A84980 = 180A84980 |
| AB5510 | 9.9.11-24815 | 180000000 + AB5510 = 180AB5510 |
| AA1A20 | 9.9.11-24568 | 180000000 + AA1A20 = 180AA1A20 |
- 正常启动 QQ(不要通过 start.bat)
- 打开 x64dbg (x64)
- 点击
文件→附加 - 在进程列表中找到
QQ.exe - 双击附加
- 附加成功后,按
Alt+M打开模块列表 - 在列表中找到
wrapper.node - 记录其基址(例如:
7FF8A0000000)
在命令框输入(位于底部):
bp wrapper+A9CE90
或者手动跳转并设置断点:
- 按
Ctrl+G - 输入完整地址(基址+偏移)
- 按
F2在当前行设置断点
- 按
F9继续运行程序 - 在 QQ 中执行需要签名的操作
- 如果断点被触发,说明找到了正确的函数
- 查看调用栈和参数
- 在 x64dbg 中按
Ctrl+B打开二进制搜索 - 输入常见的函数序言字节码:
48 89 5C 24 08 48 89 74 24 10 57 48 83 EC - 点击搜索
- 查看找到的每个结果
- 判断是否为签名函数
- 右键 →
搜索→当前模块→字符串引用 - 搜索可能的关键字:
- "sign"
- "token"
- "encrypt"
- 双击感兴趣的字符串
- 查看引用该字符串的函数
原因: 地址格式不正确
解决方案:
- ❌ 错误:
wrapper.node+A9CE90 - ❌ 错误:
0x180A9CE90 - ✅ 正确:
180A9CE90(纯十六进制,无前缀) - ✅ 正确:
wrapper+A9CE90(使用简短模块名)
检查清单:
- 函数开头有标准的序言(push rbp, mov rbp, rsp, sub rsp)
- 函数体较大(通常几百到几千字节)
- 包含大量的计算和循环逻辑
- 有 5 个参数的使用(rcx, rdx, r8, r9, 栈参数)
- 函数结尾有返回指令(ret)
可能的原因:
- QQ 版本太新,需要等待社区更新
- 偏移值发生了较大变化
- wrapper.node 结构改变
建议:
- 查看项目 GitHub Issues
- 在相关社区求助
- 等待项目作者更新
找到可疑地址后,可以使用配置文件快速测试:
编辑 sign.json:
{
"ip": "0.0.0.0",
"port": 8080,
"version": "9.9.20-37051",
"offset": "0xA9CE90"
}然后:
- 编译 SignerServer.dll
- 运行 start.bat
- 访问 http://localhost:8080/ping
- 如果返回
{"code":0}说明服务正常启动 - 测试签名功能验证偏移值是否正确
- 保持耐心,逆向分析需要时间
- 多尝试几个偏移值
- 如果不确定,可以先用试错法
- 备份原始文件以防出错