JS逆向-微信小程序逆向

JS逆向-微信小程序逆向 在移动端安全测试中微信小程序的逆向分析是一个重要且实用的技能。由于小程序代码经过打包、加密并在微信的特定环境中运行其分析流程与常规Web JS有所不同。本笔记从渗透测试实战视角出发系统梳理小程序逆向的环境搭建、核心技术及案例分析思路。1. 环境搭建版本与工具准备逆向微信小程序对环境和版本有特定要求需提前准备类别核心要素关键说明与选择建议微信PC版本特定版本的小程序调试支持部分新版微信可能禁用或修改了调试接口需从历史版本库如wechat-windows-versions中选用支持开启DevTools的版本。HOOK/注入工具开启小程序DevTools、注入JS如WeChatOpenDevTools-Python项目用于强制打开小程序调试面板或注入自定义Hook脚本。反编译工具从本地缓存提取并还原小程序源码如e0e1-wx等项目可将加密的.wxapkg包反编译为可读的JS、JSON、WXML文件。搭建流程示意安装指定版本的微信PC客户端注意关闭自动更新。运行目标小程序使其缓存文件下载到本地。使用反编译工具从微信缓存目录提取并解包小程序源码。利用HOOK工具开启小程序DevTools或直接分析反编译后的代码。2. 核心技术三管齐下的分析方法针对小程序逆向可结合以下三种技术覆盖从静态到动态的全过程2.1 反编译解包静态分析基础目的在无法动态调试时获得完整代码进行通读分析。操作使用反编译工具将__APPEND__.wxapkg等文件还原为项目结构。要点搜索关键字如encrypt、sign、http、header快速定位网络请求和加密相关模块。2.2 HOOK注入调试突破环境限制目的开启被隐藏的DevTools或注入自定义代码拦截函数。操作运行HOOK工具如WeChatOpenDevTools-Python它通常通过内存修改或注入JS使小程序加载时自动打开调试器。优势即使小程序本身禁用了调试也能强制开启进行断点、查看作用域。2.3 常规JS调试动态分析核心目的在DevTools中复现Web JS的逆向流程。操作在Sources面板搜索关键字、下XHR断点、跟踪调用堆栈、分析作用域变量。注意小程序JS可能经过压缩或简单混淆但核心逻辑如加密函数通常仍可辨识。3. 案例演示某医疗小程序加密算法分析思路模拟场景分析某医疗小程序登录接口的password加密参数以进行后续爆破测试。分析流程环境准备安装指定版本微信运行目标小程序。开启调试使用WeChatOpenDevTools-Python工具强制打开小程序DevTools。抓包定位在DevTools的Network面板找到登录请求看到加密的password字段。XHR断点对该请求URL设置XHR断点触发登录断在send处。调用堆栈回溯查看Call Stack向上找到处理密码的函数可能名为encryptPassword或位于某个工具模块中。分析加密逻辑进入函数发现它调用了wx.request的封装并在其中对参数进行了处理。可能使用了crypto-js库或小程序的wx.arrayBufferToBase64等API。观察作用域找到密钥可能硬编码在代码中或从之前接口获取。HOOK辅助若代码复杂可在关键加密函数处注入Hook脚本通过DevTools的Snippets或工具注入打印其输入输出快速确定算法类型。例如HookcryptoJs.AES.encrypt或小程序自带的加密方法。复现算法根据分析结果用Pythonpycryptodome或Node.js复现加密逻辑并在Burp Intruder中调用实现自动化爆破。4. 常见难点与应对难点应对思路小程序代码分包主包和分包可能在不同文件需全局搜索关键字。DOM/BOM API差异小程序使用wx对象而非window注意区分。反调试更强小程序可能检测DevTools状态需结合更底层的Hook。本地存储加密数据可能加密后存储在Storage需分析加解密函数。版本兼容性微信版本更新可能修复调试漏洞需维护多个测试版本。5. 总结从Web到小程序的技能迁移微信小程序逆向的核心思路与Web JS逆向高度相似区别在于环境搭建和API差异。掌握常规JS逆向断点、堆栈、Hook后重点攻克特定版本微信环境的准备与降级。反编译与HOOK工具的选用。小程序特有APIwx对象的识别。通过上述流程你可以将小程序视为一个“增强型”的Web应用系统地分析其加密、签名机制为后续的渗透测试如越权、注入、业务逻辑绕过铺平道路。