旋转验证码v2的加密算法

某网站最近更新了旋转验证码v2的加密算法,给爬虫程序带来了新的挑战。本文将通过网络抓包和逆向分析,深入探讨验证码请求和响应的加密机制,并提供详细的代码实现,帮助读者了解并应对新版验证码的加密算法。

网络抓包分析:
首先,我们通过网络抓包工具观察验证码请求和响应的参数,以便分析加密算法的实现细节。

发起验证码初始化请求:

import requests
import time

# 构造初始化请求参数
version = 2
timestamp = str(int(time.time()))
referer = "https://example.com"
ak = "your_ak_value"

init_params = {
   "ver": version,
   "_": timestamp,
   "refer": referer,
   "ak": ak
}

# 发起初始化请求
response_init = requests.get("init_url", params=init_params)
init_data = response_init.json()
解析初始化响应获取关键参数:

tk = init_data["tk"]
as_param = init_data["as"]
触发验证码弹出,抓取验证码样式接口:
python
Copy code
# 构造验证码样式请求参数
style_params = {
   "tk": tk,
   "_": timestamp,
   "param1": "value1",
   "param2": "value2",
   # 添加其他参数
}

# 发起验证码样式请求
response_style = requests.get("style_url", params=style_params)
style_data = response_style.json()
解析验证码样式响应获取加密参数:

path = style_data["path"]
backstr = style_data["backstr"]
逆向分析加密算法:
接下来,我们将逆向分析获取的加密参数,以便理解和实现解密过程。

准备解密所需的关键参数:

# 根据实际情况获取其他参数
实现解密算法:

# 编写解密函数
def decrypt_captcha(tk, as_param, path, backstr):
    # 实现解密逻辑
    # 返回解密后的验证码参数
    return decrypted_params

# 调用解密函数
decrypted_params = decrypt_captcha(tk, as_param, path, backstr)
使用解密后的参数进行验证码提交:

# 构造验证码提交请求参数
submit_params = {
   "tk": tk,
   "as": as_param,
   "fs": decrypted_params,
   # 添加其他参数
}

# 发起验证码提交请求
response_submit = requests.post("submit_url", data=submit_params)
submit_result = response_submit.json()

# 处理提交结果
if submit_result["status"] == 0:
    print("验证码提交成功!")
else:
    print("验证码提交失败:", submit_result)

如果上述代码遇到问题或已更新无法使用等情况可以联系Q:1436423940或直接访问www.ttocr.com测试对接(免费得哈)

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

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

相关文章

数据计算_先分组平均再加总平均与直接整体平均的差异

数据计算_先分组平均再加总平均与直接整体平均的差异 例如: 现有 A, B, C, D, E, F, G, H 共 8 组数据。 A: 16619 B: 12922 C: 15946 D: 13096 E: 13647 F: 13700 G: 13703 H: 12430其整体平均的值为: Average of ABCDEFGH: (16619 12922 15946 13096 13647 13700 1…

RecyclerView实现View复用的原理

RecyclerView是Android框架类,用于显示一个持续更新的项列表。它是一个容器,可以利用回收和重用的视图元素来展示数据。 RecyclerView的工作原理: 当RecyclerView需要展示一个新的项时,它会调用Adapter的onCreateViewHolder()方…

Linux--文件、分区与挂载

概述1 **Linux系统中的文件系统是用于管理文件的系统**,它负责数据的存储和管理。在Linux中,一切皆文件,包括普通的文件、目录以及块设备、管道等都通过文件系统来管理。文件系统不仅包含文件中的数据,还包括文件系统的结构&…

授人以渔 选购EX篇:推荐杂记索引

文章目录 系列文章生活好物饮食好物其他好物系统软件篇软件推荐杂记娱乐推荐杂记 系列文章 授人以渔 选购篇一:信用卡选购要点 授人以渔 选购篇二:冰箱选购要点 授人以渔 选购篇三:洗衣机(烘干机)选购要点 授人以渔 选…

感染了后缀为.jayy勒索病毒如何应对?数据能够恢复吗?

导言: 在当今数字化的世界中,网络安全已经成为了每个人都需要关注的重要议题。而勒索病毒作为网络安全领域中的一大威胁,不断地演变和升级,给个人和组织带来了严重的损失和困扰。近期,一种名为.jayy的勒索病毒引起了广…

Pointlio 保存每帧的里程计和点云数据用作后处理的自动或者手动回环优化

修改了laserMapping.cpp 文件,替换源程序的这个文件即可, Pointlio 保存每帧的里程计和点云数据用作后处理的自动或者手动回环优化,需要在设置里面打开保存数据的参数和pub的参数。 // #include <so3_math.h> #include <nav_msgs/Odometry.h> #include <nav…

(十一)RabbitMQ及SpringAMQP

1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;…

anaconda 安装Jupyter

在Anaconda中安装Jupyter Notebook可以通过以下步骤进行&#xff1a; 打开Anaconda命令行界面&#xff08;可以在开始菜单中找到Anaconda3下的Anaconda Prompt&#xff09;。 在命令行中&#xff0c;输入以下命令来更新当前的conda环境&#xff1a; conda update conda 然后…

接口日志表结构

表&#xff1a;ZTALL_IFLOG MANDT MANDT CLNT 3 0 0 客户端 UUID SYSUUID_C32 CHAR 32 0 0 16-byte UID in 32 chars (hexadecimal) IFSNR ZE_IFSNR CHAR 30 0 0 接口编号(系统ID流水号) FUNCNAME RS38L_FNAM CHAR 30 0 0 功能模块的名称 STATUS BAPI_MTYPE CHAR 1 0 0 消息类…

蚓链为可移动经济打造数据资产

​蚓链在为以五菱移动商业为代表的可移动实体经济在数据资产方面带来新的增量和增值&#xff1a; 1. 丰富数据种类和规模&#xff1a;通过数字化手段&#xff0c;可移动实体经济能够收集更多种类和更大规模的数据。 2. 优化运营决策&#xff1a;基于数据分析做出更明智的决策…

2024年MathorCup妈妈杯数学建模思路D题思路解析+参考成品

1 赛题思路 (赛题出来以后第一时间在群内分享&#xff0c;点击下方群名片即可加群) 2 比赛日期和时间 报名截止时间&#xff1a;2024年4月11日&#xff08;周四&#xff09;12:00 比赛开始时间&#xff1a;2024年4月12日&#xff08;周五&#xff09;8:00 比赛结束时间&…

MySQL-基本SQL语句编写:运算符练习

运算符练习 1.选择工资不在5000到12000的员工的姓名和工资 SELECT last_name,salary FROM employees #where salary not between 5000 and 12000; WHERE salary < 5000 OR salary > 12000;2.选择在20或50号部门工作的员工姓名和部门号 SELECT last_name,department_id…

Unity与CocosCreator对比学习二

一、锚点与适配 1.在Creator中 适配通过锚点、位置和Widget达到适配目的&#xff1b;锚点是节点在其父节点坐标系中坐标对其点&#xff0c;其x,y范围在[0, 1]之间&#xff1b; 锚点为(0, 0)时在节点自身的左下角&#xff0c;节点坐标指其左下角在父节点中的坐标&#xff1b;锚…

【C++ STL】简述

文章目录 【 1. 容器 】【 2. 迭代器 】【 3. 适配器 】 C 的 STL&#xff08; 全称是 Standard Template Library 标准模板库&#xff0c;也叫 泛型库&#xff09;是一套功能强大的 C 模板类&#xff0c;提供了 通用的模板类和函数&#xff0c;这些模板类和函数可以实现多种流…

spring之AOP(面向切面编程)之详结

AOP面向切面编程&#xff0c;一种编程范式&#xff0c;指导开发者如何组织程序结构 作用&#xff1a; 在不惊动原始设计的基础上为其进行功能增强 核心概念 代理&#xff1a;SpringAOP的核心本质是采用代理模式实现的连接点&#xff1a;程序执行过程中的任意位置&#xff0…

Python项目21:一个简单的记账系统(收入+支出+查询)

------------★Python练手项目源码★------------ Python项目源码20&#xff1a;银行管理系统&#xff08;开户、查询、取款、存款、转账、锁定、解锁、退出&#xff09; Python项目19&#xff1a;学员信息管理系统&#xff08;简易版&#xff09; Python项目18&#xff1a;…

【Linux-运维】查看操作系统的指定端口占用情况确定端口是哪个服务占用

不同的查看端口占用的方法&#xff0c;应用场景有所不同 一、查询某个端口是否被占用&#xff1f;lsof -i:端口号lsof -i:协议 查看某个协议的占用情况netstat -tlnp|grep 端口号ss -tlnp|grep 端口号fuser 端口号/协议ls -l /proc/$(lsof -t -i:端口号)|grep exe 二、确认指定…

统计天数C++

1.统计天数 问题描述 给定两个年份 n*,*m&#xff0c;问&#xff0c;两个年份之间有多少天&#xff08;包括年份 n 和年份 m&#xff09;&#xff1f; 输入格式 第一行包含两个整数 n*,m&#xff0c;含义与问题描述中相同。 输出格式 输出共一行&#xff0c;包含一个整数…

Android14系统go版添加微件功能

一般normal版软件自带微件功能&#xff0c;但是go版没有这个功能&#xff0c;但是客户有时会要求也要加上这个微件功能&#xff0c;实现的方法修改如下&#xff1a; 1. frameworks/base diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index…

docker compose部署项目—踩坑记录

问题1&#xff1a;创建容器设置的mysql 的密码未生效 创建容器用 MYSQL_ROOT_PASSWORD配置了密码&#xff0c;但是密码没生效&#xff0c;还是原来的密码。 mysql:image: mysql:8.0container_name: mysql_testports:- "3306:3306"environment:TZ: Asia/ShanghaiMYSQ…