ipad协议滑块讲解-3(2000038登录滑块)

请使用python进行编译失调,切勿用于非法用途!!

创建main.js脚本

代码如下

const {VM,VMScript} = require("vm2");
const fs = require("fs");
const {read} = require("./env/main");
const {readJsCode} = require("./JsCode/main");
const cheerio = require('cheerio');
const {getDocument} = require("./cheerio");
const {readHTMLCode} = require("./HTML/main");
const crypto = require("crypto");
const getRandomValues = require('get-random-values');

const{createCanvas} = require('canvas');

const Fingerprint = require("fingerprintjs");


let jsCode = "";
crypto.getRandomValues = getRandomValues;
jsCode += read();
jsCode += readJsCode();
const html = readHTMLCode();
$ = getDocument(html);
//console.log($);
_log = console.log
//debugger;
function sign(){
    const vm = new VM({

    sandbox:{
        outside:{
            $,
            _log,
            cheerio,
            createCanvas,
            }
        }
    });

    const script = new VMScript(jsCode,{filename : "./debug.js"});

    result = vm.run(script);
    return vm.sandbox.outside.sign;
}

/*navigator = window.navigator;

screen = window.screen;

document = window.document;

HTMLCanvasElement = window.HTMLCanvasElement;


finJS = new Fingerprint({canvas:true}).get()*/
//console.log(window);
//console.log(sign())
 

然后创建ceshi.py文件

代码如下

import hashlib
import json
import re
import time
import ddddocr
import requests
import execjs
import base64

from io import BytesIO
from urllib.parse import urlencode
import os

from PIL import Image

def post_api(img):
    with open(img, "rb") as f:
        bin_contents = f.read()
    heads={
        "content-type":"image/png"
    }
    result = requests.post("http://111.224.107.217:710/ocr", data=bin_contents,headers=heads)
    return result.text

def get_img(img1,img2):
    new_image = Image.new('RGB', (672, 620), 'white')

    new_image.paste(img1, (0, 0))

    new_image.paste(img2, (200, 200))


slide = ddddocr.DdddOcr(det=False, ocr=False, show_ad=False)

yuming = "https://t.captcha.qq.com"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

def get_slide_data(aid):
    #url = "https://ssl.ptlogin2.qq.com/check?regmaster=&pt_tea=2&pt_vcode=1&uin=123456&appid=716027609&js_ver=23071715&js_type=1&login_sig=lbhSg7DKUcLjie3yZlSOblGe3WdqeOe9X4daUZecV-lhW7DCOcx6Y1wdPUmbnJ6F&u1=https%3A%2F%2Fgraph.qq.com%2Foauth2.0%2Flogin_jump&r=0.25903945246093674&pt_uistyle=40&daid=383&pt_3rd_aid=102013353&o1vId=b85257193f7035a52f6144d700801644&pt_js_version=v1.46.0"
    #r = requests.get(url, headers=headers).text
    #sid = re.findall(".*?'(.*?)'",r)
    #print(sid[6])
    url="https://t.captcha.qq.com/cap_union_prehandle?aid={}&protocol=https&accver=1&showtype=popup&ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExNi4wLjAuMCBTYWZhcmkvNTM3LjM2&noheader=1&fb=1&aged=0&enableAged=0&enableDarkMode=0&grayscale=1&clientype=2&cap_cd=&uid=&lang=zh-cn&entry_url=https%3A%2F%2F007.qq.com%2Fonline.html&elder_captcha=0&js=%2Ftcaptcha-frame.7f61d9f7.js&login_appid=&wb=2&subsid=11&callback=_aq_426535&sess=".format(aid)
    #url = "https://t.captcha.qq.com/cap_union_prehandle?aid=716027609&protocol=https&accver=1&showtype=embed&ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExNi4wLjAuMCBTYWZhcmkvNTM3LjM2&noheader=1&fb=1&aged=0&enableAged=1&enableDarkMode=0&sid="+sid[6]+"&grayscale=1&clientype=2&cap_cd=&uid=&lang=zh-cn&entry_url=https%3A%2F%2Fgraph.qq.com%2Foauth2.0%2Flogin_jump&elder_captcha=0&js=%2Ftcaptcha-frame.7f61d9f7.js&login_appid=&wb=2&subsid=7&callback=_aq_380771&sess="
    r = requests.get(url, headers=headers).text[11: -1]
    data = json.loads(r)
    #print(data)
    _data ={}
    _data["powCfg"]={}
    _data["sid"] = data["sid"]
    _data["sess"] = data["sess"]
    _data["y"] = data["data"]['dyn_show_info']['fg_elem_list'][1]['init_pos'][1]
    #print(_data["y"],"我是y坐标")
    _data["powCfg"]["md5"] = data["data"]['comm_captcha_cfg']['pow_cfg']["md5"]
    _data["powCfg"]["prefix"] = data["data"]['comm_captcha_cfg']['pow_cfg']["prefix"]
    _data["dcFileName"] = data["data"]['comm_captcha_cfg']['tdc_path']
    _data["cdnPic1"] = data["data"]['dyn_show_info']['bg_elem_cfg']['img_url']
    _data["cdnPic2"] = data["data"]['dyn_show_info']['sprite_url']
    print("_data->",_data)
    #_data["sid"] = data["sid"]
    return _data

def find_slide_notch(url):
    css_dict = {
        "background-image": url,
        "background-position": "-70.8333px -247.917px",
        "background-size": "345.06px 313.69px",
        "width": "60.7143px",
        "height": "60.7143px",
        "left": "25.2976px",
        "top": "123.958px",
        "z-index": "1",
        "cursor": "pointer",
        "opacity": "1",
    }

    # 获取图片并加载为Pillow Image对象
    response = requests.get(css_dict["background-image"])
    img = Image.open(BytesIO(response.content))

    # 解析CSS中的background-position和background-size属性
    bg_position = [float(pos.strip("px")) for pos in css_dict["background-position"].split()]
    bg_size = [float(size.strip("px")) for size in css_dict["background-size"].split()]

    # 计算切割区域
    x = -bg_position[0] * img.width / bg_size[0]
    y = -bg_position[1] * img.height / bg_size[1]
    w = float(css_dict["width"].strip("px")) * img.width / bg_size[0]
    h = float(css_dict["height"].strip("px")) * img.height / bg_size[1]

    # 切割图片
    crop_img = img.crop((x, y, x + w, y + h))

    # 可以将切割后的图片保存到本地
    crop_img.save("crop_img.png")
    with open("crop_img.png", "rb") as fp:
        target_bytes = fp.read()
    return target_bytes

def get_slide_distance(tar_img, back_img):
    #图片处理 ddddorc处理,怎么处理啊,那种新版本的滑块,返回的阴影是整个
    # target_bytes = requests.get(tar_img).content
    target_bytes = find_slide_notch(tar_img)
    background_bytes = requests.get(back_img).content
    res = slide.slide_match(target_bytes, background_bytes, simple_target=True)
    return res["target"][0]-2, res["target"][1]


def post_data(collect, eks, sess, notch_data, prefix, nonce, sid,ip):
    url = "https://t.captcha.qq.com/cap_union_new_verify"
    headers = {
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
    }
    ans = "{},{}".format(notch_data[0], notch_data[1])
    data = {
        "collect":collect,
        "tlg":len(collect),
        "eks":eks,
        "sess":sess,
        "pow_answer":prefix,
        "pow_calc_time":28,
        "ans":[{"elem_id":1,"type":"DynAnswerType_POS","data":ans}]
    }
    #print(data)
    #print(ip)
    try:
        r = requests.post(url, headers=headers, data=urlencode(data), proxies=ip, timeout=(3))
        print(r.text)
        return json.loads(r.text)
    except:
        print("代理ip有问题")
        return {}

def sign_md5(params):
    """
    对拼接好的字符串进行md5签名
    """
    hl = hashlib.md5()
    hl.update(params.encode(encoding='utf-8'))
    return hl.hexdigest()

def get_ans(prefix, md5_code):
    u = 0
    while sign_md5(str(prefix) + str(u)) != md5_code:
        u += 1
    return str(u)


def get_data():
    with open("./main.js", "r", encoding="utf-8") as fp:
        exec_js = execjs.compile(fp.read())
    data = exec_js.call("sign")
    return data

def check(ticket, randstr):
    print(ticket,randstr)
    url = "https://shminorshort.weixin.qq.com/security/secondauth?t=login_verify_entrances/w_tcaptcha_ret&wechat_real_lang=zh_CN&aid=2000000038&clientype=1&lang=2052&apptype=undefined&captype=7&disturblevel=1&secticket=1_50849126415703827916983126930139&pass_ticket=09con7e6%2FLfNNyWYz%2BpNMApotpCkWv3dIq0rMg8J25g6D7c4Iy89Gl4nQFciZiFs8CQdBsOJ48Lmp51KaD4pRQ%3D%3D&ret=0&ticket={}&randstr={}&step=8".format(ticket,randstr)
    headers = {
        "accept": "application/json, text/plain, */*",
        "accept-encoding": "gzip, deflate",
        "accept-language": "zh-CN,zh;q=0.9",
        "referer": url,
        "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/108.0.0.0 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x6309071d) XWEB/8461 Flue"
    }
    jieguo = requests.get(url=url,headers=headers).text
    print(jieguo,"----->我是提交结果")

def tx_start(aid, ip):
    _t = time.time()
    slide_data = get_slide_data(aid)
    #tdc_js = "https://turing.captcha.qcloud.com/" + slide_data["dcFileName"]
    slide_js = requests.get("https://t.captcha.qq.com" + slide_data["dcFileName"], headers=headers).text
    img1 = "https://t.captcha.qq.com" + slide_data["cdnPic1"]
    img2 = "https://t.captcha.qq.com" + slide_data["cdnPic2"]
    print(img1,img2)
    #find_slide_notch(img2)
    #acc = get_slide_distance(img1,img2)
    #print(acc[0],acc[1])
    #notch_data = get_slide_distance(img2, img1)
    background_bytes = requests.get(img1).content
    res = slide.slide_match(background_bytes, find_slide_notch(img2), simple_target=True)
    #res["target"][0] - 2, res["target"][1]
    print(res)
    #heads = {
     #   "content-type": "image/png"
    #}
    #result = requests.post("http://111.224.107.217:710/ocr", data=background_bytes, headers=heads).text

    notch_data =[]
    notch_data.append(res["target"][0] - 2)
    notch_data.append(res["target"][1])
    print("坐标->",notch_data)
    md5_code = slide_data["powCfg"]["md5"]
    prefix = slide_data["powCfg"]["prefix"]
    ans = get_ans(prefix, md5_code)

    with open("./JsCode/start.js", "w", encoding="utf-8") as fp:#我好像没这个东西
        fp.write(slide_js)
        fp.flush()
    print("tx------->执行结果")
    data = get_data()
    collect = data
    eks = re_x_url(slide_js, "='", "'")
    result = post_data(collect, eks, slide_data["sess"], notch_data, prefix + ans, "", slide_data["sid"],ip)
    #print("耗费时间:{}ms".format((time.time() - _t)* 1000))
    #判断是否通过滑块
    if result["errorCode"] == 0:
        ticket = result["ticket"]
        randstr = result["randstr"]
        check(ticket,randstr)
        return result
    else:
        ipurl = "";

        ip = requests.get(ipurl, headers=headers).text;
        proxies = {
            "http": ip,
            "https": ip
        }
        print(proxies)

        # 重试多次退出 需要判断次数 自己补充,等等,ddddocr那个拼接,你复制给我一份
        return tx_start(aid, proxies)


def re_x_url(url, start, end, is_raise=True):
    id = re.findall(r"{}(.*?){}".format(start, end), url)
    if id:
        id = id[0]
    if is_raise and not id:
            print("正则处理数据为空!")
            raise IndexError("正则处理数据为空!")
    return id


if __name__ == '__main__':

    for i in range(10):

        ipurl = "";#这里传代理

        ip = requests.get(ipurl,headers=headers).text;
        proxies = {
            "http": ip,
            "https": ip
        }
        print(proxies)
        tx_start("2000000038",proxies)

然后在py进行编译exe

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

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

相关文章

图像异或加密及唯密文攻击

异或加密 第一种加密方式为异或加密,异或加密的原理是利用异或的可逆性质,原始图像的像素八位bit分别与伪随机二进制序列异或,得到的图像就为加密图像。如下图对lena图像进行加密。 伪随机序列为一系列二进制代码,它受加密秘钥控…

【重点!!!】【DP】354. 俄罗斯套娃信封问题

题目 法1&#xff1a;DP&#xff0c;LIS问题 基本方法&#xff0c;必须掌握&#xff01;&#xff01;&#xff01; class Solution {public int maxEnvelopes(int[][] envelopes) {int n envelopes.length;if (n < 2) {return n;}Arrays.sort(envelopes, (a1, a2) ->…

php文件实战分析

1.php文件分析如下 这段代码是一个简单的 PHP 文件上传处理脚本。让我来为你进行分析&#xff1a; 首先&#xff0c;通过检查 $_FILES["file"]["error"] 的值来确定是否发生了错误。如果 $_FILES["file"]["error"] 大于 0&#xff0c…

CSS样式学习

html超文本传输标签&#xff0c;属性等权重 outline 标签轮廓 <input type"text"> <textarea cols"30" rows"10"></textarea> outline: none; 表示无轮廓 &#xff08;开发时用的比较多&#xff09; CSS 轮廓&#xff…

数据结构入门到入土——栈(Stack)和队列(Queue)

目录 一&#xff0c;栈&#xff08;Stack&#xff09; 1.1 概念 1.2 栈的使用 1.3 栈的模拟实现 1.4 栈的应用场景 1.5 栈&#xff0c;虚拟机栈&#xff0c;栈帧有什么区别&#xff1f; 二&#xff0c;队列&#xff08;Queue&#xff09; 2.1 概念 2.2 队列的使用 2.3 …

H3C在交换机上查找一个IP

一、案例背景&#xff1a; 一台wifi&#xff0c;在防火墙上有此IP的安全告警&#xff0c;需要查找到这个端口&#xff0c;并改到其他的隔离网段上网 二、排查过程&#xff1a; 自上向下查&#xff1a;在汇聚交换机上ping了一下&#xff0c;通的&#xff0c;然后查了下mac&…

前端js调用Lodop实现云打印

一、下载Lodop控件 官网&#xff1a;下载中心 - Lodop和C-Lodop官网主站 二、解压后安装 双击进行安装&#xff0c;里面有些页面文件是一些教程案例 勾选云服务工作模式 安装成功会自动启动 浏览器访问地址&#xff1a;http://localhost:8000/ 首页最下面有个教程案例跳转地址&…

DNS 域名解析

一 、名字解析介绍和DNS 当前TCP/IP网络中的设备之间进行通信&#xff0c;是利用和依赖于IP地址实现的。但数字形式的IP地址是很难记忆的。当网络设备众多&#xff0c;想要记住每个设备的IP地址&#xff0c;可以说是"不可能完成的任务"。那么如何解决这一难题呢&…

独孤思维:​凌驾于所有赚钱项目的副业

01 混群&#xff0c;尤其是混付费群。 在群里不要爆fen&#xff0c;不要广告。 真诚分享你的副业心得&#xff0c;经验&#xff0c; 自然能吸引到别人&#xff0c;主动加你。 这样&#xff0c;你就多了一个精准获客的方法。 02 不要在乎眼前的成绩。 没有意义。 独孤写…

蓝桥杯单片机进阶教程4——需要分配进程的模块

前言&#xff1a; 【蓝桥杯单片机保姆级教学】 https://www.bilibili.com/video/BV1h3411m7Aw/?p117&share_sourcecopy_web&vd_sourcec4fc67867c5218768e783d04475bc5a2 P117-118 比赛的时候也按照这个顺序来写 一、数码管显示 分析考题 &#xff08;1&#xff09;…

Go语言的内存分配器

1. 内存分配器的历史 Go语言的第一个内存分配器是简单的伙伴分配器。伙伴分配器是一种经典的内存分配器&#xff0c;它将堆内存划分为多个大小相同的块&#xff0c;并使用一种递归的算法来分配和释放内存块。伙伴分配器简单高效&#xff0c;但它存在一个问题&#xff1a;当分配…

javascript_forEach中使用异步函数执行顺序问题,错误原因+解决思路

javascript_forEach中使用异步函数执行顺序问题&#xff0c;错误原因解决思路 start 最近在写异步逻辑的时候&#xff0c;经常会使用 async/await。有些时候需要执行异步逻辑的函数比较多&#xff0c;就习惯用 forEachasync/await 去处理函数了。在测试的过程中会发现&#x…

Unity之角色控制器

PS:公司终于给我派任务了&#xff0c;最近几天都没学Unity&#x1f927;。 一、角色控制器的实现方式 目前小编知道的角色控制器实现方式有三种&#xff1a; 应用商店的角色控制系统Unity自己的角色控制器通过物理系统去做角色控制器 本篇介绍的是第二种Unity自己的角色控制…

数字化时代,VR全景展示如何让用户一窥全貌?

数字化时代&#xff0c;VR全景展示为各行各业提供了无限的可能性。随着VR全景技术的逐步普及&#xff0c;VR全景展示以其独特的呈现方式和新颖十足的交互体验&#xff0c;正在不断改变着人们对于展示宣传的理解。 传统的展示方式&#xff0c;通常需要将产品、图文、品牌等元素集…

滴水内存地址堆栈

两个十六进制数 刚好是一个字节刚好 DC这的一个字节数据为E4 一个内存地址 后面表示四个字节的数据 所以有八个十六进制的数 BASE是高地址 所以放入一个四字节后就 -4

RK3568驱动指南|第十二篇 GPIO子系统-第136章 实战:实现动态切换引脚复用功能

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

sectigo ip证书种类买一年送一月

Sectigo旗下的IP证书是专为只有公网IP地址的网站准备的。Sectigo旗下的数字证书大多是域名证书&#xff0c;例如&#xff0c;单域名SSL证书、多域名SSL证书、通配符SSL证书等。这些证书申请时必须验证域名所有权&#xff0c;申请者需要有一个拥有管理全的域名网站&#xff0c;那…

有了 Prisma,就别用 TypeORM 了

要说2024 年 Node.js 的 ORM 框架应该选择哪个&#xff1f;毫无疑问选 Prisma。至于为何&#xff0c;请听我细细道来。 <!-- truncate --> 本文面向的对象是饱受 TypeORM 折磨的资深用户(说的便是我自己)。只对这两个 ORM 框架从开发体验上进行对比&#xff0c;你也可以…

SRM供应商招标采购管理系统(源码)

软件相关资料获取&#xff1a;点我获取 一、SRM供应商在线采购 SRM供应商在线采购是指企业通过互联网平台&#xff0c;实现对供应商的在线招募、选择、关系管理等一系列活动。这种采购方式具有高效、透明、便于管理的特点&#xff0c;能够帮助企业降低采购成本&#xff0c;提…

陶瓷碗口缺口检测-图像形态学

图像形态学 对得到的灰度图像&#xff0c;需要进行二值化处理和区域填充。二值化涉及两个步骤&#xff0c;第一&#xff0c;对图像行图像分割&#xff0c;将图像分割成目标和和背景&#xff1b;第二&#xff0c;对分割后图像进行区域填充。本例中的背景为黑色&#xff0c;可以…