记一次某微信小程序wasm的sign值逆向

概览:

  • wasm
  • wxminiprogram
  • rsa

反编译小程序代码,调试分析,找到具体算法入口:
反编译小程序发现wasm文件:rsa_sign_bg.wasm.br

强制开启小程序f12, 进行接口调用堆栈寻找sign参数生成点

经过不懈的努力,最终发现加密入口点如下

在这里插入图片描述

代码简单查看、分析:

上述函数入口点,一眼可以看出来所有的逻辑都在rsa_sign.js这个文件下,直接拷贝小程序中define的这个rsa_sign.js的代码到一个本地新文件中

简单查看逻辑

通过require导入了一些其他文件内容,比如httpQuene, textencoder, 以及一些babel的标准内容
在这里插入图片描述
httpQuene的逻辑很简单,直接自行实现一个

babel库中的内容,直接nodejs导入进来

textencoder 扣取出来后,发现其实可以去除掉,hhh,白白又多掉一根头发

最终如下

在这里插入图片描述

require的内容补充完整后,直接在代码最下方运行:

exports.default(
    "appId=fae0d199f50c8c88a742809706dbbbe6&captcha=0a3uRS0w3uof433AVM2w3TdOrW1uRS0T&miniAppId=wx060ecb4f74eac0da&mobilePhone=19963878140&t=1720083382611&third=wxmini",
    "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCsLXAB3UQmNw4lIbF/cq+JV/PvfVeoZrAGd3+HCxnACG0K7tN1/APm1QaVF70ZUM0Nrq+JTBn9JHfRMDz710nZy6SxMLsN7YM3iD0899EflraBjKHNR52SfmeMGtEoCwC/fU2HwLlu7ZTbz5QlmFcxcmMSHCVr6X3nnN+liAbznBkwKui8cLtkenacDhWA3EwH4aCYBdB/v5HQmx9zuTSDuoOiYM1LnGDRrZFymteWRiXStyxpUWqvwKEzjmS+sMVpnbiWqFuc8Nhm0rTGLdt82gp0zYkX++pRUAlC4k9kIZg6t9h6/q9aBYLXBDL3Z75T6FDQzuCkhtrp2eE+0GrLAgMBAAECggEAANPbFPc2S6S6Ga2Wx9EKTPOyRXVpxXJw6CcM4t5Hymd/9qx9MbT7Y9GkTXUmwIdl5OnxCAzolxHkzYmY0XEQds6GxR9B1uhMWCj8el2KkMdNq0O8x1rPxBN9devvE20yHLmCdOOVQJY9v+y4fpHD4YX2OfEOsP0XUNStMoN73RHh+xaKr/SyvzWtyJgjO4uywBSIvORFSHVS9TjBi9vxc6+ussz58ZtGgb0X4qA7cCp3s5CsI9Do9+DfN+qfuZxbTlPPjVdCxR+2DImcFNKfYYXBfwgsg64C4G1Sn2JKabt66Lf8MfeNYtUuu7Pv9hMKpKDG6XA8BxnBw+YFt7Q8GQKBgQDhuo2OFHkBopS3iUETHvCRi/KVvjeFeu94OCMGsZqgkV9aoUAEiWma7bGyKTlE0eEWoMaGCzuiKGHRpEFin9N9zgthj00/yr7o5Pq0Gf5tRTnQtaDEOvdZNrl4hZ/U2vnwYChjcN0D9iuZdia6+tMD02oW6I56Rk/M0SuyK+S+1wKBgQDDRG2WZDNLTiX0fVQO1JFHQtBOxXtBfJlPmlO2vAhh3E3YJ5bVSb2m/yC/0dGsczOXs6r/XgtkvSNntNAk4DhenrpClor3v+y3OpqMGvPwIZJk/gVQxDWwcWKDKWtHUSpinOGcFob4SJHvKQ6A6rMHKgFxzvBgaCR41wZEbSs5LQKBgBiqIreIoyQ7mJZpZ/Pn6I9uxEX6b+Sk5y+yqpkbpPKwj8O+ZNlaDnEAUe9Os9RCPp8TWD3jUlPIp8+ZbA+TuS9A6VtyphU3WR7njkFJqdRUwRl+DyAB9W8JHMD/kNRYTQEn8KHU/kFlj6QIFflOWOpNGoWASbkwn52YqXahdzAnAoGBALRg9crDbQ7XdgBP9eJtQnbNpZfenWl1LDp4mXRoZmXgGJjgmVkV8XfeneYUcNgY40Pz2LZlrai1f4tBYDVwWyItBmqUnnMWfBkWrcVW8JiWqqFYdpiRZ/dCBnqbPFp5A+pseYyy0qNwhj6jcp5sME0h5Iu5Whv0mBx4pXV4U0FRAoGBAKF7tGCKId600S8uvBpy7xIYRJ+rK3WU0UliO5iWWB6LfRp6qIrBMzuVeSVbQQYkwccAGUgBVTpHlz0GVKX+cyI1+bnvZzjx+zGz7+tIUP0bYgd18vMsDHA/bBQHJdybAXDuQEUNZQipnweVO43HD81lAQXDlWOU+9wTRuVvEtR0"
).then((res)=>{
    console.log(res)
})

// Czh3QLJl9rgKR8jK3CEavZXwe5b1MQN184uC3Q9dekOAlG2+/x/7JUhOkjG2V79ML+PzfQLB2eMO1IfFckOu/BGzjTzzbBoRZo+k77t93QIOP5Hwo0vd0NlUu3EIv1/Pqde3Er1Jhp5r0aiYB/dJZmLJMZs1g/l1kmE3EBuSy7X6pvp4ktN2n7+QU7AzSu8nqp8moZ8PsgVZgqu4fVmIn9nvr78d+EbVSey5Sj6AouDH/O+au/P+OlOeAOddzDXeO1fnEP2uzx5gvjgKZ6wYvZWKQ2v8tM/X/geLOSFs2spLRaT/asFdHQOALMQign9rQyXL5SGGU7K5QGpXxgi3cQ==

发现报错:提示没有WXWebAssembly:百度发现如下:

WXWebAssembly是基于 WebAssembly技术的一个方案,专门为微信小程序提供高性能的计算能力。WebAssembly 是一种可移植、体积小、加载快并且兼容 Web 的新式二进制指令格式,设计用于提高 web 应用的运行速度。

本地nodejs运行WXWebAssembly的方式:
WXWebAssembly是微信小程序的新式二进制指令格式, 需要使用nodejs中的brotli库进行二次转换,
具体实现代码如下:

const { decompress } = require('brotli');

const wasmBrBuffer = fs.readFileSync('./analysis/rsa_sign_bg.wasm.br'); // 读取wasm二进制文件buffer
const wasmBuffer = decompress(wasmBrBuffer);  // 使用brotli库,进行解压
WebAssembly.instantiate(wasmBuffer, _).then((function (r) {
...
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值