概览:
- 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) {
...
}