爬虫逆向学习(八):Canvas画图滑块验证码解决思路与绕过骚操作

此分享只用于学习用途,不作商业用途,若有冒犯,请联系处理

逆向站点

aHR0cHM6Ly93d3cuYm9odWF5aWNhaS5jbi8/VTU4Iy9jaGVtaWNhbC9sb2dpbj9yZWRpcmVjdD0lMkZjaGVtaWNhbA==

滑块验证码样式

在这里插入图片描述

滑块验证码研究

一般的滑块验证码都是会直接提供滑块和缺口背景图片,而这个站点只能直接拿到背景图,滑块和缺口都是用Canvas绘制出来的
在这里插入图片描述

接下来看看它怎么绘制的,我们点击刷新一次得到图片的调用堆栈,进入最顶层的栈,打上断点再刷新一次
在这里插入图片描述

这个时候不断执行跳出函数,大概7次,就能看到Canvas绘制的具体位置了
在这里插入图片描述

当然如果你对Canvas绘图了解的话,如果站点js没有混淆也是可以直接搜索drawImage定位到绘制的代码位置的
在这里插入图片描述

到这里我们只要破解绘制的距离参数就能得到滑块具体了,不过这里先别急,我们先手动滑成功一次,它验证账号密码的接口是/api/igo-cloud-member/login/loginByCred,但是看它的请求头和请求体都没有跟滑块验证码有关的地方,经过验证后发现这个站点只是在前端做了滑块验证码验证,实际的登录流程可以直接构造接口即可。

登录破解

/api/igo-cloud-member/login/loginByCred接口只是对请求体进行加密,并没有其它强校验
在这里插入图片描述

这里我们添加xhr断点,看看这个接口发包前都做了啥
在这里插入图片描述

看调用堆栈,直接点击loginByUserName栈,就可以看到入口了
在这里插入图片描述

添加断点重新登录一次就能看到加密操作了,也就是c.default.jiami,这里说一下sequenceCode,它是在接口/api/igo-cloud-member/login/getCodeByUserCode?userCode=返回的result值,然后经过与密码一样的加密操作后得到的
在这里插入图片描述

这里提供加密算法参考

def aes_encrypt(plaintext, aes_key):cipher = Cipher(algorithms.AES(aes_key.encode()), modes.ECB(), backend=default_backend())encryptor = cipher.encryptor()padder = padding.PKCS7(algorithms.AES.block_size).padder()padded_data = padder.update(plaintext.encode()) + padder.finalize()encrypted = encryptor.update(padded_data) + encryptor.finalize()return base64.b64encode(encrypted).decode()

附加分析

在不考虑绕过前端直接破解接口的方案下,我们怎么处理滑块呢,当然这里的前提使用模拟登录方案
模拟登录的难点就是如何得到滑动距离,有思考过在打开站点页面前进行代码注入,不过没验证,下面提供的方案是通过cv2包得到滑动距离
cv2讲解可以参考这篇文章:不想用selenium处理滑块验证码?教你用cv2解决

这里我们需要先拿到滑块图和缺口图,在我们点击登录时它是直接都显示的,如果直接保存是无法使用的,这时可以修改标签样式实现隐藏来截图

只要加上style="display: none;"就能隐藏不必要的元素的,截完图后去掉它就恢复显示了
在这里插入图片描述
在这里插入图片描述
以playwright为例,screenshot方法能实现标签元素截图保存,而page.evaluate('document.getElementsByClassName("block")[0].setAttribute("style","display=none;");')能实现标签样式修改

得到后调用下方代码就能拿到滑块距离了。

def identify_gap_cut(bg, tp):"""三通道 RGB 滑块距离识别:param bg: 背景图片:param tp: 缺口图片:return int"""# 读取背景图片和缺口图片bg_img = get_cv2_img(bg)  # 背景图片tp_img = get_cv2_img(tp)  # 缺口图片if type(bg_img) == str or type(tp_img) == str:print('图片格式存在问题,无法用cv2读取!')return# # 裁剪图片# tp_height, tp_width, _ = tp_img.shape# tp_start_row, tp_start_col = int(tp_height * 0.25), 0# tp_end_row, tp_end_col = int(tp_height * 0.63), int(tp_width * 1)# tp_img = tp_img[tp_start_row:tp_end_row, tp_start_col:tp_end_col]# height, width, _ = bg_img.shape# print(tp_height, tp_width)# print(height, width)# start_row, start_col = 0, int(tp_width)# end_row, end_col = int(height), int(width)# bg_img = bg_img[start_row:end_row, start_col:end_col]# cv_show(bg_img)# 识别图片边缘bg_edge = cv2.Canny(bg_img, 100, 200)tp_edge = cv2.Canny(tp_img, 100, 200)# 转换图片格式bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB)tp_pic = cv2.cvtColor(tp_edge, cv2.COLOR_GRAY2RGB)# 缺口匹配res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED)min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)print(min_val, max_val, min_loc, max_loc)# 绘制方框th, tw = tp_pic.shape[:2]tl = max_loc  # 左上角点的坐标br = (tl[0] + tw, tl[1] + th)  # 右下角点的坐标cv2.rectangle(bg_img, tl, br, (0, 0, 255), 2)  # 绘制矩形cv2.imwrite('check_ground_map.jpeg', bg_img)  # 保存在本地# 返回缺口的X坐标return max_loc[0]def get_cv2_img(img_object, cv_type=None):if type(img_object) == str:cv_img = cv2.imread(img_object, cv_type) if cv_type else cv2.imread(img_object)elif type(img_object) == bytes:cv_img = np.frombuffer(img_object, np.uint8)cv_img = cv2.imdecode(cv_img, cv_type) if cv_type else cv2.imdecode(cv_img, cv2.IMREAD_ANYCOLOR)else:cv_img = Nonereturn cv_img

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

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

相关文章

Diffusion Model Stable Diffusion(笔记)

参考资料: 文章目录 DDPM架构模型如何拥有产生逼真图片的能力Denoise模型功能Denoise模型如何训练考虑进文字 文生图流程(Stable Diffusion) DDPM架构 模型如何拥有产生逼真图片的能力 Denoise模型功能 通过Denoise将一个噪音图一步步生成为目标图像 Denoise实际…

【开源免费】基于SpringBoot+Vue.JS墙绘产品展示交易平台(JAVA毕业设计)

本文项目编号 T 049 ,文末自助获取源码 \color{red}{T049,文末自助获取源码} T049,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

echarts根据容器宽度动态截取展示横坐标名称

效果如下: 初始状态: 缩放页面后: 代码地址:代码地址-面包多

Oracle 19c 使用EMCC 监控当前所有数据库

一.EMCC简介 EMCC,全称Oracle Enterprise Manager Cloud Control,是Oracle提供的一套集中化监控工具,可以对数据库、操作系统、中间件等进行监控,通过OMS(Oracle Management Service)收集监控数据并将监控信…

赛氪作媒体支持单位受邀参加首届科普翻译与跨学科专业学术研讨会

2024年9月22日,正值全国科普日之际,首届科普翻译与跨学科专业学术研讨会在上海健康与营养研究所信息中心励志厅成功举行并圆满结束。此次研讨会汇聚了来自全国各地的近60名专家学者、学界及企业界代表,共同探讨科普翻译与跨学科专业的发展。作…

OpenAI首款芯片曝光 专为文生视频Sora打造

近日,OpenAI首款芯片的消息终于曝光。据了解OpenAI已经预定了台积电的A16工艺制程,用于制造AI芯片,专为Sora视频应用打造,旨在提升Sore的视频生成能力。 年初曾有报道称,OpenAI CEO奥特曼打算募集7万亿美元和台积电合…

新160个crackme - 064-CR-Game0.7

运行分析 需破解Name、Company、Serial PE分析 32位程序,EP Section为.text,猜测无壳 静态分析&动态调试 ida搜索关键字符串,双击进入函数 level 0 动调sub_401403函数,注释如上Serial输入JPL-168-39,level 0通过 …

比较器(算法中排序)

方式一&#xff1a;不常用 让实体类实现Comparable接口&#xff0c;泛型是需要比较的类型&#xff0c;同时重写compareTo方法 缺点&#xff1a;对代码有侵入性。 public class Student implements Comparable<Student> {private String name;private double score;// …

计算机毕业设计 基于SpringBoot框架的网上蛋糕销售系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

基于springboot+vue的新闻推荐系统

基于springbootvue的新闻推荐系统 摘要 随着信息互联网购物的飞速发展&#xff0c;国内放开了自媒体的政策&#xff0c;一般企业都开始开发属于自己内容分发平台的网站。本文介绍了新闻推荐系统的开发全过程。通过分析企业对于新闻推荐系统的需求&#xff0c;创建了一个计算机…

探索AI编程新境界:aider库揭秘

文章目录 **探索AI编程新境界&#xff1a;aider库揭秘**背景&#xff1a;为何选择aider&#xff1f;简介&#xff1a;aider是什么&#xff1f;安装指南&#xff1a;如何安装aider&#xff1f;功能演示&#xff1a;aider的简单用法实战应用&#xff1a;aider在不同场景下的使用常…

[产品管理-33]:实验室技术与商业化产品的距离,实验室技术在商业化过程中要越过多少道“坎”?

目录 一、实验室技术 1.1 实验室研究性技术 1.2 技术发展的S曲线 技术发展S曲线的主要阶段和特点 技术发展S曲线的意义和应用 二、实验室技术商业化的路径 2.1 实验室技术与商业化产品的距离 1、技术成熟度与稳定性 - 技术自身 2、市场需求与适应性 - 技术是满足需求 …

写一个智慧物流园区的提货滚动看板系统

先看效果&#xff1a; 需求分析 作为5A级智慧物流园&#xff0c;每天几百辆的车流量&#xff0c;前台人工查询效率慢&#xff0c;客户急需解决客户查询货单慢的问题提升效率&#xff0c;减少车辆堵塞 第一步编写接口读取数据库数据&#xff1a; 第二步写前端展示代码&#xff1…

AI 文生图快速入门教程:让 Stable Diffusion 更易于上手

Stable Diffusion 是一个强大的 AI 图像生成工具&#xff0c;但它可能会消耗大量资源。在本指南中&#xff0c;我们将学习如何使用 AUTOMATIC1111 的 Stable Diffusion WebUI 来设置它。同时&#xff0c;我们将在 DigitalOcean GPU Droplet 云服务器上运行它&#xff0c;通过 H…

虚拟硬盘数据恢复(vmdk、vdi、vhd等虚拟磁盘文件)

我们用的虚拟机有时候用着用着就启动不起来了&#xff0c;可能是操作系统启动扇区出了问题或者硬盘数据损坏。如果还有重要的数据文件在虚拟机里面&#xff0c;不要慌&#xff0c;一般只是操作系统的问题&#xff0c;硬盘里面的文件一般是不会丢失损坏的&#xff0c;即使磁盘有…

UE学习篇ContentExample解读------Blueprint_Communication-下

文章目录 总览描述批次阅览2.1 Using an Event Dispatcher function to call an event in the level Blueprint2.2 Binding an Event Dispatcher function to a custom event2.3 Binding an Event Dispathcer to a custom event on spawn3.1 Basic communication using a Bluep…

jQuery——函数的使用

1、作为一般函数调用&#xff1a;$ ( param ) ① 参数为函数&#xff1a;当 DOM 加载完成后&#xff0c;执行此回调函数 ② 参数为选择器字符串&#xff1a;查找所有匹配的标签&#xff0c;并将它们封装成 jQuery 对象 ③ 参数为 DOM 对象&#xff1a;将 DOM 对象封装成 jQu…

828华为云征文|华为云Flexus云服务器X实例Windows系统部署一键短视频生成AI工具moneyprinter

在追求创新与效率并重的今天&#xff0c;我们公司迎难而上&#xff0c;决定自主搭建一款短视频生成AI工具——MoneyPrinter&#xff0c;旨在为市场带来前所未有的创意风暴。面对服务器选择的难题&#xff0c;我们经过深思熟虑与多方比较&#xff0c;最终将信任票投给了华为云Fl…

SW - 将装配体保存成零件给其他装配体用

文章目录 SW - 将装配体保存成零件给其他装配体用概述笔记将子装配图另存为零件给其他装配图用打开另存后的零件图END SW - 将装配体保存成零件给其他装配体用 概述 想做一个散料飞达物料的布局图&#xff0c;初步想法是整一个装配体&#xff0c;然后出工程图标注上散料飞达料…

频谱分析仪:射频领域的多面手

频谱分析仪&#xff0c;作为射频领域的中心工具&#xff0c;其重要性不言而喻。它主要分为实时分析式和扫频式两大类&#xff0c;各自以其独特的方式在信号处理领域发挥着关键作用。实时分析式频谱仪能够即时捕获并分析非重复性、持续时间极短的信号&#xff0c;为科研人员提供…