小红书数美滑块验证码JS逆向破解

2023年 9月 26日14:15:26 发表评论

数美滑块

最近看了看数美滑块,网上很多大佬都写过了,有很多心得,同时也发现了一些问题。那么我们就从头来搞一遍数美滑块,也算是结合众大佬的一个产出吧。

网址:https://www.ishumei.com/trial/captcha.html

1、首先进入网站抓包

小红书数美滑块验证码JS逆向破解

请求register注册信息,我们能从中获取到滑块图片信息,计算出滑动距离

2、验证信息

小红书数美滑块验证码JS逆向破解

滑动滑块,查看包信息,可以看到会有一个fverify的验证信息,如果正确的话riskLevel返回值为PASS,失败为REJECT

小红书数美滑块验证码JS逆向破解

查看一些加密参数信息,参数很多,主要难点应该就是扣这个加密了

3、加密参数分析

小红书数美滑块验证码JS逆向破解

进入堆栈打上断点,再次滑动滑块,网站断住,很好,向上查找堆栈,倒数第二个堆栈上打上断点,因为此处看到了参数中的"aw"等参数,断开之前的断点,重新滑动

小红书数美滑块验证码JS逆向破解

小红书数美滑块验证码JS逆向破解

此时已经断住了,在此处进行参数赋值,重新打上断点,分析加密

小红书数美滑块验证码JS逆向破解

小红书数美滑块验证码JS逆向破解

进入函数后在函数return结尾打上断点,运行,可以看到DES字样,初步判定为DES加密

小红书数美滑块验证码JS逆向破解

小红书数美滑块验证码JS逆向破解

网上找了一段DES加密的实现验证一下

import base64 import random import time from pyDes import des, ECB def pad(b): """ 块填充 """ block_size = 8 while len(b) % block_size: b += b'\0' return b def get_encrypt_content(message, key, flag): """ 接口参数的加密、解密 """ des_obj = des(key.encode(), mode=ECB) if flag: content = pad(str(message).replace(' ', '').encode()) return base64.b64encode(des_obj.encrypt(content)).decode('utf-8') else: return des_obj.decrypt(base64.b64decode(message)).decode('utf-8') 

小红书数美滑块验证码JS逆向破解

小红书数美滑块验证码JS逆向破解

与网站加密结果一致,判定为DES加密,分析几次滑动参数发现,有很多固定值。变化的值只有nm、dy、rid(从注册函数获取)、dl

分析他们得来源,再次回到第一个断点,发现来源

小红书数美滑块验证码JS逆向破解

对来源进行分析,可以找到参数赋值函数

小红书数美滑块验证码JS逆向破解

进入函数在return打上断点,重新滑动

小红书数美滑块验证码JS逆向破解

此处就是slide对应得加密参数,分析下nm、dy、dl参数

小红书数美滑块验证码JS逆向破解

dl: 滑动距离
nm: 滑动轨迹 数组信息分别为x,y,t的值
dy: 滑动时间,可通过滑动轨迹的t获取

那么最后的问题就是两点:
1、获取滑动距离
2、生成滑动轨迹

1、滑动距离获取(给出对应的url就行)

def get_distance(fg, bg): """ 计算滑动距离 """ r = requests.get(fg_url, verify=False) fg = BytesIO(r.content) r = requests.get(bg_url, verify=False) bg = BytesIO(r.content) target = cv2.imdecode(np.asarray(bytearray(fg.read()), dtype=np.uint8), 0) template = cv2.imdecode(np.asarray(bytearray(bg.read()), dtype=np.uint8), 0) result = cv2.matchTemplate(target, template, cv2.TM_CCORR_NORMED) _, distance = np.unravel_index(result.argmax(), result.shape) return distance 

2、滑动轨迹生成(建议自己去百度)

def get_random(distance): ''' # 滑动轨迹模拟、上下的抖动 :param distance: :return: ''' ge = [] ge.append([0, 0, 0]) for i in range(10): x = 0 y = random.randint(-1, 1) t = 100 * (i + 1) + random.randint(0, 2) ge.append([x, y, t]) for items in ge[1:-5]: items[0] = distance // 2 for items in ge[-5:-1]: items[0] = distance + random.randint(1, 4) ge[-1][0] = distance return "{}".format(ge).replace(" ", ""), ge[-1][2] 

此后所需要的就是使用DES加密了。

4、结果展示

小红书数美滑块验证码JS逆向破解

成功率81%,滑动轨迹还是得优化,以上DES也能使用扣代码来还原,那样相对难一点,有需要可以交流。

  • 版权声明:内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 1936370309@qq.com 举报,一经查实,本站将立刻删除。
  • 转载请注明:小红书数美滑块验证码JS逆向破解 紫林博客

发表评论

您必须才能发表评论!