爬虫验证码分析

声明:

该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关

本文只做简单的验证码分析,不涉及扣代码等逆向

一、常见得验证码平台
  1. 易盾:https://dun.163.com/product/captcha?from=baiduP2_YZM_CP4183
  2. 顶象:https://www.dingxiang-inc.com/business/captcha
  3. 同盾:https://xiaodun.com/onlineExperience/slidingPuzzle
  4. 数美:https://www.ishumei.com/
  5. VAPTCHA:https://www.vaptcha.com/?lang=cn&from=0
  6. 极验:https://www.geetest.com/show
  7. 腾讯:https://007.qq.com/
  8. 阿里:https://we.51job.com/api/job/search-pc?api_key=51job&timestamp=1694777773&keyword=java&searchType=2&function=&industry=&jobArea=000000&jobArea2=&landmark=&metro=&salary=&workYear=&degree=&companyType=&companySize=&jobType=&issueDate=&sortType=0&pageNum=2&requestId=f6e64a68f0c18cd69f676f36a687a233&pageSize=20&source=1&accountId=&pageCode=sou%7Csou%7Csoulb
  9. 谷歌:https://www.google.com/recaptcha/api2/demo,专业破谷歌https://www.yescaptcha.com/auth/register
二、验证码验证过程
  1. 核心步骤
  • 从服务器随机取一张图片,并对图片上的随机x、y坐标和宽高一块区域抠图;
  • 根据步骤一的坐标和宽高,使用二维数组保存原图上抠图区域的像素点坐标;
  • 根据步骤二的坐标点,对原图的抠图区域的颜色进行处理。
  • 完成以上步骤之后得到两张图(扣下来的方块图,带有抠图区域阴影的原图),将这两张图和抠图区域的y坐标传到前台,前端在移动方块验证时,将移动后的x坐标传递到后台与原来的x坐标作比较,如果在阈值内则验证通过。
  1. 请求验证的步骤
  • 前台向后台发起请求,后台随机一张图片做处理将处理完的两张图片的base64,抠图y坐标和token(token为后台缓存验证码的唯一token,可以用缓存和分布式缓存)返回给前台。
  • 前台滑动图片将x坐标和token作为参数请求后台验证,服务器根据token取出x坐标与参数的x进行比较。
  1. 突破方式
  • 人工智能机器学习,确定滑块位置
  • 通过完整图片与缺失滑块的图片进行像素对比,确定滑块位置
  • 花钱找人识别,云码:https://www.jfbym.com/
  • 一般同一个平台同一种验证码突破之后,遇到使用的网站,都可以使用
三、极验验证码分析

极验4代demo:https://www.geetest.com/adaptive-captcha-demo
极验3代demo:https://www.geetest.com/demo/

  1. 打开极验4代demo网址,F12打开调试工具,刷新页面,点击滑块验证方式,找到gcaptcha4.geetest.com/load请求,响应结果会发现bg、slice,其中bg是缺块大图,slice是小图
    在这里插入图片描述
  2. 分析gcaptcha4.geetest.com/load请求,在请求中需要找到captcha_id,搜索captcha_id字段的值,会发现gcaptcha4.geetest.com/verify请求中已经返回,所以在请求gcaptcha4.geetest.com/load之前要先去请求gcaptcha4.geetest.com/verify
    在这里插入图片描述在这里插入图片描述
  3. 分析gcaptcha4.geetest.com/verify,会发现参数中的w参数,这个参数需要通过扣代码获取
    在这里插入图片描述
  4. 验证滑块请求gcaptcha4.geetest.com/verify,验证失败,在响应字段result值是fail;验证成功,在响应字段result值是success,后续请求会使用返回结果中的token
    在这里插入图片描述在这里插入图片描述
四、易盾验证码分析
  1. 打开易盾网址https://dun.163.com/trial/jigsaw,F12打开调试工具,刷新页面,找到api/v3/get请求,响应结果会发现bg、front,其中bg是缺口大图,front是缺块小图
    在这里插入图片描述
  2. 分析api/v3/get请求,在请求中会找到acToken、fp、cb,cb和fp参数没有太特殊的地方,断点直接扣代码就行,主要分析acToken参数
    在这里插入图片描述
  3. 点击Response旁边的Initiator,搜索acToken,找到acToken赋值的地方,全部打断点
    在这里插入图片描述
  4. 刷新验证码图片会进入其中一个断点,分析断点会发现,acToken是回调函数参数C6,鼠标悬浮到wP[m1(0x657)],找到函数位置
    在这里插入图片描述
  5. 找到函数在函数顶部打断点,点击跳过当前函数执行,分析代码,会发现Ky1(0x698)[‘getToken’]函数的调用,在Ky1(0x698)[‘getToken’]代码行断点,分析Ky1(0x698)[‘getToken’],会发现A[‘acConfig’][‘bid’],这个值是由api/v2/getconf请求返回的
    在这里插入图片描述在这里插入图片描述
  6. 按照刚才找wP[m1(0x657)]函数的方法,找到Ky1(0x698)[‘getToken’]并按照之前的方法分析函数内部代码,遇见函数内部最终函数执行的地方,就找到该函数,大概会经历E._getToken(Z, a, r)、this.ka(E, Z, a, r)、pE({C: u,ma: d}几个函数的调用才能找到acToken生成的地方,分析生成acToken的地方,会发现E里面有三个值r、b、d,其中b是时间戳生成的随机数,d是v3/d请求返回的,这里会发现虽然在最初传了bid参数,但是在最终生成acToken中并没有用到,r是固定值,最后会找到oE(JSONh[397])
    在这里插入图片描述在这里插入图片描述
  7. 这是获取验证码请求大概的一个分析过程,其中依赖了api/v2/getconf、v3/d请求中的响应结果,如果找不到这两个请求,就清除cookie重新刷新页面
  8. 验证滑块请求api/v3/check,这个请求中值得注意的是data、cb参数,这两个参数需要逆向;验证失败响应结果svalidate是空字符串;验证成功validate是有返回结果,后续的请求需要带上验证成功的token
    在这里插入图片描述在这里插入图片描述
  9. 这里还需要注意的一个请求是v3/b,每次刷新验证码都会调用该接口;在扣代码的过程中如遇到某些参数值,可以先去v3/b、api/v2/getconf、v3/d请求看看是不是它们的响应结果
五、顶象验证码分析
  1. 打开顶象网址,F12打开调试工具,刷新页面,点击滑块验证方式,找到/api/a请求,响应结果会发现p1、p2,其中p1是缺口大图,p2是缺块小图
    在这里插入图片描述
  2. 分析/api/a请求,在请求中会找到ak、c,其中ak的值是固定的,搜索下ak的值会发现appid,断点调试会发现ak取的就是appid
    在这里插入图片描述在这里插入图片描述
  3. 点击立即验证,搜ak": 会看到basic-Captcha-js.js,里面有ak赋值的地方,进入该文件,在U处打断点,刷新滑块验证,会进入该断点,会发现k取得就是appid,可以搜索appid得值,会找到appid赋值得地方
    在这里插入图片描述在这里插入图片描述
  4. 至于c的值,是由udid/c1请求生成的,不过这个值固定也可以,请求中有个Param是加密,打断点调试udid/c1请求,会发现Param是由appkey、token等信息加密生成的
    在这里插入图片描述在这里插入图片描述
  5. 验证滑块请求api/v1,这个请求中值得注意的是ac参数,ac是指纹信息、缺口识别信息、轨迹信息生成的,需要扣代码 ;验证失败响应结果success是false,token没值;验证成功success是true,token有值,后续的请求需要带上这个token
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
七、如何区分验证码是哪个平台

区分验证码是哪个平台的,可以F12查看验证码元素绑定的class、id

  1. 网易易盾,元素绑定的class一般带有yidun
    在这里插入图片描述
  2. 顶象,元素绑定的class一般带有dx
    在这里插入图片描述
  3. 极验,元素绑定的class一般带有geetest
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

重学Java 5 idea详细使用和运算符

慢点跑,前面的路不好走 ——24.1.14 一、IDEA的使用 1.idea的介绍 1.概述:开发工具 2.特点: a、idea是java写的,所以本地上必须有正确的jdk环境 b、idea自动保存 c、不用我们打开dos命令窗口执行javac和java命令 d、idea有强大的…

数据结构与算法教程,数据结构C语言版教程!(第四部分、字符串,数据结构中的串存储结构)一

第四部分、字符串,数据结构中的串存储结构 串存储结构,也就是存储字符串的数据结构。 很明显,字符串之间的逻辑关系也是“一对一”,用线性表的思维不难想出,串存储结构也有顺序存储和链式存储。 提到字符串&#xff…

Python 自学(八) 之模块

目录 1. import语句导入模块 P206 2. from ... import 语句导入模块 P207 3. 模块的搜索目录 sys.path P209 4. 以主程序的形式执行 __name__ P212 5. python中的包 P213 1. import语句导入模块 P206 同一目录下&…

【MATLAB】 SSA奇异谱分析信号分解算法

有意向获取代码,请转文末观看代码获取方式~ 1 基本定义 SSA奇异谱分析(Singular Spectrum Analysis)是一种处理非线性时间序列数据的方法,可以对时间序列进行分析和预测。 它基于构造在时间序列上的特定矩阵的奇异值分解&#…

12AOP面向切面编程/GoF之代理模式

先看一个例子: 声明一个接口: // - * / 运算的标准接口! public interface Calculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j); }实现该接口: package com.sunsplanter.prox…

编曲混音FL Studio21.2对电脑有什么配置要求

FL Studio 21是一款非常流行的音乐制作软件,它可以帮助音乐人和制作人创作出高质量的音乐作品。然而,为了保证软件的稳定性和流畅性,用户需要知道FL Studio 21对电脑的配置要求。本文将介绍FL Studio 21的配置要求,以帮助用户选择…

Open CV 图像处理基础:(七)学习 OpenCV 的图像增强和边缘检测功能

在Java中学习使用 OpenCV 的图像增强和边缘检测功能 目录 在Java中学习使用 OpenCV 的图像增强和边缘检测功能前言图像增强功能对比度调整(Core.addWeighted())函数原型:参数说明:代码:示例 直方图均衡化(I…

强化学习应用(五):基于Q-learning的物流配送路径规划研究(提供Python代码)

一、Q-learning算法简介 Q-learning是一种强化学习算法,用于解决基于马尔可夫决策过程(MDP)的问题。它通过学习一个值函数来指导智能体在环境中做出决策,以最大化累积奖励。 Q-learning算法的核心思想是使用一个Q值函数来估计每…

图形化编程:开启孩子创新思维的新途径

在科技日新月异的今天,编程已经成为了一项重要的技能。然而,对于孩子们来说,传统的编程语言可能会显得过于复杂和抽象。这时,图形化编程就显得尤为重要。那么,什么是图形化编程?它对孩子有什么帮助呢&#…

web前端算法简介之字典与哈希表

回顾 栈、队列 : 进、出 栈(Stack): 栈的操作主要包括: 队列(Queue): 队列的操作主要包括: 链表、数组 : 多个元素存储组成的 简述链表:数组&…

权责发生制和收付实现制

目录 一. 权责发生制(应记制)二. 收付实现制 \quad 一. 权责发生制(应记制) 应计制就是应该记入的意思 各项收入和费用的确认应当以“实际发生”(归属期)而不是以款项的实际收付作为记账的基础。 正是有会计期间假设,才有权责发生制和收付实…

Odrive 学习系列二:将烧录工具从ST-Link V2修改为JLink

一、背景: 通过观察odrive解压后的内容,可以看到在下面配置文件及makefile文件中的配置设置的均为openOCD + stlink v2,例如makefile中: # This is only a stub for various commands. # Tup is used for the actual compilation.BUILD_DIR = build FIRMWARE = $(BUILD_DI…

【软件测试学习笔记1】测试基础

1.软件测试的定义 软件的定义:控制计算机硬件工作的工具 软件的基本组成:页面客户端,代码服务器,数据服务器 软件产生的过程:需求产生(产品经理),需求文档,设计效果图…

工业级安卓PDA超高频读写器手持掌上电脑,RFID电子标签读写器

掌上电脑,又称为PDA。工业级PDA的特点就是坚固,耐用,可以用在很多环境比较恶劣的地方。 随着技术的不断发展,加快了数字化发展趋势,RFID技术就是RFID射频识别及技术,作为一种新兴的非接触式的自动识别技术&…

【网络工程师】NAT与动态路由

一、NAT网络地址转换 1、NAT:Network Address Translations 网络地址转换 2、ip地址问题:ipv4地址严重不够用了(A、B、C类可以使用 D组播 E科研) 3、解决:把IP地址分为了公网IP和私网IP 公网IP只能在公网上使用 私网…

探索数据之美:深入Seaborn的数据可视化艺术与技巧【第26篇—python:Seaborn】

文章目录 1. 引言2. Seaborn基础2.1 安装和环境设置2.2 常用数据可视化函数2.3 设置样式和颜色主题 3. 数据准备与导入3.1 使用Pandas库加载和处理数据3.2 数据清理和缺失值处理 4. Seaborn中的常见图表4.1 折线图和散点图:展示趋势和变量关系4.2 条形图和箱线图&am…

把模板作为元函数参数传递。

C模板元编程是一种典型的函数式编程,函数在整个编程体系中处于核心的地位。 这里的函数与一般C程序中定义的函数有所区别,其更接近数学意义上的函 数——是无副作用的映射或变换:在输入相同的前提下,多次调用同一个函数&…

命令行登录Mysql的详细讲解

目录 前言1. 本地登录2. 远程登录3. 拓展 前言 对于命令行登录Mysql一般都是用mysql -u root -p 但对于如何远程登陆,一直其他的参数还是有些盲区,对此总结科普 对于登录过程中出现的问题,可看我之前的文章: 服务器 出现ERROR …

[牛客周赛复盘] 牛客周赛 Round 28 20240114

[牛客周赛复盘] 牛客周赛 Round 28 20240114 总结A\B1. 题目描述2. 思路分析3. 代码实现 小红的炸砖块1. 题目描述2. 思路分析3. 代码实现 小红统计区间(easy)1. 题目描述2. 思路分析3. 代码实现 小红的好数组1. 题目描述2. 思路分析3. 代码实现 小红统…

鸿蒙App开发-网络请求-下拉刷新三方库-底部Tab栏-滚动组件(含源码)

本文介绍一个基于鸿蒙ArkTS开发的App,是一个包含轮播图、文章列表和 Web 页面等功能的多页面应用。 本文主要内容包括: 一、效果图 首页 详情页 二、内容简介 1.底部Tab栏和两个页面 App底部是一个TabBar,点击TabBar可以切换上面的页面。共…
最新文章