前言
参考:
https://cloud.tencent.com/developer/article/2327496
https://www.freebuf.com/articles/network/393276.html
https://sanshiok.com/archive/14.html#0x01%20%E5%89%8D%E7%BD%AE%E7%9F%A5%E8%AF%86-1
https://forum.butian.net/share/1227
https://blog.zgsec.cn/archives/278.html
https://www.cnblogs.com/mr-ryan/p/17680899.html
https://yaklang.com/Yaklab/WeChatAppEx/
前置知识
框架系统:
- 逻辑层(App Service):基于 javascript,由 app.js、app.json、js 文件、json 配置文件等组成
- 视图层(View):小程序端视图层描述语言 wxml 和 wxss
在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑
测试过程中主要的分析对象就是逻辑层的 js 和 json
环境
本人用的是 MacOS
微信版本 3.8.10
抓包:Proxifier + Yakit
反编译:wxappUnpacker
小程序抓包
使用 Proxifier 进行代理,Proxifier 可以在系统级别通过代理服务器强制 Web 请求,从而使来自不支持代理的应用程序的请求通过代理访问其预期网站
配置代理服务器为 yakit 的 mitm 代理地址
配置规则,指定微信小程序走此代理,Mac 下小程序的路径在 /Applications/WeChat.app/Contents/MacOS/WeChatAppEx.app/Contents/Frameworks/WeChatAppEx Framework.framework/Helpers/WeChatAppEx Helper.app
或者直接复制 "WeChatAppEx Helper.app"; "WeChatAppEx Helper"; com.tencent.xinWeChat.WeChatAppEx.helper
到 Applications 中
然后启动 yakit 劫持即可正常抓包了
注意 proxifier 容易与 clash 的代理起冲突,我这里关闭了 Advanced 中的 Infinite connection loop detection
反编译小程序
Mac 下小程序的源程序存储在 ~/Library/Containers/com.tencent.xinWeChat/Data/.wxapplet/packages/wx{appid}/{...}/__APP__.wxapkg
可删去 packages 下所有 wx{id} 的文件夹再启动小程序来定位我们的目标小程序
在手机上打开,查看小程序详情,可以看到这个小程序的 AppID,即这里的 wx 开头的 id
Android 下存储在 /data/data/com.tencent.mm/MicroMsg/{md5字符串命名的文件夹}/appbrand/pkg/{...}.wxapkg
(微信 8.0.61 版本位置疑似变成了 /data/data/com.tencent.mm/MicroMsg/appbrand/pkg/{...}.wxapkg
)
Windows 在 WeChat Files/Applet/wx{appid}/{...}/__APP__.wxapkg
cp 一份 .wxapkg 出来后使用 wxappUnpacker 进行反编译
一般看 app.js 文件和 app.json 文件,js文件包含小程序调用的JS文件
json文件包含小程序的路径,一般可以用来测试未授权访问
调试模式
即在小程序中f12调开发者工具,这个方法需要 hook 微信,也就是说有封号风险,建议小号测试,我暂时还没有小号能测(