sk是某东抢购提交订单时,必要的一个参数,是防止自动化提交订单的一种手段,靠一段加密js动态生成。
根据抓包分析过程,发现sk是一段加密js生成的,具体如何抓包,可以查阅我之前写的文章
加密js接口
https://tak.jd.com/a/tr.js?_t=2685900
用浏览器打开返回是这样的
一般人,越到这种情况,就望而却步了,但是为了抢到茅台,还是稍微看了下格式化后的代码,发现一个关键性的一点,如下图中b函数的推导过程
根据上面的关系,其实就可以写代码还原js了,我这里用了正则表达式
我还原后的js大体样子是这样的
是不是比之前好看了很多,虽然还是比较乱,但是可以看出大概的模样了,根据这个代码,就可以分析出sk的具体生成逻辑了,其实其中添加了大量的无效代码,只是为了看起来比较乱,最后看完代码,就可以分析出主要加密逻辑
用户访问过程,先访问了
https://tak.jd.com/t/2D06E?_t=1611540055108
t是时间戳
这个2D06E根据自己抓包看看,据说隔一段时间会有变化
这个抓包自己分析下
会返回一个奇怪的json串,其实sk就是这个返回的json串中内容拼接成的
其中具体用哪些拼接而成,是根据@t这个变量来的,分为cca、cb、xa、ch、cbc、by、cza、ab 八种情况,每种都有不同的拼接方法
返回值为
{
"code": "000000",
"message": "success",
"data": {
"@t": "xa",
"cNK": "voSrW8MUQ63MORUhYvua",
"W": "RZMK001CWc2ooIp1t09O",
"v": "K9PtpzoFhsOqSQtALVgm",
"Is": "QDA7QTqGAauhnvEu2AKl",
"XQw": "x0IljCbG561XC16U3tfR"
}
}
根据以上返回结合js中sk的算法
如果@t为xa时
取的是data中 第二个元素的下标为1~16位 + 第六个元素下标4~10位,注意下标从0开始
也就"voSrW8MUQ63MORUhYvua"的下标1~16 位 加上"x0IljCbG561XC16U3tfR"的4~10位组成如下
oSrW8MUQ63MORUhjCbG56
以上组成的值,就是提交订单生成的sk值的算法
以上某东sk算法的解析,之前很早之前就想写,也有很多关注到我的人一直在后台询问,今天有时间分享了下,主要分享思路,不公布现在的算法结果结果,是希望感兴趣的同学尝试下,这个过程其实很有意思,对自己技术的成长也有一定的帮助。
喜欢作者文章,可以关注下 “无忌学太极”
因篇幅问题不能全部显示,请点此查看更多更全内容