京东滑块js逆向

声明:文章内容仅供参考学习,如有侵权请联系作者进行删除。
本次介绍下js逆向的思路
js逆向步骤:
通过接口获取两张验证码图片 ——> 在内存里面处理图片 ——> 通过opencv计算出缺口的距离 ——> 模拟封装滑块的轨迹参数 ——> 逆向加密轨迹的参数 ——> 加密并请求验证接口。
首先,在京东登录页面输入任意的账号密码点击登录,即可触发滑块

在F12下,随意拖动滑块,可以获取到以下3个接口



通过接口返回值可以判断出第二个接口是获取图片的接口,第三个接口是验证滑块的接口。
图片接口的bg是背景图,patch是滑块都是base64编码的
和之前不同的是网页上面的base64编码多了一个头
opencv测算滑块距离代码如下
有一个需要注意的是,js逆向里面距离是需要额外加上一个初始值的,在23-25之间。
回到第三个接口,从参数上面看,很明显d是滑块轨迹加密的参数

通过多次触发接口,我们可以发现,除了d外,c和s也是会变化的;
通过参数搜索,可以确定c是图片接口返回值里challenge的值
s 是某个接口返回值里_jdtdmap_sessionId的值

虽然e的值不变,但是值挺长的(没办法忽视0_0),后面查了下发现是cookie里面的

接下来就轮到加密d上面了
从堆栈里面寻找运行了哪些js文件,这个接口只运行一个js文件,从submit可以推测第二个可能就是我们需要的断点位置

进入里面发现过于简单,直接断点,重新触发滑块

可以知道b就是我们要封装的轨迹,前面a['getCoordinate']就是加密方法
进入加密里面

结合之前堆栈的内容,可以知道,加密都在这个文件里面,可以整个文件直接拿(也可以扣取出加密的部分⊙ˍ⊙)
通过js运行的部分

发现结构简单(这京东是把所有验证都扔给轨迹识别了是吧 Σ(っ °Д °;)っ
直接上代码
关于滑块轨迹的模拟,这个网上的代码挺多的,我直接参考翻译了一个python的版本出来
源码底下自己拿
我来简要说下思路≡ω≡
首先,复制参数b的轨迹,这个轨迹需要正常滑动和最后来回晃动两个种
注意:晃动的轨迹x是要从0开始的,可以通过扩大F2的大小,压缩页面的大小
然后,将计算得到的距离 + 复制的正常滑动轨迹的初始距离来截取正常滑动的区间
重点,取当前时间戳前9位和复制下的正常轨迹的时间后4位,拼接成完整的时间
之后,通过复制的晃动轨迹 + 最终轨迹的值来模拟晃动;时间处理和上面差不多
结果如下

以下是源码链接
https://gitee.com/tkgzone/CSDN.git

