DRtokenTool 会定位微信小程序的运行时、注入调试 hook、开启本地调试通道, 然后把你的登录 token 和账号数据直接打印出来。拿到 token 就能在网页端跳过扫码登录, 直接测接口。
下载见 工具详情页。
安装
从详情页下载 DRtokenTool_v1.0.2_setup.exe,双击运行。
中文向导会打开,一路下一步即可。默认安装位置不用改,安装是当前用户级的, 不会弹管理员授权窗口。
勾上「创建桌面快捷方式」会方便一些。装完后开始菜单里会有 DRtokenTool、
使用教程、卸载 DRtokenTool 三项。
首次运行会被拦一下
程序没有做代码签名,所以第一次运行时 Windows SmartScreen 会弹 「Windows 已保护你的电脑」。
点 「更多信息」→「仍要运行」 就行。签名证书要付费,不是程序有问题。
环境要求
| 项目 | 要求 |
|---|---|
| 系统 | Windows 10 / 11(64 位) |
| 微信 | 已安装并登录(4.x) |
| Node.js | 不需要,运行时已内嵌进 exe |
| 空余端口 | 9421 和 62000 |
上手
需要记住的唯一一件事:顺序
先启动 DRtokenTool,再打开小程序。
启动工具之前就已经在运行的小程序接不上调试通道,必须关掉重开一次。
三步
1. 准备微信
启动微信并确认已登录。小程序如果开着,先关掉。
2. 启动 DRtokenTool
双击桌面图标。会出现一个命令行窗口:
=== DRtokenTool ===
[*] 进程 pid 53244
启动器: ...\RadiumWMPF\WeChatAppEx.exe
[*] 正在确认目标模块...
flue.dll: 已加载 @ 0x7ff82f8c0000 (229 MB)
路径: ...\RadiumWMPF\25715\extracted\runtime\flue.dll
[*] WMPF 版本 25715 (来源: 版本目录 file_component.xml)
[*] 偏移来源: 内置配置
[*] 调试通道已开启:
9421 小程序私有协议
62000 CDP 代理
[*] 等待小程序接入........
看到 等待小程序接入 就说明准备好了。
3. 打开目标小程序
在微信里打开小程序,几秒后 token 就出来了:
================ TOKEN ================
WXXCX...(约 100 字符)
=======================================
账号数据:
{ "studentId": "STU-...", "studentName": "...", ... }
[*] 已写入 DRtokenTool.json
窗口不要关,关掉调试通道就没了。要退出按 Ctrl+C。
输出怎么看
token 两个地方都能拿:
- 命令行窗口里
================ TOKEN ================下面那一行 - 程序目录下的
DRtokenTool.json
{
"token": "WXXCX...",
"userInfo": { "studentId": "STU-...", "studentName": "..." },
"capturedAt": "2026-09-23T19:30:00.000Z"
}
每次的 token 都不一样
这是正常的。 token 是会话级的,小程序每次重新打开都会换一个,旧的自动失效。
命令行选项
在命令行里跑能得到更多控制:
| 选项 | 说明 | 什么时候用 |
|---|---|---|
--auto-detect |
强制重新扫描 hook 偏移 | 内置配置对不上、行为异常时 |
--output <文件> |
指定结果 JSON 的路径 | 想写到别处 |
--no-file |
只打印,不写文件 | 不想留文件 |
--no-browser |
不打印 DevTools 地址 | 不需要调试页面 |
--debug-port <n> |
调试端口,默认 9421 |
端口被占用时换一个 |
--cdp-port <n> |
CDP 代理端口,默认 62000 |
端口被占用时换一个 |
--capture |
额外抓一次真实请求头 | 想知道 token 怎么传的 |
-h, --help |
显示帮助 | — |
在安装目录的地址栏输入 cmd 回车,就能在那个目录打开命令行。
进阶用法
看 token 到底怎么传的
DRtokenTool.exe --capture
它会临时包装 wx.request,抓一次真实请求,把 token 在请求头里的位置打印出来。
这里有个坑:
wx.request在小程序的wx对象上不是普通属性,而是带 getter/setter 的访问器属性。直接用wx.request = fn赋值会被 setter 吞掉、 拦截不生效;用delete wx.request还原则会把方法整个删掉,导致这个小程序会话 此后再也发不出任何网络请求。所以必须保存并还原完整的属性描述符。
端口被占用
netstat -ano | findstr :9421
然后换个端口:
DRtokenTool.exe --debug-port 9521 --cdp-port 63000
用浏览器继续调试
启动时会打印 CDP 地址(形如 http://127.0.0.1:62000)。把它填进 Chrome 的
DevTools 前端,就能用完整的 Network / Console 面板调试小程序,跟调网页一样。
微信以管理员身份运行
微信是「以管理员身份运行」启动的,DRtokenTool 也必须以管理员身份运行,否则权限不够。
反过来,微信没用管理员时,DRtokenTool 也别用——两边权限不一致反而容易失败。
常见问题
等待小程序接入超时
两个原因,按顺序排查:
- 小程序没打开 → 打开它
- 小程序在工具启动之前就打开了 → 关掉重新打开
未找到小程序逻辑层
小程序还在加载中就连了 CDP。保持 DRtokenTool 运行,把小程序关掉重新打开一次。
未找到 WeChatAppEx.exe 进程
微信没开。启动微信并登录,再运行本工具。
无法确定 WMPF 版本
把窗口里的完整输出发给开发者——里面每个来源读到的版本号都打出来了, 是定位问题的关键线索。
提示「没有加载 flue.dll」
你这台机器的 WMPF 版本比较老,代码还在 WeChatAppEx.exe 里而不是 flue.dll,
而且不在内置的 52 个版本配置内。这种情况需要手工适配。
检测偏移时微信卡死或闪退
先看提示里有没有这一行:
[!] 检测到可能触发自我保护/反篡改的模块: WMPFDrm.dll
有的话说明这个版本带了反篡改保护,长时间附加会被它强制结束进程, 不要再走自动检测。
没有这一行但仍然卡死,说明遇到了旧版检测脚本的问题——它会因为大规模 JS 回调风暴
拖垮目标进程。现在的版本已改成 scanSync 一次性取回结果,实测检测在约 7 秒内完成。
小程序闪退
两个原因:
- 顺序反了 → 确认是「先起 exe、再开小程序」
- 开全局代理了 → 关闭 Clash、yakit 之类。已确认它们会触发 WebSocket 帧错误
无法加载 frida:找不到 frida_binding.node
exe 不完整,多半是传输中被杀软改过或复制中断。重新复制一份。
杀毒软件报警
工具会注入进程、开本地端口,行为特征和恶意软件相似,误报是常见的。
确认来源可信后再放行;介意的话可以自己从源码构建。
它是怎么做到的
DRtokenTool.exe
│
├─ 1. 用 frida 定位 WeChatAppEx.exe 主进程
│ (被其他子进程指向为父进程的那个)
│ 并向进程查询实际加载的 flue.dll 路径,据此确定版本号
│
├─ 2. 取 hook 偏移:内置配置 → 上次缓存 → 特征扫描
│
├─ 3. 启动两个服务
│ 9421 小程序私有调试协议
│ 62000 标准 CDP 代理
│
├─ 4. 注入 hook:强制 debug_flag = 1、把 scene 改成 1101、
│ 把 CDP 过滤器的返回值 6 改成 0 → 小程序连上 9421
│
├─ 5. 等小程序接入,连 62000 发 CDP:
│ Runtime.enable / Debugger.enable → 定位「逻辑层」上下文
│
└─ 6. 读 wx storage,输出 token 与账号数据
版本号为什么不能只看 exe
RadiumWMPF 的目录布局差别很大,路径里不一定带版本号。见过两种:
布局 A(exe 在版本目录内)
...\RadiumWMPF\25560\extracted\runtime\WeChatAppEx.exe
布局 B(启动器在插件根目录,运行时在「同级」版本目录里)
...\RadiumWMPF\WeChatAppEx.exe ← 正在运行的进程
...\RadiumWMPF\25715\extracted\runtime\flue.dll ← 真正的运行时
布局 B 是陷阱:进程路径没有版本号,而且它所在目录里也没有 flue.dll,
必须去同级的版本目录找。
更反直觉的是,WeChatAppEx.exe 只是启动器,版本资源会滞后。实测某台机器插件
是 25560 时,该 exe 仍报告 2.5.6.25558。所以程序不优先采信它,而是按
「进程实际加载的 flue.dll → 路径 → 清单 → dll 版本资源」的顺序探测,
并把每个来源读到的值都打印出来。
token 为什么只在「逻辑层」
小程序有多个 JS 上下文。视图层虽然也有 document / localStorage,
但没有 wx,里面只有广告之类的 WebView 数据。程序通过探测
typeof wx.getStorageInfoSync === 'function' 来锁定逻辑层。
安全须知
token 等于你的登录态,拿到的人可以直接以你的身份调用后端接口,不需要密码、 不需要扫码。
- 不要提交进 git 仓库
- 不要粘贴到公开的聊天群、论坛、issue
- 截图发出去之前先打码
- 测试结束后重新登录一次,旧 token 就失效了
只对你拥有或已获明确授权的小程序与账号使用。 拿别人的小程序做这件事属于 未授权访问。
工具会修改目标进程内存(hook 的必需步骤),并开启监听 9421 和 62000。
调试通道是本地回环的,不对局域网开放。用完后按 Ctrl+C 退出即可。
开源
以 GPL-2.0-only 发布,源码在 GitHub。
许可证不是随便选的:它基于 WMPFDebugger (作者 evi0s,同样是 GPL-2.0-only),并内嵌了其 hook 脚本、检测脚本、偏移配置与 协议模块。GPLv2 要求衍生作品同样以 GPLv2 分发。