某东抢购sk算法剖析

某东抢购sk算法剖析

sk是什么

sk是某东抢购提交订单时,必要的一个参数,是防止自动化提交订单的一种手段,靠一段加密js动态生成。

sk是如何计算出的

根据抓包分析过程,发现sk是一段加密js生成的,具体如何抓包,可以查阅我之前写的文章

加密js接口

https://tak.jd.com/a/tr.js?_t=2685900

用浏览器打开返回是这样的

在这里插入图片描述

一般人,越到这种情况,就望而却步了,但是为了抢到茅台,还是稍微看了下格式化后的代码,发现一个关键性的一点,如下图中b函数的推导过程
在这里插入图片描述

加密的主要逻辑
  1. js代码中很多字符串,是以a b c 等数组下标替换了
  2. 仔细观察发现所有的数组名称,a1, a2…等等,其实都等于b
  3. b已经可以上图标红函数推导出和a的关系,其实b表示的字符串,就是a表示的字符串数字下标减去一个数字
js还原逻辑

根据上面的关系,其实就可以写代码还原js了,我这里用了正则表达式

  1. 获取a数组的值
  2. 替换文件中所有的a1,a2…替换为b
  3. 根据b和a的关系,替换掉b数组下标为字符串

我还原后的js大体样子是这样的
在这里插入图片描述

是不是比之前好看了很多,虽然还是比较乱,但是可以看出大概的模样了,根据这个代码,就可以分析出sk的具体生成逻辑了,其实其中添加了大量的无效代码,只是为了看起来比较乱,最后看完代码,就可以分析出主要加密逻辑

最终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算法的解析,之前很早之前就想写,也有很多关注到我的人一直在后台询问,今天有时间分享了下,主要分享思路,不公布现在的算法结果结果,是希望感兴趣的同学尝试下,这个过程其实很有意思,对自己技术的成长也有一定的帮助。

喜欢作者文章,可以关注下 “无忌学太极”
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值