JS爬虫实战之极验四代

极验四代滑块验证码

  • 一、目标网站说明
  • 二、流程步骤
    • 1. 逆向步骤一般分为:
    • 2. 接口确认
          • 1- 确认流程
          • 2- 获取verify的参数
          • 3- 构建requests验证verify的参数
          • 4- 锁定secode参数的作用
      • ok,让我们去获取verify接口中的响应!!!
    • 3. 参数确认 & 重试校验参数逻辑
          • 1- 我们确认了要获取verify接口后,便来开始参数确认。经过一番确认,所有的参数都在params中。
          • 2- verif接口
          • 3- load接口中参数lot_number, payload, process_token
            • 4- 跟进load接口
          • 5- 参数 captcha_id
          • 6- verify接口
    • 4. 寻找逆向入口
          • 1- Initiator堆栈进入, 断点调试
          • 2- 查找参数w
          • 3- 提取生成e的函数
          • 4- 这里是个异步函数,重新断点查看e是什么。
          • 5- 寻找e的生成逻辑。
          • 6- 寻找参数 setLeft, passtime, userresponse。
          • 6- 查看参数e的构成。
          • 7- 跟到此处,发现s中有参数出现。
          • 8- 如pow_msg参数生成位置。
          • 9- 此时,这个r就包含了我们要的两个参数,我们一个个看
          • 10- 参数pow_msg ,pow_sign
          • 11- ok,来,我们继续, 剩下还有7个字段。
          • 12- 参数: geetest, lang, ep。
          • 13- 参数: bhit。
          • 14- 参数 gee_guard

一、目标网站说明

本文章仅用于学习,不可用于任何非法途径,不授权任何单位和个人。特此申明保命。我这里就直接放链接了

https://gt4.geetest.com/

!!! 后续还有,csdn出bug,后续图片一直无法显示,正在修复!!!

二、流程步骤

1. 逆向步骤一般分为:

  1. 接口确认: 找到我们需要的接口进行分析;
  2. 参数确认: 在接口中提炼出我们需要处理的参数;
  3. 重试校验参数逻辑: 查看参数之间关系;
  4. 寻找逆向入口: 找到参数生成位置 ;
  5. 获取加密算法: 实现参数逻辑;
  6. 爬虫代码编辑: 爬虫代码编写;

2. 接口确认

1- 确认流程

网站打开后就是一个验证页面。不知道怎么操作,那就模拟全程过一遍,抓个包。
在这里插入图片描述

2- 获取verify的参数

一点一划就提示验证通过。抓包如下,里面各类参数,也不知道有什么用。
在这里插入图片描述

3- 构建requests验证verify的参数

那我们点击登录, 提示成功。 我们拿到登录接口的包,构建requests
在这里插入图片描述

4- 锁定secode参数的作用

经过一番操作,我们知道了,登录中参数每次只能使用一次,而关键参数为验证码接口返回的参数:secode。每次拿到secode后,就可登录一次,那我们本次逆向就有目标了。获取verify接口中的响应,并提取secode参数。
在这里插入图片描述

ok,让我们去获取verify接口中的响应!!!

3. 参数确认 & 重试校验参数逻辑

1- 我们确认了要获取verify接口后,便来开始参数确认。经过一番确认,所有的参数都在params中。
params = {"callback": "geetest_1720668074855","captcha_id": "54088bb07d2df...80300b0abbe","client_type": "web","lot_number": "047e84f8d5a...5bbbceb5748d","risk_type": "slide","payload": "_b-sD...H8Kw==","process_token": "90dfc9ada24d1fc22...9770c09aeeebb7a3f","payload_protocol": "1","pt": "1","w": "92e...78a6"
}
2- verif接口

其中captcha_id, lot_number, payload, process_token, w参数均为疑似的五个参数。 那我们一个个查看,他们是从哪里的。此时,切记不可上来就去源码中跟值跟栈,我们重新走一下流程,看下各个参数的出处。
在这里插入图片描述

3- load接口中参数lot_number, payload, process_token

刷新一下页面,直接就能看到load接口中lot_number, payload, process_token三个参数都出来了。
在这里插入图片描述

4- 跟进load接口

而load接口中的参数有两个,一个为 captcha_id,另一个为 challenge。而 captcha_id 同时也是verify接口中的参数。ok,那我们先搞定load接口
在这里插入图片描述

5- 参数 captcha_id

直接搜索,调用,ok搞定了 captcha_id 参数。至于challenge参数【多次调用,发现没有这个参数也同样能运行成功】。那我们可以认为challenge为非必须得。
在这里插入图片描述
在这里插入图片描述

6- verify接口

ok此时,verify接口中的参数只剩下最后一个w。而在多次搜索调用之后,发现w不是在其他接口中生成的。那我们大概率需要逆向的就是这个w参数了。此时,我们开始跟栈,来到我们今天的重头戏。极验四代验证码的核心逆向参数:w参数

4. 寻找逆向入口

1- Initiator堆栈进入, 断点调试

在这里插入图片描述

2- 查找参数w

向上跟栈,发现这个i就是我们要的w参数。i的生成方式就在这个函数内部,是由e通过一些函数生成来的。
在这里插入图片描述

3- 提取生成e的函数

打印可知,i是由e经过两个js内置函数生成来的,目前先,默认函数内无任何修改,那我们先继续看e。e是函数调用传入的参数,我们继续向上跟栈。

var i = (0,m[$_BIBCI(95)])(f[$_BIBCI(95)][$_BIBDJ(525)](e), n)

在这里插入图片描述

4- 这里是个异步函数,重新断点查看e是什么。

在这里插入图片描述
其中e的属性包括这些,那我们继续跟e值,查看其中14个字段都是从哪里来的。

{"setLeft": 181,"passtime": 841,"userresponse": 181.9300161705061,"device_id": "","lot_number": "b462187b4ead41e6a5d2b77548203f5e","pow_msg": "1|0|md5|2024-07-11T11:55:16.611805+08:00|54088bb07d2df3c46b79f80300b0abbe|b462187b4ead41e6a5d2b77548203f5e||658f22accd2183b4","pow_sign": "ca634f84e6dcc5f99137a8630c0b3151","geetest": "captcha","lang": "zh","ep": "123","biht": "1426265548","gee_guard": {"roe": {"aup": "3","sep": "3","egp": "3","auh": "3","rew": "3","snh": "3","res": "3","cdc": "3"}},"7MVm": "l7wr","em": {"ph": 0,"cp": 0,"ek": "11","wd": 1,"nt": 0,"si": 0,"sc": 0}
}
5- 寻找e的生成逻辑。

断点断在这里,我们发现,e中只有三个参数。 说明加密逻辑就在这段中间。我们首先把这三个参数找到

var $_BIBCd = tLHEB.$_Cu{"setLeft": 173,"passtime": 1512,"userresponse": 173.97730827346714
}

在这里插入图片描述

6- 寻找参数 setLeft, passtime, userresponse。

我们向上稍微一跟,就发现了如下地方, 这里就是三个参数的生成位置。

其中
t[$_FFFCq(1430)] 为固定值
a是由i生成, i为图形与左边坐标计算值
r为滑动花费时间这段可能就涉及到滑块滑动数据,我们先暂存。搞定逆向逻辑,再看看滑块怎么回事。

在这里插入图片描述

6- 查看参数e的构成。

当我们走到以下断点时,发现e中莫名就出现了4个参数,仔细看这一段,就会发现是从this中传入的,那我们的目标就要换成this从何而来。
在这里插入图片描述
此时我们回过头来看e中内容已经如下,我们已经获取了其中7个字段。除了pow_msg, pow_sign两个参数需要查看生成逻辑,其余5个字段已经能成功获取到

{"setLeft": 198,"passtime": 1111,"userresponse": 198.82952045171382,"device_id": "","lot_number": "f393217f8a5c42dab8307d4a39ceaf63","pow_msg": "1|0|md5|2024-07-11T14:00:38.733038+08:00|54088bb07d2df3c46b79f80300b0abbe|f393217f8a5c42dab8307d4a39ceaf63||355ef192aefce069","pow_sign": "8a5f229ce04fbc08862e98a17242c470"
}
7- 跟到此处,发现s中有参数出现。

再跟这两个值时一直有个误区,以为这两个值是滑块验证时出现的,其实不然,这两个值在加载图片的时候就已经生成,验证时才挂载到e上,所以我们应该从刷新页面时开始跟值而不是一直守着verify接口。
在这里插入图片描述
用同样的思路,一直向上跟栈。 终于跟到了这个地方,此处就是 pow_msg 生成的地方
在这里插入图片描述

8- 如pow_msg参数生成位置。
r = (0,d[$_BGCIY(42)])(n, i, s[$_BGCIY(518)], s[$_BGCIY(582)], s[$_BGCIY(535)], s[$_BGCIY(579)], $_BGCHo(79))

在这里插入图片描述

9- 此时,这个r就包含了我们要的两个参数,我们一个个看
n: 'lotNumber'
i: 'captchaId' 
s[$_BGCIY(518)]
s[$_BGCIY(582)]
s[$_BGCIY(535)]
s[$_BGCIY(579)]
$_BGCHo(79)
这些都是load接口中返回的数据。

在这里插入图片描述

10- 参数pow_msg ,pow_sign

那我们还剩最后一点点, 还记得我们e参数吗, 总共14个未知字段,现在我们已经找到了7个字段。那我们回头再看

{"setLeft": 181,											√"passtime": 841,										√"userresponse": 181.9300161705061,	√"device_id": "",											√"lot_number": "b462187b4ead41e6a5d2b77548203f5e",			√"pow_msg": "1|0|md5|2024-07-	11T11:55:16.611805+08:00|54088bb07d2df3c46b79f80300b0abbe|b462187b4ead41e6a5d2b77548203f5e||658f22accd2183b4",		√"pow_sign": "ca634f84e6dcc5f99137a8630c0b3151",			√"geetest": "captcha","lang": "zh","ep": "123","biht": "1426265548","gee_guard": {"roe": {"aup": "3","sep": "3","egp": "3","auh": "3","rew": "3","snh": "3","res": "3","cdc": "3"}},"7MVm": "l7wr","em": {"ph": 0,"cp": 0,"ek": "11","wd": 1,"nt": 0,"si": 0,"sc": 0}
}
11- ok,来,我们继续, 剩下还有7个字段。

此时,我们清空所有断点, 再次跟到e生成的地方。跟到此处,又有4个参数,出现了,来,就是这段,仔细读读。
在这里插入图片描述

12- 参数: geetest, lang, ep。

从十行代码中找到参数位置也很快,跟到这个地方, 三个参数搞定。从这里进去。
在这里插入图片描述
在这里插入图片描述
但是怎么看这三个参数都像是可以固定的
在这里插入图片描述

13- 参数: bhit。

bhit 看起来似乎也是个固定值 “1426265548”
在这里插入图片描述

14- 参数 gee_guard

至此e中14个字段,搞定了12个。都看到这里了,最后两个字段,再坚持坚持
gee_guard目测也是固定值
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/45236.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java算法day12

java算法day12 199二叉树的右视图637二叉树的层平均值515 在每个树行中找最大值429 N叉树的层序遍历116 填充每个节点的下一个右侧节点指针 199 二叉树的右视图 这题还是层序遍历的板子,但是在处理上略有差异 这个题我一开始的想法就有误,因为我一开始…

基于PID控制器的双容控制系统matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1PID控制器的基本原理 4.2双容水箱系统的数学模型 5.完整工程文件 1.课题概述 基于PID控制器的双容控制系统matlab仿真,仿真输出PID控制下的水位和流量两个指标。 2.系统仿真结果 &…

Nginx七层(应用层)反向代理:SCGI代理scgi_pass篇

Nginx七层(应用层)反向代理 SCGI代理scgi_pass篇 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this art…

ENSP防火墙

实验拓扑图 需求: ENSP的配置: 防火墙: 交换机: 华为防火墙的配置: 接口配置: 安全区域: 安全策略: 办公区访问DMZ: 生产区访问DMZ: 游客区只能访问门户网…

[人工智能]对未来建筑行业的影响

作者主页: 知孤云出岫 目录 引言1. 人工智能在建筑行业的应用场景1.1 设计阶段1.2 施工阶段1.3 运营和管理 2. 关键技术2.1 机器学习2.2 计算机视觉2.3 自然语言处理2.4 大数据分析 3. 实际案例分析3.1 案例1:利用GAN生成建筑设计方案3.2 案例2:利用计算…

操作User表的CRUD增删改查(二):修改和删除

文章目录 修改运行发现数据库数据没有添加进去 修改 int u session.update(s, new User(1,"xiaoxiao",18));运行发现数据库数据没有添加进去 运行发现数据库没有添加进去数据,原因是默认是手动添加的,需要修改。 有两种方法然后再重新运行&a…

如何ssh远程Windows电脑

参考:https://www.jianshu.com/p/1321b46b40ee 上述教程中,直接根据微软的教程进行openssh安装 遇到的问题 远程windows电脑需要具备什么条件? 需要Windows电脑上安装了openssh server 远程Windows电脑的话,用户怎么创建&…

教育与社会的发展

生产力与教育的关系 政治经济制度与教育的关系 文化和人口与教育的关系

whereis命令是 Linux 和类 Unix 系统中的一个命令行工具,用于定位二进制程序、源代码和手册页(man pages)的位置

文章目录 1、whereis2、实例 1、whereis whereis 命令是 Linux 和类 Unix 系统中的一个命令行工具,用于定位二进制程序、源代码和手册页(man pages)的位置。当你想要快速找到某个程序或命令的安装位置时,whereis 命令会非常有用。…

YOLOv10改进 | 添加注意力机制篇 | 添加LSKAttention大核注意力机制助力极限涨点

一、本文介绍 在这篇文章中,我们将讲解如何将LSKAttention大核注意力机制应用于YOLOv10,以实现显著的性能提升。首先,我们介绍LSKAttention机制的基本原理,它主要通过将深度卷积层的2D卷积核分解为水平和垂直1D卷积核&#xff0…

方便好用的C#.Net万能工具库Masuit.Tools

文章目录 简介开发环境安装使用特色功能示例代码1. 检验字符串是否是Email、手机号、URL、IP地址、身份证号等2.硬件监测(需要管理员权限,仅支持Windows,部分函数仅支持物理机模式)3.html的防XSS处理:4.整理Windows系统的内存:5.任…

如何搭建互联网医院系统源码?医疗陪诊APP开发实战详解

今天,小编将为大家讲解如何搭建一个完整的互联网医院系统源码,并介绍医疗陪诊APP的开发实战。 一、互联网医院系统的架构设计 搭建一个完整的互联网医院系统,需要从架构设计开始。一个典型的互联网医院系统通常包含以下几个核心模块&#xf…

PyTorch人脸检测

新书速览|PyTorch深度学习与企业级项目实战-CSDN博客 人脸检测解决的问题是确定一幅图上有没有人脸,而人脸识别解决的问题是这张脸是谁的。可以说人脸检测是人脸识别的前期工作。这里介绍Dlib库,它提供了Python接口,里面有人脸检测器&#x…

线程安全(二)synchronized 的底层实现原理、锁升级

目录 一、基础使用1.1 不加锁的代码实现1.2 加锁的代码实现二、实现原理2.1 synchronized 简介2.2 对象监控器(Monitor)2.3 加锁过程第一步:判断 Owner 指向第二步:进入 EntryList 阻塞第三步:主动进入 WaitSet 等待三、锁升级3.1 对象的内存结构3.2 Mark Word 对象头3.3 …

【安全设备】入侵检测

一、什么是入侵检测 入侵检测是一种网络安全技术,用于监测和识别对计算机系统或网络的恶意使用行为或未经授权的访问。入侵检测系统(IDS)是实现这一目标的技术手段,其主要目的是确保计算机系统的安全,通过及时发现并报…

蜂窝互联网接入:连接世界的无缝体验

通过Wi—Fi,人们可以方便地接入互联网,但无线局域网的覆盖范围通常只有10~100m。当我们携带笔记本电脑在外面四处移动时,并不是在所有地方都能找到可接入互联网的Wi—Fi热点,这时候蜂窝移动通信系统可以为我们提供广域…

hudi数据湖万字全方位教程+应用示例

1、时间轴(TimeLine) Hudi的核心是维护表上在不同的即时时间(instants)执行的所有操作的时间轴(timeline),这有助于提供表的即时视图 一个instant由以下三个部分组成: 1)…

Java高级重点知识点-25-Stream流、方法引用

文章目录 Stream流流式思想概述获取流常用方法 方法引用方法引用符通过对象名引用成员方法通过类名称引用静态方法通过super引用成员方法通过this引用成员方法类的构造器引用数组的构造器引用 Stream流 通过循环遍历来讲解流的优势; 要求:筛选所有姓张的…

实现Android夜间模式主题:从入门到精通

实现Android夜间模式主题:从入门到精通 随着用户对夜间模式的需求越来越高,Android开发者需要掌握如何在应用中实现夜间模式。本文将详细介绍在Android中实现夜间模式的步骤,包括配置、实现、以及一些最佳实践,帮助开发者创建更具吸引力和用户友好的应用。 夜间模式的优势…

Redis基础教程(二十):Java使用Redis

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…