螺丝帽验证码

news2024/11/30 4:54:58
网址:https://captcha.luosimao.com/demo

啥价螺丝帽验证码???一开始我也不知道,看k哥发了个动态就学了一下。

个人总结:难点在图片还原

要或者图片的坐标的话,最简单快速的方式:xyolo,3个分类,随便标注几十张图片多半就够了。

要放假了,坐不住了呀,哎。今天这个B班就上到这里吧。领导让玩深度学习,好想吐槽,我不想做这种。

看下效果图:

打工苦,打工累,打工还得教学费,咋办哟,不想打工了,国庆回来要好好考虑考虑了。

对了对了把代码给大家学习学习,仅供学习。

# -*- coding:utf-8 -*-
'''
author:qin
q:2695733665
v:15702312233
'''
import re
import requests,urllib3
import time,hashlib
from PIL import Image
from loguru import logger
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64,random
urllib3.disable_warnings()
from urllib.parse import urlencode

def AES_encrypt(key,iv,plaintext):
    # 设置加密密钥和明文
    key = key.encode()  # 密钥长度必须为16、24或32字节
    iv = iv.encode() # IV(初始化向量)
    plaintext = plaintext.encode()

    # 创建 AES 加密器对象
    cipher = AES.new(key, AES.MODE_CBC, iv)

    # 使用 ZeroPadding 进行填充
    padded_plaintext = pad(plaintext, AES.block_size)

    # 执行加密
    ciphertext = cipher.encrypt(padded_plaintext)

    # 将加密结果转换为 Base64 字符串
    base64_ciphertext = base64.b64encode(ciphertext).decode()

    # 输出加密结果
    # logger.info(f"加密结果:{base64_ciphertext}")

    # # 解密过程
    # decipher = AES.new(key, AES.MODE_CBC, iv)
    #
    # # 将 Base64 字符串解码并解密密文
    # decoded_ciphertext = base64.b64decode(base64_ciphertext)
    # plain = unpad(decipher.decrypt(decoded_ciphertext), AES.block_size)
    #
    # # 输出解密结果
    # print("解密结果:", plain.decode())
    return base64_ciphertext

def randomcode():
    random_num = random.random()
    number=int(random_num * (36**9))
    alphabet = '0123456789abcdefghijklmnopqrstuvwxyz'
    if number == 0:
        return '0'
    base36 = ''
    while number != 0:
        number, i = divmod(number, 36)
        base36 = alphabet[i] + base36
    return '_'+base36[:9]

def reloadImg(imgPath,section):
    image = Image.open(imgPath)
    new_img = Image.new("RGBA", (300, 160))
    for index in range(len(section)):
        x = int(section[index][0])
        y = int(section[index][1])
        slice_ = image.crop(box=(x, y, x + 20, y + 80))
        new_img.paste(slice_, box=(index % 15 * 20, 80 if index > 14 else 0))
    new_img.save("1.png")

def verify_code():
    headers = {
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Cache-Control": "no-cache",
        "Connection": "keep-alive",
        "Pragma": "no-cache",
        "Referer": "https://spidertools.cn/",
        "Host":"captcha.luosimao.com",
        "Sec-Fetch-Dest": "document",
        "Sec-Fetch-Mode": "navigate",
        "Sec-Fetch-Site": "cross-site",
        "Sec-Fetch-User": "?1",
        "Upgrade-Insecure-Requests": "1",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
        "sec-ch-ua": "\"Not/A)Brand\";v=\"99\", \"Google Chrome\";v=\"115\", \"Chromium\";v=\"115\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "\"Windows\""
    }
    session =requests.Session()
    session.verify=False
    resp_demo = session.get(url = "https://captcha.luosimao.com/demo/", headers=headers)
    site_key=re.findall('data-site-key="(.*?)"',resp_demo.text)[0]
    i='_amylgm0g8' or randomcode()
    logger.info(f'site_key:{site_key},i:{i}')
    params = {
        "k": site_key,
        "l": "zh-cn",
        "s": "normal",
        "i": i
    }
    widget_url="https://captcha.luosimao.com/api/widget?"+urlencode(params)
    resp_widget = session.get(url = widget_url, headers=headers)
    token=re.findall('data-token="(.*?)"',resp_widget.text)[0]
    data_pass=re.findall('data-pass="(.*?)"',resp_widget.text)[0]
    logger.info(f'token:{token},data_pass:{data_pass}')
    bg_text=f"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36||{token}||1920:1080||win32||webkit"
    b_text=f"{random.randint(60,200)},{random.randint(0,3)}:{int(time.time()*1000)}||{random.randint(60,200)},{random.randint(10,20)}:{int(time.time()*1000)+random.randint(60,200)}"
    headers = {
        "Accept": "*/*",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Cache-Control": "no-cache",
        "Connection": "keep-alive",
        "Content-type": "application/x-www-form-urlencoded",
        "Origin": "https://captcha.luosimao.com",
        "Pragma": "no-cache",
        "Referer": widget_url,
        "Host": "captcha.luosimao.com",
        "Sec-Fetch-Dest": "empty",
        "Sec-Fetch-Mode": "cors",
        "Sec-Fetch-Site": "same-origin",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
        "X-Requested-With": "XMLHttpRequest",
        "sec-ch-ua": "\"Not/A)Brand\";v=\"99\", \"Google Chrome\";v=\"115\", \"Chromium\";v=\"115\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "\"Windows\""
    }
    params = {
        "k": site_key,
        "l": "zh-cn"
    }
    key = 'c28725d494c78ad782a6199c341630ee'
    iv = '2801003954373300'
    data = {
        "bg": AES_encrypt(key,iv,bg_text),
        "b": AES_encrypt(key,iv,b_text)
    }
    request_url="https://captcha.luosimao.com/api/request?"+urlencode(params)
    request_resp = session.post(url = request_url, headers=headers, data=data).json()
    w=re.findall('<i>(.*?)</i>',request_resp['w'])[0].split(',')
    s=request_resp['s']
    h=request_resp['h']
    key=i=request_resp['i']
    logger.info(f'w:{w},s:{s}')
    logger.info(f'h:{h},key:{key}')
    params = {
        "s": s,
        "i": i,
        "l": "zh-cn"
    }
    headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Cache-Control': 'no-cache',
        'Connection': 'keep-alive',
        'Pragma': 'no-cache',
        'Referer': 'https://captcha.luosimao.com/demo/',
        'Sec-Fetch-Dest': 'iframe',
        "Host":"captcha.luosimao.com",
        'Sec-Fetch-Mode': 'navigate',
        'Sec-Fetch-Site': 'same-origin',
        'Sec-Fetch-User': '?1',
        'Upgrade-Insecure-Requests': '1',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
        'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="115", "Chromium";v="115"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"',
    }
    frame_url="https://captcha.luosimao.com/api/frame?"+urlencode(params)
    resp_frame = session.get(url=frame_url, headers=headers)
    captchaImage=eval(str(re.findall('captchaImage =(.*?);',resp_frame.text)[0]).replace('p:','"p":').replace('l:','"l":'))
    logger.info(captchaImage)
    imgUrl=captchaImage['p'][0]
    imgbytes=requests.get(url=imgUrl).content
    imgPath="1.jpg"
    with open(imgPath, "wb")as f:
        f.write(imgbytes)
    section=captchaImage['l']
    reloadImg(imgPath,section)
    headers = {
        'Accept': '*/*',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Cache-Control': 'no-cache',
        'Connection': 'keep-alive',
        'Content-type': 'application/x-www-form-urlencoded',
        "Referer": frame_url,
        'Origin': 'https://captcha.luosimao.com',
        'Pragma': 'no-cache',
        "Host": "captcha.luosimao.com",
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
        'X-Requested-With': 'XMLHttpRequest',
        'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="115", "Chromium";v="115"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"',
    }
    point_list=[]
    for i in range(1,4):
        logger.info(f'输入第{4-i}个{w[3-i]}图像的纵横坐标')
        point = str(input())
        point_list.append(point)
    points='#'.join(point_list)
    logger.info(f'points:{points}')

    data = {
        "h": h,
        "v": AES_encrypt(key,iv,points).replace('+','-').replace('/','_').replace('=',''),
        "s": hashlib.md5(points.encode()).hexdigest()
    }
    logger.info(data)
    response = session.post(url = "https://captcha.luosimao.com/api/user_verify", headers=headers, data=data)
    logger.debug(response.json())

if __name__ == '__main__':
    verify_code()

好了好了就这样了,提前祝大家国庆-中秋快乐,出去玩的小伙伴也要注意安全。

完事儿了哦,大表哥们。有问题可以给我留言。

记得关注我们的作坊:图腾视觉开放平台-高速、稳定、易用的webapi接口调用 (现已合作大佬超乎你想象)图腾视觉-OCR识别平台

提示:有问题的小伙伴可以私信讨论。

重要的事儿说三遍 :若是侵权请联系作者删,若是侵权请联系作者删,若是侵权请联系作者删。

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

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

相关文章

Spring的注解开发-注解原理解析-xml方式/注解方式组件扫描

目录 Spring注解的解析原理 xml配置组件扫描 注解方式配置组件扫描 原理图 yysy&#xff0c;没有搞太明白&#xff0c;真的复杂&#xff0c;欢迎大佬留言解惑 Spring注解的解析原理 使用Component等注解配置完毕后&#xff0c;要配置组件扫描才能使注解生效 xml配置组件扫…

尚硅谷HTML习笔记

计算机的两位先驱&#xff1a; 1、图灵 人工智能之父 2、冯诺依曼 现代计算机之父 计算机的组成 一、软件&#xff1a;分为系统软件和应用软件 系统软件&#xff1a;windows、mac、linux、harmony 应用软件&#xff1a;下载的软件如微信 二、硬件&#xff1a; ①中央处理器&am…

自媒体时代软件行业的新奇怪商业模式

前几天看一个公众号&#xff0c;介绍如何下载高质量的DEM数据&#xff0c;里面最吸引人是&#xff1a;博主大骂淘宝卖数据的无良商家&#xff0c;说他们的数据不值得买&#xff0c;赚的是黑心钱&#xff01; 本着好奇&#xff1a;我仔细阅读了一下数据的下载方式&#xff0c;非…

Spark性能监测+集群配置

spark-dashboard 参考链接 架构图 Spark官网中提供了一系列的接口可以查看任务运行时的各种指标 运行 卸载docker https://blog.csdn.net/wangerrong/article/details/126750198 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest…

CSS详细基础(一)选择器基础

本帖开始&#xff0c;我们来介绍CSS——即&#xff0c;层叠样式表~ 层叠样式表是一种用来表现HTML&#xff08;标准通用标记语言的一个应用&#xff09;或XML&#xff08;标准通用标记语言的一个子集&#xff09;等文件样式的计算机语言。简单的说&#xff0c;层叠就是对一个元…

激光雷达:自动驾驶的眼睛

激光雷达&#xff1a;自动驾驶的眼睛 文章目录 引言激光雷达的原理自动驾驶中的应用激光雷达的优势激光雷达的挑战结论结论 2023星火培训【专项营】Apollo开发者社区布道师倾力打造&#xff0c;包含PnC、新感知等的全新专项课程上线了。理论与实践相结合&#xff0c;全新的PnC培…

TRB爆仓分析,套利分析,行情判断!

毫无疑问昨日TRB又成为涨幅榜的明星&#xff0c;总结下来&#xff0c;多军赚麻&#xff0c;空头爆仓&#xff0c;套利爽歪歪&#xff01; 先说风险最小的套利情况&#xff0c;这里两种套利都能实现收益。 现货与永续合约的资金费率套利年化资金费率达到惊人的3285%——DeFi的…

熔断、限流、降级 —— SpringCloud Alibaba Sentinel

Sentinel 简介 Sentinel 是阿里中间件团队开源的&#xff0c;面向分布式服务架构的高可用流量防护组件&#xff0c;主要以流量为切入点&#xff0c;从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性 Sentinel 提供了两个服务组件…

雷达实测数据的信噪比

最近处理了一段时间的雷达实测数据&#xff0c;其中有一个很重要的指标就是信号的信噪比&#xff0c;信噪比定义很简单就是信号的功率除以噪声功率&#xff0c;一般取dB &#xff08;其中如果分子分母是功率的话&#xff0c;那么公式为10log10(X)&#xff0c;如果分子分母是幅度…

ciscn_2019_s_9

ciscn_2019_s_9 Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX disabled PIE: No PIE (0x8048000) RWX: Has RWX segments32位&#xff0c;啥也没开&#xff0c;开心愉悦写shellcode int pwn() {char s[24]; // [esp8…

【Django笔记】 登录功能

1. post请求 sign/templates/index.html 其中 &#xff1a; <form method"post"> <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title></head> <bod…

[Linux] 5.Linux虚拟机和Windows文件共享

一、拖拽 如果安装了VMware Tool可以从Windows直接拖进Linux中共享文件&#xff0c;通过拖拽的方式可以把文件从Linux 传输到Windows 二、 文件共享 需要安装VMware Tool点击添加&#xff0c;选择Windows文件的路径&#xff0c;名称作为Linux访问的路径 cd什么都不加&#xff…

进阶指针(四)—— 加强对指针,数组名,sizeof,strlen的理解

✨博客主页&#xff1a;小钱编程成长记 &#x1f388;博客专栏&#xff1a;进阶C语言 &#x1f388;推荐相关博文&#xff1a;进阶C语言&#xff08;一&#xff09;、进阶C语言&#xff08;二&#xff09;、进阶C语言&#xff08;三&#xff09; 进阶指针&#xff08;四&#x…

【数据结构】链表与LinkedList

作者主页&#xff1a;paper jie 的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVA数据结构》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精…

Nodejs搭建本地http服务器,通过【内网穿透】实现远程访问

目录 前言 1.Node.js下载 2.创建node服务器 3.打开node服务器 4.内网穿透实现远程访问 4.1安装cpolar 4.2创建隧道&#xff08;网站&#xff09; 4.3固定公网地址 前言 今天我们学习一个有意思的东西&#xff0c;那就是内网穿透。在此之前我有一些关于html、CSS和Java…

c++---I/o操作

5、文件操作 程序运行时产生的数据都属于临时数据&#xff0c;程序一旦运行结束都会被释放。 我们可以通过文件将数据持久化 C中对文件操作需要包含头文件 <fstream> 文件类型分为两种&#xff1a; 文本文件 - 文件以文本的ASCII码形式存储在计算机中二进制文件 - 文…

机器学习之SGD, Batch, and Mini Batch的简单介绍

文章目录 总述SGD(Stochastic Gradient Descent)(随机梯度下降&#xff09;Batch &#xff08;批量&#xff09;mini Batch (迷你批量&#xff09; 总述 SGD, Batch, and Mini Batch是可用于神经网络的监督学习计算权重更新的方案&#xff0c;即∆wij。 SGD(Stochastic Gradi…

三等分功分器[波导]设计详细教程

想必大家通过阅读相关文献可以发现三等分实现可以有很多不同的方法&#xff0c;这里采用的是先不等分再等分的方式&#xff0c;仅供参考。 主要指标 中心频率为280GHz&#xff0c;采用WR-3频段的标准波导&#xff0c;将2:1不等功率分配耦合器与3dB等功率分配耦合器级联&#…

JUC——并发编程—第三部分

四大函数式接口(必须掌握) 函数式接口:只有一个方法的接口 FunctionalInterface public interface Runnable {public abstract void run(); }//简化编程模型&#xff0c;在新版本的框架底层大量应用 //foreach(消费者的函数式接口)Function接口(函数型接口) /*** Function 函…

中睿天下参展2023海军工程大学首届网络安全文化周并发表主题演讲

2023年9月3日至9月8日&#xff0c;海军工程大学首届网络安全文化周活动于武汉举办。本次活动以“守护蓝疆网安有我”为主题&#xff0c;设有特邀嘉宾前沿讲座、网络安全圆桌交流论坛、网络安全科技展、网络对抗实战竞技、网络安全保密视频创作和信息安全知识竞赛等系列活动。 海…