极验2代验证码分析

news2024/11/25 16:33:01
  • 目标链接
'aHR0cDovL3d3dy5qc2dzai5nb3YuY246NTg4ODgvbWluaS9uZXR3ZWIvU01MaWJyYXJ5LmpzcA=='
  • 接口分析
  1. 点击搜索就会跳出验证码,netWebServlet.json 的请求,会返回 challenge 和 gt
    在这里插入图片描述

  2. 接着可以看响应请求图片信息的接口,可以看到请求参数包含challenge、gt、type(验证码类型)

在这里插入图片描述
响应数据新的challenge、验证码图片地址乱、序图片地址、c、s这些都是接下来用到的值
在这里插入图片描述

  1. 然后通过ajax.php 验证是否通过,通过之后返回一个 validate,请求里同样是需要我们逆向的 w 参数:
    在这里插入图片描述
    响应数据validate,拿着去请求就可获得参数
    在这里插入图片描述
  • 接口参数分析
    好像也就是一个w参数需要逆向,全局搜w是不太可能的了;可以从这里跟栈。
    在这里插入图片描述
  1. 也可以w 的 Unicode 值 \x77 即可定位。所以直接全局搜\x77
    在这里插入图片描述
    相当于要解决r7z 、H7z两个值
var H7z = V7zM9r.C8z(92)()
, q7z = n0B[M9r.R8z(699)](h7BM9r.C8z(105), V7zM9r.R8z(818))
, r7z = p7B
  1. 获取H7z值,跟栈可以发现这里就是生成H7z值的地方,查看原型可以发现包含setPublic所以属于RSA加密
    在这里插入图片描述
    直接导入库加密生成H7z值

  2. 获取 r7z值

在这里插入图片描述

q7z = n0B[M9r.R8z(699)](h7B[M9r.C8z(105)](Y7z), V7z[M9r.R8z(818)]())
r7z = p7B[M9r.R8z(260)](q7z)

可以看到其中有个变量 Y7z 参与了计算,先来看看他是怎么来的,直接搜索即可定位,可以发现同样是16进制的编码,由五个值组成:userresponse、passtime、imgload、aa、ep;需要往上找到Y7z生成的地方。
在这里插入图片描述

  1. 先分析userresponse值
    将滑动距离和 challenge 的值传入一个方法,得到一个 9 位字符串
    在这里插入图片描述

  2. 获取 passtime 值
    passtime 不用考虑是怎么通过函数获取的,含义就是滑动完成所花费的时间,直接取轨迹的最后一个值即可,这个也和三四代是一样的,获取语句为:var passtime = track[track.length - 1][2],如下图所示,轨迹的最后一个值时间为 871,passtime 的值同样也为 871。
    在这里插入图片描述

  3. 获取 imgload 值即使可以写死的。

  4. 获取 aa 值
    是通过轨迹进行加密的,加密进行了两次这里直接跟栈将代码扣下即可

  5. 获取 ep 值,从开始传入进来的
    在这里插入图片描述
    ep 的值就是一个版本号,此处是 {‘v’: ‘6.0.9’},写死即可。

  6. 获取 rp 值
    在这里插入图片描述
    自此 Y7z 的第一步生成就分析完毕了,注意接下来还有一步,向 Y7z 里新增了一个 rp 参数:在这里插入图片描述
    这个值的组成看起来很长,实际上是将 gt、challenge 前 32 位以及 passtime 相加经过 MD5 加密后得到的。

Y7z["rp"] = md5(gt + challenge.slice(0, 32) + passtime)
  1. 自此 Y7z 的值就搞定了,然后接着前面的看,也就是 q7z 的值,同样和三四代一样的,encrypt 是 AES 加密,Y7z 经过 JSON.stringify() 处理为字符串作为待加密对象,后面是 16 为随机字符串作为 AES 的 Key,注意这里的随机字符串应该和获取 H7z 值时的随机字符串一致,不然是验证不成功的。
    在这里插入图片描述
    跟栈下一步就是获取 r7z 的值,将上一步得到的 q7z 经过一个方法进行处理。
    在这里插入图片描述
function $_GJF(e) {
    var t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()";
    return e < 0 || e >= t["length"] ? "." : t["charAt"](e);
}

function $_HBO(e, t) {
    return e >> t & 1;
}

function $_HCX(e, o) {
    var i = this;
    o || (o = i);
    for (var t = function(e, t) {
        for (var n = 0, r = 24 - 1; 0 <= r; r -= 1)
            1 === $_HBO(t, r) && (n = (n << 1) + $_HBO(e, r));
        return n;
    }, n = "", r = "", s = e.length, a = 0; a < s; a += 3) {
        var c;
        if (a + 2 < s)
            c = (e[a] << 16) + (e[a + 1] << 8) + e[a + 2],
            n += $_GJF(t(c, 7274496)) + $_GJF(t(c, 9483264)) + $_GJF(t(c, 19220)) + $_GJF(t(c, 235));
        else {
            var _ = s % 3;
            2 == _ ? (c = (e[a] << 16) + (e[a + 1] << 8),
            n += $_GJF(t(c, 7274496)) + $_GJF(t(c, 9483264)) + $_GJF(t(c, 19220)),
            r = ".") : 1 == _ && (c = e[a] << 16,
            n += $_GJF(t(c, 7274496)) + $_GJF(t(c, 9483264)),
            r = "." + ".");
        }
    }
    return {
        "res": n,
        "end": r
    };
}

最好就是整个r7z还原成功了。

总结:

  1. RSA加密时候的随机值要和AES的相同
  2. 滑行时间需要跟你轨迹的最后一个参数相同
  3. 因为它的滑块图前面存在一定空白距离,需要减去否者一直失败
    在这里插入图片描述

报错总结

  1. 里面的rsa和aes的随机值时需要一样的,否者报错
geetest_xxxxxxxxxxxxx({"status": "error", "error": "param decrypt error", "user_error": "\u7f51\u7edc\u4e0d\u7ed9\u529b", "error_code": "error_03"})
  1. challenge不对
geetest_xxxxxxxxxxxxx({"status": "error", "error": "illegal challenge", "user_error": "\u7f51\u7edc\u4e0d\u7ed9\u529b", "error_code": "error_23"})
  1. 水平位移不对
geetest_1617617004437({"success": 0, "message": "fail"})
  1. 如果水平位移正确,轨迹被检测,需要更换轨迹代码
geetest_1617268400314({"success": 0, "message": "forbidden"})
  1. 存在时间问题passtime 滑行时间需要跟你轨迹的最后一个参数相同,否则w错误
    在这里插入图片描述

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

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

相关文章

iOS 组件化或SDK时对资源加载注意点

本文针对cocoapods进行打包的资源做个讲解&#xff0c;针对自身项目注意调整资源访问策略。 资源文件打包方式 使用pod lib create AppResourceModule 来进行演示。 use_frameworks! target AppResourceModule_Example dopod AppResourceModule, :path > ../ end podfil…

Python+Flask+MySQL开发的在线外卖订餐系统(附源码)

文章目录一、项目模块及功能介绍1、登录模块2、注册模块3、商家用户模块4、买家用户模块5、系统管理员模块源码二、项目结构三、环境依赖四、运行方法五、系统部分界面展示1、首页2、注册界面3、登录界面4、商家主界面5、商家菜单界面6、商家添加菜品界面7、商家修改菜品界面8、…

数值程序分析

原文来自微信公众号“编程语言Lab”&#xff1a;数值程序分析 搜索关注“编程语言Lab”公众号&#xff08;HW-PLLab&#xff09;获取编程语言更多技术内容&#xff01; 欢迎加入编程语言社区 SIG-程序分析&#xff0c;了解更多程序分析相关的技术内容。 加入方式&#xff1a;添…

实现自动化部署前端项目,从安装Jenkins到部署完成的整体配置 --适合初学Jenkins、想实现或者学习自动化部署的同学,知识点比较全面,过程写的清晰

前言 一、什么是Jenkins 二、Jenkins安装配置 Linux环境安装JDK Linux环境安装Maven Linux安装Jenkins 启动Jenkins jenkins配置 配置汉化版的jenkins 安装gitHub插件 gitHub配置 jenkins的配置 jenkins的gitHub配置 jenkins的java环境配置 小总结 两种情况 第…

RPCMon:一款基于ETW的RPC监控工具

关于RPCMon RPCMon是一款基于事件跟踪的WindowsRPC监控工具&#xff0c;该工具是一款GUI工具&#xff0c;可以帮助广大研究人员通过ETW&#xff08;Event Tracing for Windows&#xff09;扫描RPC通信。 RPCMon能够为广大研究人员提供进程之间RPC通信的高级视图&#xff0c;该…

谋变2023:家电巨头进击的“三大关口”

2022年的中国家电行业&#xff0c;无疑在艰难中前行。奥维云网&#xff08;AVC&#xff09;推总数据显示&#xff0c;2022年中国家电市场&#xff08;不含3C&#xff09;零售额为7081亿元&#xff0c;同比下滑7.4%。下滑背后的推力是多样的&#xff0c;包括地产市场下行、消费者…

服务端返回内容跨域CORS之后,也在chrome/edge浏览器里显示出响应信息

由于浏览器的同源策略&#xff0c;服务端返回的内容跨域&#xff0c;且没有允许跨域CORS的请求头之后&#xff0c;浏览器无法显示出服务端返回的信息&#xff0c;不方便问题排查。比如&#xff1a;Access to XMLHttpRequest at http://localhost:6001/service-app/query/common…

springcloud-工程创建(IDEA)

文章目录介绍springcloud 常用组件1.创建父工程2.删除父工程的src目录3.修改父工程的pom文件4 springcloud 版本依赖5.创建子模块6 子项目下创建启动类介绍 Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具&#xff0c;它为开发中的配置管理、服务发现、断路器、智…

最全面的内网open虚拟专用网络通道搭建过程

内网open虚拟专用网络通道搭建过程 文章目录内网open虚拟专用网络通道搭建过程前言一、环境准备二、安装open虚拟专用通道2.1、安装依赖包2.2、开始安装三、证书配置3.1、easy-rsa配置修改3.2、初始化与创建CA根证书3.3、生成服务端证书3.4、生成客户端证书3.5、创建服务端配置…

SpringCloud微服务~面试题

1. SpringCloud常见组件有哪些&#xff1f; 问题说明&#xff1a;这个题目主要考察对SpringCloud的组件基本了解 难易程度&#xff1a;简单 参考话术&#xff1a; SpringCloud包含的组件很多&#xff0c;有很多功能是重复的。其中最常用组件包括&#xff1a; 注册中心组件&…

【冲刺金三银四】2023年网络安全工程师面试题合集

以下为信息/网络安全各个方向涉及的面试题&#xff0c;星数越多代表问题出现的几率越大&#xff0c;祝各位都能找到满意的工作~ 【一一帮助网络安全提升点我一一】 ①网络安全学习路线 ②20份渗透测试电子书 ③安全攻防357页笔记 ④50份安全攻防面试指南 ⑤安全红队渗透工具包 …

市场调研计划书如何写?

想要做好一个产品&#xff0c;市场调研是必不可少的一步&#xff0c;也是第一步&#xff0c;那么如何进行市场调研呢&#xff1f;以下是我整理的一份市场调研计划书&#xff0c;希望能够帮助到大家&#xff01;&#xff01;&#xff01; 一、文档版本控制 主要记录文档的版本…

Reverse_SSH:一款基于SSH的反向Shell工具

关于Reverse_SSH Reverse_SSH上一款基于SSH的反向Shell工具&#xff0c;在该工具的帮助下&#xff0c;广大研究人员可以使用SSH来实现反向Shell&#xff0c;并同时拥有下列功能&#xff1a; 1、使用原生SSH语句管理和连接反向Shell&#xff1b; 2、动态、本地和远程转发&#…

[python入门㊷] - python存储数据

目录 ❤ json.dump()存储数据 ❤ json.laod()读取数据 ❤ 保存和读取用户生成的数据 ❤ 重构 JSON(JavaScript Object Notation)格式最初是为JavaScript开发的&#xff0c;但随后成了一种常见格式&#xff0c;被包括Python在内的众多语言采用 ❤ json.dump()存储数据…

基本TCP编程

1. 基本概念 TCP (即传输控制协议) 是一种面向连接的传输层协议,它能提供高可靠性通信 (即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)。 2. 通信流程解析 TCP 通信的流程与打电话的过程相似,以下以一对情侣打电话的过程来展示TCP的通信流程: 其中服务端 …

4.4 序列化与反序列化

文章目录1.概述2.特点/应用场景3.涉及到的流对象4.代码实现序列化与反序列化4.1 步骤1&#xff1a;创建学生类Student24.2 步骤2&#xff1a;创建序列化测试类5.测试案例中常见的几种编译错误类型6.为什么反序列化版本号需要与序列化版本号一致&#xff1f;7.自动提示 生成UID …

10 亿月活用户下,快手基于 Dragonfly 的超大规模镜像分发实践

背景 挑战 快手容器云平台旨在为快手不断增长、不断变化和多样化的业务&#xff0c;提供基于容器化部署的超大规模基础设施服务。为了实现这一目标&#xff0c;快手工程师需要解决弹性、稳定性、效率和无服务器架构等挑战&#xff0c;在这些挑战中&#xff0c;镜像分发的稳定…

职场IT老手教你3步教你玩转可视化大屏设计,让领导眼前一亮!

我是制造企业的IT中心的研发人员&#xff0c;平常工作就是配合业务部门出出报表&#xff0c;选型一些商业软件&#xff0c;并在内部负责实施运维。最近领导出去参观了一些数字化转型比较领先的工厂和制造企业&#xff0c;回来就甩给我几张图&#xff0c;问能不能我们也做几个这…

4. sql 语句中常用命令

1. 数据表&#xff1a; 本文中所有命令&#xff0c;测试的数据表结构如下图&#xff1a; 2. 查询语句&#xff1a; 2.1 基础查询&#xff1a;select //查询单个字段&#xff1a; select 字段名 from 表名; //查询多个字段 select 字段名1,字段名2,... from 表名; //查询所…

数据库的安装部署

目录 方法一&#xff1a;仓库安装 一、添加MySQL仓库 二、安装装MySQL 三、启动MySQL服务器 方法二&#xff1a;本地安装 一、使用以下执行清理之前实验MySQL仓库安装的数据库&#xff1a; 二、网上下载mysql的安装包 三、将下载好的文件传入Redhat中的某个路径中 …