某某盾-滑块验证-自动获取validate值-(逆向js+python)

news2024/11/26 2:43:56

我是标题

  • 1.从get?网站获取滑块图片以及token
    • 1.1获取fp值
    • 1.2 获取cb值
    • 1.3 模拟发包
  • 2.获取滑块移动距离
  • 3.发包获取最终的validate值
    • 3.1轨迹生成
    • 3.2 check网站发包
    • 3.3 获取data值
  • 4.结论

在这里插入图片描述
本实验是根据某某盾示例网站
主要分为两个部分
1.从get?网站获取滑块图片以及token
2.根据获取的图片获取滑块移动距离
3.根据移动距离和token发包到check?网站得到validate值

1.从get?网站获取滑块图片以及token

模拟网站发包,需要获取fp值和cb值
yyyyyy

1.1获取fp值

网站的js做了混淆,看起来很乱,但是不影响逆向寻找,js代码,具体扣代码的方法就不再介绍了。
可以直接搜索图上关键字可以在网站上找到js具体的位置。
在这里插入图片描述
需要注意的是混淆的数组,需要加上下面两个函数,将数组的顺序改为正确的顺序。
还需要注意fp是和网站的域名相关,就是验证应用在的网站域名,设为输入变量hrefff。
在这里插入图片描述
传入变量所在位置
在这里插入图片描述

1.2 获取cb值

同样获取cb的js代码也做了混淆,需要加入下面两个函数,注意是两个函数。第二个函数要传入参数。
在这里插入图片描述
cb原代码在webpack里面,需要加载器。
第一个框为加载器,可以用模板,也可以从源网站拷贝执行器。
第二个框为所需要方法,字典寻找方式。原代码是用十六进制数组方式寻找。具体可以从源代码的加载器寻找0x**,找到具体方法。
第三个框为获取cb执行代码。
在这里插入图片描述

1.3 模拟发包

本文中所有用的头文件

import cv2
import numpy as np 
import requests
import execjs
import json
import re
import os
import random
import time

用python模拟发包

    get_web = 'https://xxxxx/api/v3/get'
    payload ={
        "referer":"https://xxxxx/trial/jigsaw",
        "zoneId":"CN31",
        "dt":"yyyyyy",
        "acToken":"undefined",
        "id":"yyyyyy",
        "fp":Get_fp(),
        "cb":Get_cb(),
        "https":"true",
        "type":2,
        "version":"2.25.0",
        "dpr":"1.25",
        "dev":1,
        "ipv6":"false",
        "runEnv":10,
        "group":"",
        "scene":"","lang":"zh-CN","sdkVersion":"undefined","iv":3,
        "width":320,"audio":"false","sizeType":10,"smsVersion":"v3",
        "token":"",
        "callback":"__JSONP_4ti1bll_29"}
	headers = {
	    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
	}
    res = requests.get(get_web, params=payload,headers=headers)
    print(res.text)
    
    res_str = re.search("\((.*?)\);",res.text)#匹配
    res_json = json.loads(res_str.groups()[0])

    if (res_json['msg'] == 'ok'):
        bg_image    = res_json['data']['bg']
        ft_image    = res_json['data']['front']
        token       = res_json['data']['token']
        save_image(bg_image,'bg_image.png')
        save_image(ft_image,'ft_image.png')

执行js文件

def js_from_file(file_name):
    """
    读取js文件
    :return:
    """
    with open(file_name, 'r', encoding='UTF-8') as file:
        result = file.read()

    string = "\
    /*解决浏览器环境问题*/\
    const  { JSDOM }= require('jsdom');\
    const dom = new JSDOM('<!DOCTYPE html><p>Hello world</p>');\
    const window = dom.window;\
    const document = window.document;\
    XMLHttpRequest = window.XMLHttpRequest;\
    "

    return (string + result)
def Get_fp():
    # 编译加载js字符串
    context1 = execjs.compile(js_from_file('..\\fp.js'),cwd=r'C:\Users\xxx\AppData\Roaming\npm\node_modules')   #使用 execjs 类的compile()方法编译加载上面的 JS 字符串,返回一个上下文对象
    fp = context1.call('fp','dun.163.com')
    #print(fp)
    return fp

def Get_cb():
    # 编译加载js字符串
    context1 = execjs.compile(js_from_file('..\\cb.js'),cwd=r'C:\Users\xxx\AppData\Roaming\npm\node_modules')   #使用 execjs 类的compile()方法编译加载上面的 JS 字符串,返回一个上下文对象
    cb = context1.eval("getcb()")
    #print(cb)
    return cb

在这里插入图片描述

在这里插入图片描述

2.获取滑块移动距离

具体不再解释,主要是通过灰度图的边缘化后图片做匹配,直接可以返回两者相差的距离。注意距离是x方向和y方向都有,返回只取了x方向的值。

#获取滑块在背景上位置
def slider_location(slider_img,bg_image):
    """
        TM_SQDIFF 平方差匹配法    该方法采用平方差来进行匹配;最好的匹配值为0;匹配越差,匹配值越大
        TM_CCORR 相关匹配法  该方法采用乘法操作;数值越大表明匹配程度越好。
        TM_CCOEFF 相关系数匹配法   1表示完美的匹配;-1表示最差的匹配。
        TM_SQDIFF_NORMED    归一化平方差匹配法      
        TM_CCORR_NORMED 归一化相关匹配法      
        TM_CCOEFF_NORMED    归一化相关系数匹配法
    """
    res = cv2.matchTemplate(bg_image,slider_img,cv2.TM_CCOEFF_NORMED)
    threshold = 0.9
    while (len(np.where(res >= threshold)[1])==0 and threshold!=0):
        threshold-=0.1
    if (threshold):
        return np.where(res >= threshold)[1]  #选取x坐标的第0个值
    else:
        return 0
#获取滑动距离 返回距离
def get_distance():

    slider_img =cv2.imread('.\\bg_image.png',0)   #0获取灰度值
    bg_image=cv2.imread('.\\ft_image.png',0)

    # 识别图片边缘
    bg_edge = cv2.Canny(bg_image, 100, 200)
    tp_edge = cv2.Canny(slider_img, 100, 200)

    cv2.imwrite('sd_image1.png',tp_edge)
    cv2.imwrite('bg_image1.png',bg_edge)

    return slider_location(tp_edge,bg_edge)[0]

在这里插入图片描述

3.发包获取最终的validate值

3.1轨迹生成

根据滑块移动距离和第一步返回的cookie值发包核对得到validate值。
根据滑块的移动距离需要构造轨迹坐标,我的轨迹坐标方法比较烂,就不贴出来了。是下图这种样子的。
在这里插入图片描述

3.2 check网站发包

如下ts_str 就是轨迹的json的转字符串形式
注意token一定要和get?返回的一样。

    get_web = 'https://xxxxx/api/v3/check'
    payload ={
        "referer":"https://xxxxx/trial/jigsaw",
        "zoneId":"CN31",
        "dt":"yyyyyy",
        "id":"yyyyyyyyyyy",
        "acToken":"undefined",
        "token":token,
        "data":Get_data(token,ts_str),
        "width":320,
        "type":2,
        "version":"2.25.0",
        "cb":Get_cb(),
        'extraData':"",
        'bf':0,
        "runEnv":10,
        "sdkVersion":"undefined",
        "iv":3,
        "callback":"__JSONP_mbi1bll_30"}  #随机生成callback
        

    res = requests.get(get_web, params=payload,headers=headers)
    if len(res.text)> 150:
        print(res.text)
        return 1
    #print(token)
    return 0

在这里插入图片描述

3.3 获取data值

data为字典的转字符串的形式,内包含很多加密变量。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.结论

现在的成功率不高,应该是滑块轨迹做的不好,很容易被发现,以后可以再具体研究。
做了20次实验,
6次超过20次以外
14次平均成功次数为小于5次
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

TypeScript 第一站概念篇

前言 &#x1f52e; 好长一段时间没有写文章了&#xff0c;原因是经历了一次工作变动&#xff0c;加入了一个有一定规模的开发团队&#xff0c;前端算上我有四个人&#xff0c;很欣慰&#xff0c;体验一下团队配合的感觉&#xff0c;在我之上有一个组长&#xff0c;比我年长四…

Portraiture4.0介绍与插件安装包下载

相信有很多需要经常进行图像处理的小伙伴的电脑上都有一款PS软件吧&#xff0c;PS的功能非常强大&#xff0c;各种细节处理都非常细致&#xff0c;但还是需要一些插件来帮我们快速处理图片&#xff0c;能够省去很多时间和精力。今天给大家介绍一款PS磨皮插件&#xff0c;能够快…

【Linux】进程等待

文章目录 进程等待进程等待必要性实验(见见猪跑)进程等待的方法wait方法waitpid**方法**宏的使用方法获取子进程status 阻塞VS非阻塞概念对比非阻塞有什么好处 具体代码实现进程的阻塞等待方式:进程的非阻塞等待方式:让父进程做其他任务 进程等待 进程等待必要性 之前讲过&am…

2023腾讯云双11优惠3年轻量2核2G4M服务器366.6元,三年价哦!

腾讯云3年轻量应用服务器配置为2核2G4M带宽、50GB SSD系统盘双11优惠价格366.6元三年、108元一年&#xff0c;只是限制月流量&#xff0c;套餐自带300GB月流量。腾讯云百科txybk.com分享2023腾讯云双11优惠活动3年轻量2核2G4M带宽优惠价格、购买条件&#xff1a; 3年轻量2核2G…

大模型的“成本瘦身”运动

数据大、参数量大、算力大&#xff0c;大模型的某些能力才会“涌现”&#xff0c;这一点在科技圈广为流传。 做大模型的主流思想是&#xff1a;不要轻易说模型“不行”&#xff0c;如果“它还没行”&#xff0c;那就做得更大一点。 所以&#xff0c;不到一年的时间&#xff0c;…

MySQL InnoDB数据存储结构

1. 数据库的存储结构&#xff1a;页 索引结构给我们提供了高效的索引方式&#xff0c;不过索引信息以及数据记录都是保存在文件上的&#xff0c;确切说是存储在页结构中。另一方面&#xff0c;索引是在存储引擎中实现的&#xff0c;MySQL服务器上的存储引擎负责对表中数据的读…

Visual Studio使用Git忽略不想上传到远程仓库的文件

前言 作为一个.NET开发者而言&#xff0c;有着宇宙最强IDE&#xff1a;Visual Studio加持&#xff0c;让我们的开发效率得到了更好的提升。我们不需要担心环境变量的配置和其他代码管理工具&#xff0c;因为Visual Studio有着众多的拓展工具。废话不多说&#xff0c;直接进入正…

佳易王商超便利店等会员快速积分、积分兑换管理系统软件下载

佳易王商超便利店等会员快速积分、积分兑换管理系统软件下载 一、佳易王会员管理软件大众版 部分功能简介&#xff1a; 1、会员信息登记 &#xff1a;可以直接使用手机号登记&#xff0c;也可以使用实体卡片&#xff0c;推荐用手机号即可。 2、会员卡类型 &#xff1a;可以自…

6.Spark共享变量

概述 共享变量 共享变量的工作原理Broadcast VariableAccumulator 共享变量 共享变量的工作原理 通常&#xff0c;当给 Spark 操作的函数(如 mpa 或 reduce) 在 Spark 集群上执行时&#xff0c;函数中的变量单独的拷贝到各个节点上&#xff0c;函数执行时&#xff0c;使用…

074基于web+springboot的智能物流管理系统

欢迎大家关注&#xff0c;一起好好学习&#xff0c;天天向上 文章目录 一项目简介技术介绍 二、功能组成三、效果图四、 文章目录 一项目简介 本智能物流管理系统有管理员&#xff0c;顾客&#xff0c;员工&#xff0c;店主。功能有个人中心&#xff0c;顾客管理&#xff0c;员…

零基础Linux_25(多线程)信号量+基于环形队列的生产消费模型+自选锁+读写锁

目录 1. 信号量 1.1 信号量和信号量操作的概念 1.2 信号量的基本使用接口 2. 基于环形队列的生产者消费者模型 2.1 环形队列再分析 2.2 代码分步实现 sem.hpp ringQueue.hpp testMain.cc 2.3 代码解析和再理解 3. 自旋锁和读写锁 3.1 自旋锁的概念和接口 3.2 读写…

腾讯云3年轻量应用服务器涨价了?阿里云降价腾讯云涨?

2023双11云服务器优惠活动上线&#xff0c;腾讯云3年轻量应用服务器价格非常优惠&#xff0c;阿里云双11活动上是后上的&#xff0c;阿里云推出一款新老用户均可以购买的云服务器ECS经济型e实例&#xff0c;2核2G3M固定带宽&#xff0c;一年只要99元&#xff0c;第二年续费依旧…

0基础学编程从哪里入手?零基础学些代码怎么入手

0基础学编程从哪里入手&#xff1f;零基础学些代码怎么入手&#xff1f; 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的软件&#xff0c;向如图…

LangChain安装和入门案例

一、介绍 LangChain是一个用于开发由语言模型驱动的应用程序的框架 官网 https://www.langchain.com/ 中文官网 https://www.langchain.com.cn/ python langchain https://python.langchain.com.cn/docs/get_started/introduction https://python.langchain.com/docs/ge…

小程序使用echarts(超详细教程)

小程序使用echarts第一步就是先引用到小程序里面&#xff0c;可以直接从这里下载 文件很多&#xff0c;我们值下载 ec-canvas 就好&#xff0c;下载完成后&#xff0c;直接放在pages同级目录下 index.js 在我们需要的页面的 js 文件顶部引入 // pages/index/index.js impor…

项目管理之如何估算项目工作时间

在项目管理中&#xff0c;项目工作时间的估算是一个关键环节&#xff0c;它直接影响到项目的进度、预算和资源分配。本文将介绍几种常用的时间估算技术和时间估算的十步法&#xff0c;帮助你更好地估算项目工作时间。 常用时间估算技术 类比估算 参照以往同类同规模项目时间数…

01_stable_diffusion_introduction_CN

stable_diffusion 配置 !pip install -Uq diffusers ftfy accelerate# Installing transformers from source for now since we need the latest version for Depth2Img: !pip install -Uq githttps://github.com/huggingface/transformers import torch import requests fro…

项目实战:删除特定水果库存记录

1、在index.js中添加删除点击事件 1.1、common.js function $(key){if(key){if(key.startsWith("#")){key key.substring(1)return document.getElementById(key)}else{let nodeList document.getElementsByName(key)return Array.from(nodeList)}} } window.onloa…

c语言从入门到实战——VS2022实用调试技巧

VS实用调试技巧 前言1. 什么是bug2. 什么是调试&#xff08;debug&#xff09;3. Debug和Release4. VS调试快捷键4.1 环境准备4.2 调试快捷键 5. 监视和内存观察5.1 监视5.2 内存 6. 调试举例17. 调试举例28. 编程常见错误归类8.1 编译型错误8.2 链接型错误8.3 运行时错误 前言…

UI自动化测试:会消失的弹窗(Toast)如何定位?

前言 看到标题可能有的小伙伴们懵了&#xff0c;什么是Toast&#xff0c;其实Toast大家都见过&#xff0c;就是一般在我们页面中停留大概2~3秒的时间后自动消失的弹框&#xff0c;那么既然要做自动化&#xff0c;可能Toast也需要大家进行测试&#xff0c;那么小编今天就来介绍…