windows下通杀wx小程序云函数实战
本帖最后由 小沫子 于 2023-9-11 18:30 编辑# 本文章仅用于学习交流,请勿用于非法用途
> 试过的都知道, 用了云函数的小程序抓包是拿不到结果的
> 找了个使用云开发做的小程序 **《某问卷系统》**
### 1. 解包
- 工具有不少
- 我这里用的是 (https://github.com/r3x5ur/unveilr) 最新版
```bash
unveiler wx -sf "D:\WeChat Files\Applet\wx5cxxxxxxxx13347f\77"
```
### 2. 确定是云开发
- 打开查看app.js 确实是云开发的
!(https://pic.imgdb.cn/item/64fa90bd661c6c8e548fd4df.jpg)
- 这种的想抓数据,只能用 (https://baike.baidu.com/item/%E8%BF%9C%E7%A8%8B%E8%BF%87%E7%A8%8B%E8%B0%83%E7%94%A8/7854346) 了
### 3. 修改并重新打包
- 需要改代码重新打包了
- 我们用 (https://github.com/r3x5ur/unveilr) 重新解包一份不解析出`wxml`的
```bash
unveiler wx --no-parse -f "D:\WeChat Files\Applet\wx5cxxxxxxxx13347f\77\__APP__.wxapkg"
```
!(https://pic.imgdb.cn/item/64fa924c661c6c8e5490370a.jpg)
- 先找到入口,一般在 `app-service.js` 这个文件里,搜索 `"app.js"`
!(https://pic.imgdb.cn/item/64fa92e0661c6c8e5490a950.jpg)
- 先开启 `debug` 模式
- 将以下代码注入到`onLaunch`回调中
!(https://pic.imgdb.cn/item/64fa9391661c6c8e5490cb2f.jpg)
- 使用 (https://github.com/r3x5ur/unveilr) 进行重打包,这里我还需要频繁改动,所以加上w参数
```bash
unveiler wx -wp "D:\WeChat Files\Applet\wx5cxxxxxxxx13347f\77\__APP__"
```
- 然后重新打开小程序
!(https://pic.imgdb.cn/item/64fa94cf661c6c8e549101c4.jpg)
- 会发现加载失败,这时候就要用`frida`了
- 这里贴一个我自己用的`frida`脚本
```js
const arr2str = (bytes) => String.fromCharCode(...new Uint8Array(bytes))
const targetPtr = Module.getBaseAddress('WeChatAppEx.exe').add('0x2C1CBB8')
Interceptor.attach(targetPtr, {
onEnter(args) {
void args
const length = 0x20
const rdx = this.context.rdx
const rbp = this.context.rbp
const p1 = rdx.readPointer()
const p2 = rbp.readPointer()
// 将原始 MD5 的数据覆盖到当前 MD5
const oriMd5 = p1.readByteArray(length)
const curMd5 = p2.readByteArray(length)
const m1 = arr2str(curMd5)
const m2 = arr2str(oriMd5)
if (!m2 || m1 === m2) return
p2.writeByteArray(oriMd5)
console.log(`[+] Replaced: ${m1} -> ${m2}`)
},
})
```
这个脚本仅用于`RadiumWMPF`为`6945`的运行环境
!(https://pic.imgdb.cn/item/64fa9596661c6c8e54914877.jpg)
- 开启firda然后重新打包就可以直接生效了,并且弹出了`vConsole`
!(https://pic.imgdb.cn/item/64fa9a07661c6c8e54923343.jpg)
- 接下载将所有云函数的请求都打印到控制台,或者写一个`websocket`服务发出去就行了,请求的话也可以使用`websocket`控制
- 搜了以下 `wx.cloud.callFunction` 发现有一大片
- 这时候可以注入一点代码到入口处
```js
const oldCloud = wx.cloud;
const oriCF = oldCloud.callFunction
oldCloud.callFunction = function (config) {
const _success = config.success
config.success = function (res){
console.log('callFunction===>',res);
_success(res);
}
oriCF(config)
}
```
然后重新打开就可以看到代码已经生效
利用重打包功能,剩下的事情就简单了,直接接个`websocket`出去就能实现`rpc`了
!(https://pic.imgdb.cn/item/64faa7a3661c6c8e5494db5a.jpg) 你好,看到你写的关于hook云函数的方式,十分感谢。
现在有个云托管,用的是
wx.cloud.callContainer,然后我用你的方式写的如下不起作用,
const oldCloud = wx.cloud;
const oriCF = oldCloud.callContainer
oldCloud.callContainer= function (config) {
const _success = config.success
config.success = function (res){
console.log('callContainer===>',res);
_success(res);
}
oriCF(config)
}
希望指点。 ReichesGeld 发表于 2023-9-12 18:54
@周易 哥,麻烦问一下enable-chrome-inspector可以使用得前提是微信版本多少呢
大约……自从`WMPFRuntime`更新为`RadiumWMPF`的时候就有了吧。
虽然普通用户往往感受不到,但是微信内置浏览器的更新实际是较为频繁的。当前的LTS版本如下。
```
https://dldir1.qq.com/weixin/Windows/XPlugin/Package/WMPFRuntime_1.0.1.287_V4676.zip
https://dldir1.qq.com/weixin/Windows/XPlugin/Package/RadiumWMPF_2.0.6.125_x86_V6938.zip
https://dldir1.qq.com/weixin/Windows/XPlugin/Package/RadiumWMPF_2.0.8.33_x64_V8379.zip
https://dldir1.qq.com/weixin/Windows/XPlugin/Package/RadiumWMPF_2.0.8.35_x64_V8391.zip
https://dldir1.qq.com/weixin/Windows/XPlugin/Package/RadiumWMPF_2.0.9.75_x64_V8423.zip
https://dldir1.qq.com/weixin/Windows/XPlugin/Package/RadiumWMPF_2.0.9.85_x64_V8431.zip
```
同时支持`--enable-chrome-inspector`(公众号)和`--enable-vconsole`(小程序)可能是2.0.6版本的事情了。后续高版本中移除(隐藏)了`--enable-vconsole`(小程序)。 unveilr最新版在哪里可以下载到呢
感谢楼主的无私奉献 马克11111 wasm2023 发表于 2023-9-12 11:38
unveilr最新版在哪里可以下载到呢
https://u.openal.lat/ unveilr 竟然收费了 wyp123 发表于 2023-9-12 14:22
unveilr 竟然收费了
好像是的:(eew
unveilr最后免费版本是多少 culprit 发表于 2023-9-12 14:29
unveilr最后免费版本是多少
不清楚,我用的时候就这样了,我在GitHub上看到的,那时候就只有一个链接地址 {:1_896:} 小沫子 发表于 2023-9-12 13:52
https://u.openal.lat/
楼主,麻烦回复下私信