本帖最后由 tocabd 于 2024-07-13 20:07 编辑
对拼多多微信小程序rfp算法分析对某夕夕微信小程序抓包发现head头总会带上一个rfp参数,猜测应该属于指纹信息加密后的签名,用于甄别小程序环境,对行为做出风控。研究发现rfp参数由服务器返回。 POST https://xg.pinduoduo.com/xg/pfb/wxapp HTTP/1.1 Host: xg.pinduoduo.com Connection: keep-alive User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b13)XWEB/11065 Content-Type: application/json Referer: https://servicewechat.com/wx32540bd863b27570/1652/page-frame.html {"data":"0aeJy9Vdtu20YQRarCNYAI3SVPox1EUX9vzf5P1NxvvFqk","timestamp":"1720704568787","appKey":"fe","sign":"1f3be6a75638c91cd2602a3df79d39438ad552d0"} 其中参数sign提交到服务器验证的签名,算法为sha1加盐加密算法,加密算法为:salt+timestamp+data,其中盐salt为字符串:feDSL。提交到服务器通过验证会返回rfp值,返回内容中的参数a就是rfp。 其中参数"data":"0aeJy9Vdtu20YQRarCNY****AI3SVPox1EUX9vzf5P1NxvvFqk"由小程序源码中的lightMiniApp.js生成,定位data参数怎么生成的搜索关键词"0a",这个是固定值,搜索很容易就定位到生成data的算法关键位置: "0a" + i.default.base64(r.default.deflate(ft) 深入研究发现里面是由各种小程序相关环境参数加密生成,如果这些参数缺少,即使生成了data也不会通过服务器验证,无法获取到rfp。如何获取这些相关参数?那就要将小程序反编译出来,用微信官方微信开发者工具进行本地调试,在关键位置下断,将这些参数打印出来,赋值到加密函数里面。微信小程序本地调试和浏览器调试js代码有些区别,小程序调试是在想下断的位置插入代码:debugger; 下面是我自己调试获取到的部分参数,避免侵权只展示部分参数: ![](/images/article/9206d22e-cfe1-42ab-a8d9-f4d9dd247728.png)
只要补好相关参数,生成的参数提交到服务器就能成功获取到rfp ![](/images/article/8c1c6654-763d-4139-b071-cb956aa0ae88.png)
注:若转载请注明大神论坛来源(本贴地址)与作者信息。
|