25年7月最新版本利用标准算法库对医保服务平台js逆向之signData进行分析
上面是分析流程,完整js代码在文末获取
1、对当前网页进行药店信息解析
2、开始抓包分析,发现只需要逆载荷中的encData,signData这两个参数就可以成功拿到数据,不用携带headers中的加密值
可以看到我的headers中去掉x-tif-nonce,x-tif-paasid,x-tif-signature一样可以请求。
3、直接搜索加密参数signData,发现虽然有4个位置,但是有两个是变量,两个是函数,只分析函数的那两个值。
4、打上断点后刷新,发现只有下面这个是断住的,只分析这个参数
5、从尾巴依次往上分析
6、可以先拿e.from(a, "hex").toString("base64")去问ai是怎么生成的有替换的方法就不用扣代码
7、所以我们直接复制替换
signData = Buffer.from(a, "hex").toString("base64")
8、然后就依次缺什么函数就去扣
直到一个o函数有点像标准算法库的就去问ai替换
9、有一些值可以固定直接可以写死
10、最终就是signData参数的影响只有下面这三个值。
11、解析成功
完整js代码如下,需要自己安装一下sm-crypto包
const sm = require('C:/Users/Chambliss/node_modules/sm-crypto').sm2;c = "NMVFVILMKT13GEMD3BKPKCTBOQBPZR2P"
d = "AJxKNdmspMaPGj+onJNoQ0cgWk2E3CYFWKBJhpcJrAtC"
const timestamp = Math.floor(Date.now() / 1000);function v(e) {var t = [];for (var n in e)if (e.hasOwnProperty(n) && (e[n] || "".concat(e[n])))if ("data" === n) {var i = Object.assign({}, e[n]);for (var r in i) {if ("number" != typeof i[r] && "boolean" != typeof i[r] || (i[r] = "" + i[r]),Array.isArray(i[r]) && !i[r].length && delete i[r],Array.isArray(i[r]) && i[r].length > 0)for (var o = 0; o < i[r].length; o++)i[r][o] = p(i[r][o]);null != i[r] && i[r] || delete i[r]}var a = p(i);t.push("".concat(n, "=").concat(JSON.stringify(a)))} elset.push("".concat(n, "=").concat(e[n]));return t.push("key=".concat(c)),t.join("&")
}function p(e) {var t = new Array, n = 0;for (var i in e)t[n] = i,n++;var r = [].concat(t).sort(), o = {};for (var a in r)o[r[a]] = e[r[a]];return o
}e = {"appCode": "T98HPCGN5ZVVQBS8LZQNOAEXVI9GYHKQ","data": {"addr": "","regnCode": "450100",//城市编码"medinsName": "","businessLvOutMedOtp": "","pageNum": 2,//页码"pageSize": 10,"queryDataSource": "es"},"encType": "SM4","signType": "SM2","timestamp": timestamp,"version": "1.0.0"
}function smms(e) {r = v(e)a = sm.doSignature(r, d, {hash: !0});signData = Buffer.from(a, "hex").toString("base64")return signData
}console.log(smms(e))
第二篇开始分析encData。可以到我主页看