JS逆向入门案例-某组织服务平台(滑块验证)-08

文章目录

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

概要

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

逆向:某组织服务平台(滑块验证)

URL:aHR0cHM6Ly94eGdzLmNoaW5hbnBvLm1jYS5nb3YuY24vZ3N4dC9uZXdMaXN0

目的:滑块验证

在这里插入图片描述

点击搜索,触发滑块验证

整体架构流程

提示:分析-调试-猜想-实现-执行

一、获取滑块图片信息:

在这里插入图片描述
由于图片是base64形式,所以我们需要通过base64将图片转换:

	bgImgBs64 = base64.urlsafe_b64decode(bgImgBs64)
    slImgBs64 = base64.urlsafe_b64decode(slImgBs64)

关于识别滑块滑动的距离,直接上代码:

	import requests,cv2
	import numpy as np
	
	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坐标
	    print(f'value: {tl[0]}')
	    return max_loc[0]

a,b参数提取出来,后面需要用到

二、逆向加密参数

在这里插入图片描述

通过启动器断点,然后往上跟栈,找到加密参数:
在这里插入图片描述

这里a的值是通过滑块滑动距离进行的rsa加密

	from Crypto.PublicKey import RSA
	from Crypto.Cipher import PKCS1_v1_5
	import base64
	def RsaEncrypt(plaintext):
	    key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCCsYUGHMhjSzdMqn9JzPfKs9JbxXTPtHofTv7reV0HrEz4brnE6ZJpNn5s934KO3L4QDF7ELHysIiounhhpF1bewW9jKdcpZA5M1CkGHKcwpLA2liaqOlt/0Mf3ui9jxR9AHxUMFVGfJ6Q4+cEmDBUAEOXlxqk4ZjGpubwGNk9XQIDAQAB"
	    key_bytes = base64.b64decode(key)
	    public_key = RSA.importKey(key_bytes)
	    cipher = PKCS1_v1_5.new(public_key)
	    bits_len = int(public_key.size_in_bits() / 1024 * 100)
	    ciphertext = b""
	    for i in range(0, len(plaintext), bits_len):
	        ciphertext += cipher.encrypt(plaintext[i: i + bits_len].encode())
	    result = base64.b64encode(ciphertext).decode('utf-8')
	    return result

this.encodedata加密我们直接跳进去看看发现就是一段自写的js

在这里插入图片描述

	# a,b,c参数加密
	def encodedata(str):
	    js = '''
	        var h = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	        function encodedata(t) {
	            var a, i, e, s, n, l = "", c = "", o = "", r = 0;
	            do {
	                e = (a = t.charCodeAt(r++)) >> 2,
	                s = (3 & a) << 4 | (i = t.charCodeAt(r++)) >> 4,
	                n = (15 & i) << 2 | (c = t.charCodeAt(r++)) >> 6,
	                o = 63 & c,
	                isNaN(i) ? n = o = 64 : isNaN(c) && (o = 64),
	                l = l + h.charAt(e) + h.charAt(s) + h.charAt(n) + h.charAt(o),
	                a = i = c = "",
	                e = s = n = o = ""
	            } while (r < t.length);
	            return l
	        }
	    '''
	    result = execjs.compile(js).call('encodedata',str)
	    return result

三、验证滑块

最后赋上结果图:
在这里插入图片描述

小结

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

根据提供的引用内容,美团滑块验证js逆向过程如下所示: 1. 首先,需要获取主页接口的参数,包括csrf、uuid、token_id和continues等。这些参数可以在第一个链接返回的源码中找到。 2. 接下来,使用这些参数进行登入接口的请求,其中包括两个加密参数password和h5Fingerprint。 3. 然后,通过验证码获取的接口来获取验证码相关的参数,如verifyMethodVersion、slider、yodaVersion、timestamp、sign、ses和requestCode等。 4. 在获取到这些参数后,可以进行验证接口的请求。该请求需要使用到加密参数behavior和_token,以及动态参数v_c和3eac9809,同时还需要在请求头中添加Authencation。 总结起来,美团滑块验证逆向过程可分为以下步骤: 1. 获取主页参数 2. 逆向pwd和h5Fingerprint 3. 请求page_data链接 4. 逆向Authencation、behavior和_token 5. 发起最终的验证请求 需要注意的是,以上仅是根据提供的引用内容进行的分析,具体的逆向过程可能还需要进一步的研究和分析。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【2023-03-10】JS逆向之美团滑块](https://blog.csdn.net/qq_26079939/article/details/129442967)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [美团滑块(1-18,js逆向)](https://blog.csdn.net/weixin_44772112/article/details/128721509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值