JS逆向入门案例-360某某某心(滑块、语序文字验证)-09

文章目录

    • 概要
    • 整体架构流程
    • 小结

概要

提示:仅供学习,不得用做商业交易,如有侵权请及时联系

逆向:360某某某心(滑块、语序文字验证)

URL:aHR0cHM6Ly9pLjM2MC5jbi9sb2dpbi8=

目的:滑块、语序文字验证

整体架构流程

提示:获取token---获取背景图片----验证

、config接口获取token,url:aHR0cHM6Ly9jYXB0Y2hhLmJwZC4zNjAuY24vdjEvZ2V0Y29uZmln

	url = "https://xxx/getconfig"
    params = {
        "appid": "xxx"
    }
    config = requests.get(url, headers=headers, params=params).json()

    token = config["data"]['token']
    logger.info(f"获取token: {token}")
    return token

在这里插入图片描述

、get接口,获取背景图片以及ftoken,url:aHR0cHM6Ly9jYXB0Y2hhLmJwZC4zNjAuY24vdjEvZ2V0

	url = "https://xxx/get"
    params = {
        "appid": "xxx",
        "token": token,
        "ty": "1"
    }
    captcha = requests.get(url, headers=headers, params=params).json()

在这里插入图片描述
三、verify接口,验证接口,url:aHR0cHM6Ly9jYXB0Y2hhLmJwZC4zNjAuY24vdjEvdmVyaWZ5,先看加密参数:
在这里插入图片描述

经过观察,只有这个d参数是加密的,我们可以通过启动器断点去分析参数是怎么生成的:这里我们先分析***滑块的d***是什么生成

在这里插入图片描述

那么怎么获取滑块滑动距离呢直接用cv2:

	import numpy as np,cv2
	# 获取滑块距离
	def identify_gap(bg, tp):
	    """
	    bg: 背景图片
	    tp: 缺口图片
	    out: 输出图片
	    """
	    # 读取背景图片和缺口图片
	    bg_img = cv2.imdecode(np.frombuffer(bg, np.uint8), cv2.IMREAD_GRAYSCALE)
	    tp_img = cv2.imdecode(np.frombuffer(tp, np.uint8), cv2.IMREAD_GRAYSCALE)  # 缺口图片
	    yy = []
	    xx = []
	    for y in range(tp_img.shape[0]):
	        for x in range(tp_img.shape[1]):
	            r = tp_img[y, x]
	            if r < 200:
	                yy.append(y)
	                xx.append(x)
	    tp_img = tp_img[min(yy):max(yy), min(xx):max(xx)]
	    # 识别图片边缘
	    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)  # 寻找最优匹配
	    # # 绘制方框
	    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('distinguish.jpg', bg_img)  # 保存在本地
	    # 返回缺口的X坐标
	    return max_loc[0]

下面分析一下轨迹生成,通过浏览器的一组完整的轨迹,然后使用识别出来的距离做相似距离处理(自己去断点拿到trackList):

	# 获取滑块轨迹
	def guiji(distance):
		trackList = [
		    {
		        "x": 1,
		        "y": 23.5067,
		        "my": 184.29998779296875,
		        "mx": 25.5999755859375,
		        "t": 1731651034502,
		        "type": "mousedown"
		    },...............]
		# 检查value是否在轨迹的x值中
	    for trajectory in trackList:
	        if trajectory['x'] == distance:
	            # 如果找到,截取从轨迹开始到该点的子数组
	            result = [t for t in trackList if t['x'] <= distance]
	            result[-1]['type'] = "mouseup"
	            return result
	
	    # 如果value不在x值中,找到最接近value的x值
	    closest_x = None
	    min_diff = float('inf')
	    for trajectory in trackList:
	        if abs(trajectory['x'] - distance) < min_diff:
	            min_diff = abs(trajectory['x'] - distance)
	            closest_x = trajectory['x']
	
	    # 截取从轨迹开始到最接近的x值的子数组
	    result = [t for t in trackList if t['x'] <= closest_x]
	    result[-1]['x'] = distance
	    result[-1]['type'] = "mouseup"
	    return result

继续我们看下一***文字点选的d***怎么生成的:

在这里插入图片描述
至于语序文字的坐标识别我们可以使用:ddddocr/模型训练/打码平台

四、最后我们看效果

在这里插入图片描述

小结

提示:学习交流群:v:wzwzwz0613

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值