文章总结: 本文介绍了一款基于Frida与ChromeDevToolsProtocol(CDP)的微信小程序动态调试框架first,支持Windows与macOS双平台,提供GUI与CLI两种模式。工具核心功能包括通过CDP代理桥接实现小程序调试、路由枚举与导航控制、云函数动态Hook与静态扫描、WXAPKG包体解密解包及敏感信息正则扫描,并支持自定义UserScript注入,适用于小程序安全研究场景。 综合评分: 69 文章分类: 移动安全,逆向分析,安全工具,Web安全
微信小程序调试利器:Frida + CDP 协议桥接双平台工具
棉花糖糖糖 棉花糖糖糖
棉花糖网络安全工具箱
2026年5月5日 11:04 四川
在小说阅读器读本章
去阅读
本工具仅供安全研究与学习使用,请勿用于未授权的目标,使用者须自行承担相关法律责任。
First 是一款面向微信小程序安全研究场景的动态调试框架,基于 Frida 动态注入引擎与 Chrome DevTools Protocol(CDP)代理架构实现。工具以 Python 为核心 runtime,支持 Windows 与 macOS 双平台,同时提供 GUI(PySide6)与 CLI 两种交互模式。
重点导读技术架构
PART 01核心引擎
DebugEngine 类承担运行时总控角色,内部调度三个核心子系统协同工作。
Debug Server:基于 WebSocket 的长连接服务端,运行于 ws://0.0.0.0:9421。小程序客户端通过该端口接入调试协议体系,接收来自工具侧注入的 CDP 指令与 UserScript 脚本。消息编码采用 Protobuf 二进制格式,经 chromeDevtools category 封装后通过自定义 Protobuf Message 结构体传输。
Proxy Server:同样基于 WebSocket,监听可配置端口(默认 62000),负责桥接 Chrome DevTools 与小程序客户端之间的 CDP 协议数据。Proxy Server 将来自 DevTools 的 JSON 格式 CDP 命令转换为 Protobuf 二进制帧,反向同理,实现双向透明的协议转换。
Frida Session:注入模块负责将 hook.js 脚本动态注入 WeChatAppEx 进程。通过读取 frida/config/{platform}/{addresses.<version>.json} 版本地址配置,对指定进程 PID 附加并执行 JavaScript 运行时注入。Windows 平台通过 PPID 频率统计定位主进程,macOS 平台通过 pgrep 与 defaults read 组合方案实现进程发现与版本检测。
PART 02消息总线
DebugMessageBus 作为 central event bus 连接三个子系统。CDP 命令经 Proxy Server 接收后,通过 emit_proxy_message 分发至 Debug Server,再经 Protobuf 封装后发送至小程序侧。反向路径为从小程序侧接收 Protobuf 解包后的 CDP 结果事件,经 emit_cdp_message 推送至 DevTools 客户端。
重点导读核心功能
PART 03路由枚举与导航
MiniProgramNavigator 模块通过注入 universal navigator JavaScript 至小程序上下文,建立 window.nav 对象控制层。该对象封装了 wx.navigateTo、wx.redirectTo、wx.reLaunch、wx.switchTab 等路由 API,提供统一调用接口与安全导航链(reLaunch → switchTab → redirectTo fallback)。
路由枚举功能通过 fetch_config 方法读取小程序配置文件,提取 pages、tabBarPages、appid、entryPagePath 等关键信息,生成完整页面列表供后续调试使用。
PART 04云函数监控
CloudAuditor 模块实现两种云函数调用捕获机制。
动态 Hook:注入 cloud_audit_inject.js JavaScript 运行时,通过 Hook wx.cloud.callFunction 与 wx.cloud.callContainer 实现全局调用拦截。每次调用触发时记录函数名、传入参数、调用结果,形成增量捕获队列。模块通过轮询 getHookedCalls() 获取新捕获记录,并自动检测 Hook 丢失状态(页面切换后需重新注入)。
静态扫描:调用 CDP Debugger.getScriptSource 接口获取已加载脚本源码,通过正则提取 callFunction 调用特征、collection 数据库引用、uploadFile/downloadFile 等存储操作,生成云函数引用清单。
PART 05包体解包与敏感信息扫描
wxapkg.py 实现微信小程序包格式的纯 Python 解密与解包。加密格式采用 “V1MMWX” Magic Header 标识,前 1024 字节经 AES-256-CBC 解密(Key 通过 PBKDF2-SHA1 派生),后续字节流经 appID 后两字符进行 XOR 解密。解包后提取文件列表供后续分析。
extractor.py 模块内置 700+ 正则规则库,涵盖以下检测维度:
- IP 地址、端口、域名、URL 识别
- 身份证号、手机号、邮箱等个人隐私信息
- JWT Token、加密算法引用、密钥/凭证模式
- nuclei 规则库派生的 API Key、Secret Key、Access Token 模式
支持多进程并发扫描目录,输出 JSON 与 HTML 两种报告格式。
PART 06UserScript 注入
支持将 .js 脚本放置于 userscripts/ 目录或通过 --script 参数指定,运行时自动注册至小程序页面上下文。注册时序上,工具在 setupContext 事件触发后立即执行注入,并设置 Debugger.setSkipAllPauses(true) 防止断点卡住初始化流程。
重点导读双端支持
PART 07Windows
支持 WMPF 版本覆盖 11581 至 19201,推荐使用 4.1.0.30 版本。Frida 注入目标进程为 WeChatAppEx.exe,版本信息从进程路径提取的最后一个数字目录名确定。工具根目录下的 启动.bat 提供一键启动入口。
PART 08macOS
支持 WMPF 版本 18152、18788,推荐 4.1.7.30。因系统安全机制限制,Frida 注入可能需要关闭 SIP(系统完整性保护)或强制重签名 WeChat 应用。启动.sh 提供一键启动入口。
重点导读快速启动
GUI 模式:
bashpython gui.py # Windows
python3 gui.py # macOS
CLI 模式:
bashpython main.py --cdp-port 62000
python main.py --debug-main --debug-frida
Chrome DevTools 连接地址:devtools://devtools/bundled/inspector.html?ws=127.0.0.1:62000
重点导读截图预览
PART 09主界面
主界面
PART 10路由导航
路由导航
PART 11云函数分析
云函数分析
PART 12调试开关
调试开关
PART 13敏感信息提取
敏感信息提取-1
敏感信息提取-2
敏感信息提取-3
本公众号非项目作者,仅做技术分享。
本文介绍的项目开源地址如下:
bashhttps://github.com/Spade-sec/First
广告时间
低价考证包括但不限于CISP系列、PMP等等国内网安证书、网络安全交流群请关注公众号后点菜单栏的找棉花糖。
☟上下滑动查看更多
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:棉花糖网络安全工具箱 棉花糖糖糖 棉花糖糖糖《微信小程序调试利器:Frida + CDP 协议桥接双平台工具》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论