京东滑块js逆向

声明:文章内容仅供参考学习,如有侵权请联系作者进行删除。

之前写过一篇selenium自动化的思路:京东滑块

本次介绍下js逆向的思路

js逆向步骤:

        通过接口获取两张验证码图片 ——>  在内存里面处理图片 ——>  通过opencv计算出缺口的距离 ——>  模拟封装滑块的轨迹参数  ——>  逆向加密轨迹的参数 ——>  加密并请求验证接口。

首先,在京东登录页面输入任意的账号密码点击登录,即可触发滑块

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

 通过接口返回值可以判断出第二个接口是获取图片的接口,第三个接口是验证滑块的接口。

图片接口的bg是背景图,patch是滑块都是base64编码的

        和之前不同的是网页上面的base64编码多了一个头

opencv测算滑块距离代码如下

    def img_test(self, x, y):
        # 以前的版本,多了一个头部的处理
        # x = base64.b64decode(x.split(",")[-1])
        x = base64.b64decode(x)
        img_array = np.frombuffer(x, np.uint8)
        img = cv2.imdecode(img_array, cv2.COLOR_RGB2BGR)
        y = base64.b64decode(y)
        y = np.frombuffer(y, np.uint8)
        template = cv2.imdecode(y, cv2.COLOR_RGB2BGR)
        res = cv2.matchTemplate(img, template, cv2.TM_CCORR_NORMED)
        value = cv2.minMaxLoc(res)[2][0]

        # 获取的图片和显示的验证码图片大小有差
        distance = int(value * 278 / 360+25)

有一个需要注意的是,js逆向里面距离是需要额外加上一个初始值的,在23-25之间。

回到第三个接口,从参数上面看,很明显d是滑块轨迹加密的参数

通过多次触发接口,我们可以发现,除了d外,c和s也是会变化的;

通过参数搜索,可以确定c是图片接口返回值里challenge的值

s 是某个接口返回值里_jdtdmap_sessionId的值

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

接下来就轮到加密d上面了

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

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

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

进入加密里面

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

通过js运行的部分

发现结构简单(这京东是把所有验证都扔给轨迹识别了是吧  Σ(っ °Д °;)っ

直接上代码

     def get_slide(self, slide_value):
        node = execjs.get()
        js = node.compile(open('kkk.js', encoding='utf-8').read())
        func_name = f'JDJRValidate["prototype"].getCoordinate({slide_value})'
        keys = js.eval(func_name)
        return self.sub_verify(keys)

关于滑块轨迹的模拟,这个网上的代码挺多的,我直接参考翻译了一个python的版本出来

源码底下自己拿

我来简要说下思路≡ω≡

         首先,复制参数b的轨迹,这个轨迹需要正常滑动和最后来回晃动两个种

         注意:晃动的轨迹x是要从0开始的,可以通过扩大F2的大小,压缩页面的大小

         然后,将计算得到的距离 复制的正常滑动轨迹的初始距离来截取正常滑动的区间

        重点,取当前时间戳前9位和复制下的正常轨迹的时间后4位,拼接成完整的时间

        之后,通过复制的晃动轨迹 最终轨迹的值来模拟晃动;时间处理和上面差不多

结果如下

以下是源码链接

        CSDN: 博客源码都放这里,自己下

 

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
京东JS逆向403错误通常是由于请求被服务器拒绝或者被检测到了异常行为导致的。根据提供的引用内容,我们可以看到代码中使用了execjs库来执行JavaScript代码,并且调用了getPwd函数进行密码加密。这种逆向行为可能违反了京东的使用条款,因此服务器会返回403错误。 为了解决这个问题,你可以尝试以下几点: 1. 模拟正常的浏览器行为:在请求中添加合适的User-Agent和Referer头部,使请求看起来更像是来自正常的浏览器。 2. 使用合适的代理:使用代理服务器可以隐藏你的真实IP地址,减少被检测到的风险。 3. 降低请求频率:如果你的请求频率过高,可能会被服务器认为是恶意行为。可以适当调整请求的频率,避免被封禁。 4. 分析和修改代码:仔细分析代码中的逻辑,尝试找到可能触发403错误的地方,并进行相应的修改。 需要注意的是,逆向工程和绕过网站的安全措施是违反法律和道德规范的行为。在进行任何逆向行为之前,请确保你有合法的授权,并遵守相关法律法规。 #### 引用[.reference_title] - *1* *2* [京西js逆向](https://blog.csdn.net/T_I_A_N_/article/details/121889686)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [js逆向_极验3代滑块js协议逆向)](https://blog.csdn.net/hdd706/article/details/125453838)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值