微信小程序调试:基于 WMPFDebugger 开启 Chrome DevTools 实时调试
在进行微信小程序前端分析、逆向解构或接口排查时,开发者往往面临调试困难的问题:微信桌面端运行环境(WMPF / WeChatAppEx)默认禁用了常规的审查与调试接口,常规抓包也容易遇到加密协议或内存混淆。
开源项目 WMPFDebugger 提供了一种优雅的解决方案。它能动态 Hook 桌面端小程序的运行进程,将微信私有调试协议转换为标准 Chrome DevTools Protocol (CDP),允许直接在 Chrome 或 Edge 开发者工具中对任意运行中的小程序进行断点调试、控制台打印和源码审查。
一、技术原理浅析
微信桌面端的小程序运行环境依托于 WMPF(WeChat Mini Program Framework)。在内部机制中,小程序并非完全不具备调试能力,而是内置了一套用于远程调试(LanDebug 模式)的私有通道,基于 Protobuf 格式传输并受到严格的进程级过滤。
WMPFDebugger 的核心实现链路如下:
动态注入与内存 Patch:利用 Frida 注入
WeChatAppEx运行时进程,Patch 掉 Chrome 调试协议的过滤器及限制开关,强制解除小程序的远程调试限制。协议双向桥接:逆向微信开发者工具协议定义,将小程序底层的 Protobuf 私有数据包转换为标准的 Chrome DevTools Protocol (CDP)。
CDP 代理服务:本地开启 WebSocket 服务(默认端口
62000),将 Chromium 浏览器的开发者工具前端直接挂接至小程序渲染进程与逻辑层。
二、环境准备与前置检查
1. 基础环境
Node.js:建议 LTS v22 及以上版本
Yarn:包管理工具
Chromium 内核浏览器:Google Chrome 或 Microsoft Edge
2. 检查 WMPF 运行时版本
WMPFDebugger 对微信内置的 WMPF 版本有明确的内存特征匹配要求:
启动微信并打开任意小程序。
打开 Windows 任务管理器,展开并定位到
WeChatAppEx.exe。右键选择 打开文件所在的位置。
查看目录路径结构中位于
RadiumWMPF与extracted之间的数字,该数字即为当前本机的 WMPF 版本号(如25715、25710等)。
提示:如果版本不在官方已知列表中,可以在启动命令中添加
--auto-detect参数,工具将尝试通过动态特征搜索自动适配偏移。
三、部署与使用全流程
1. 获取代码与依赖安装
克隆项目到本地:Bash
git clone https://github.com/evi0s/WMPFDebugger.git
cd WMPFDebugger安装依赖时需要编译底层 Hook 库 frida。若国内网络下载 GitHub Release 较慢,建议配置终端代理后再安装,避免因预编译包下载超时触发源码回退。owerShell
# 安装依赖
yarn2. 启动调试代理服务
在项目根目录启动调试脚本:Bash
npx ts-node src/index.ts如果当前系统的 WMPF 为较新版本或未在列表中,可执行自动探测:Bash
npx ts-node src/index.ts --auto-detect看到控制台输出代理服务已就绪、监听 127.0.0.1:62000 时,保持终端前台运行。
3. 打开目标小程序
严格遵守执行顺序:必须先启动调试服务,再在微信客户端中点击打开目标小程序。服务捕获到进程创建后会自动注入 Hook 并建立 WebSocket 管道。
4. 浏览器挂载 DevTools
打开 Chrome 或 Edge 浏览器,在地址栏直接粘贴访问:Plaintext
devtools://devtools/bundled/inspector.html?ws=127.0.0.1:62000浏览器将直接渲染 Chrome 开发者工具界面。此时可在 Console 面板实时执行 JS 表达式,在 Sources 面板定位解包后的页面结构,并下发动态断点排查关键加密函数与请求参数。
四、常见问题与排坑指南
安装时提示
Visual Studio is not installed:通常是 Frida 二进制包下载超时导致的。配置终端代理或通过环境变量$env:FRIDA_PREBUILT_BINARY手动指定下载好的.tar.gz预编译包即可跳过编译。页面显示空白或连接中断:检查执行先后顺序,务必确保在服务启动完毕并处于监听状态后,再打开小程序;若中途刷新失败,完全关闭小程序进程并重新进入即可。