数美滑块验证码逆向分析

最近因为要采小红书的数据,接触到了数美滑块验证码,所以就有了这篇文章来记录下分析过程。

本文数美滑块以数美官网为例,滑块链接地址:https://www.ishumei.com/trial/captcha.html

数美滑块版本号:v1.0.3-153

数美滑块验证码逆向分析

一、请求分析

1.1 验证码申请

打开网站后通过抓包发现,第一步先是请求了https://captcha.fengkongcloud.cn/ca/v1/conf?lang=zh-cn&callback=sm_1649907313036&appId=default&model=slide&rversion=1.0.3&sdkver=1.1.3&organization=RlokQwRlVjUrTUlkIqOg&channel=DEFAULT这个链接,获取滑块的一些js、css信息等等。

数美滑块验证码逆向分析

其中请求中的organization参数是认证参数,每个网站认证参数都不一样,需要根据你采集的网站来。

返回的“/pr/auto-build/v1.0.3-153/captcha-sdk.min.js”文件是js加密文章,这个经常更新,每个版本加密参数都不一样,需要经常更新维护。

1.2 验证码注册

第二步是请求了一个注册链接,地址是https://captcha.fengkongcloud.cn/ca/v1/register?organization=RlokQwRlVjUrTUlkIqOg&channel=DEFAULT&lang=zh-cn&callback=sm_1649907316063&model=slide&sdkver=1.1.3&data=%7B%7D&rversion=1.0.3&appId=default

数美滑块验证码逆向分析

返回滑块的基本信息:

其中bg表示背景图片,fg表示缺口图片,rid类似于滑块session,后续请求要带上。

1.3 验证码验证

滑过滑块后,请求了一个验证接口:https://captcha.fengkongcloud.cn/ca/v2/fverify,返回通过与否,PASS表示通过。

这一步请求的参数比较多,每个版本且不一样,153版本有下面这些参数:

数美滑块验证码逆向分析

除个别参数外,大部份参数都经常了加密,我会在后面会对如何加密进行讲解。

二、JS逆向分析-参数加密

首先直接查看fverify接口的Initiator,如下

数美滑块验证码逆向分析

通过分析,我们直接追到这个位置,打断点看下

数美滑块验证码逆向分析

可以看到,到这里的时候,已经生成了所有的加密参数,_0x534dc2对象就是加密结果。

其中eo、jj、oh参数都经过了this[_0x163e17(0x4c9)]这个函数加密。我们直接看下这个函数,在return的地方打个断点看下。

数美滑块验证码逆向分析

可以看到,这个地方_0x452523(0x32e)是DES,我们大胆猜测下,这可能就是一个DES加密,两个入参分别是加密字段和key。

我直接从网上找了一个DES加密代码测试了下。

import base64
from pyDes import des, ECB


def pad(b):
    """
    块填充
    """
    block_size = 8
    while len(b) % block_size:
        b += b'�'
    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')
数美滑块验证码逆向分析
数美滑块验证码逆向分析

最终发现两边加密结果是一致的,这就是一个DES加密。

到这里,eo、jj、oh这三个参数就解决了,加密字段分别对应“default”、“DEFAULT”、“zh-cn”,加密的key每个版本不同,自己扣下就好。

还剩几个参数,我们继续往上找

数美滑块验证码逆向分析

剩下的几个加密参数都是在这生成的。

其中几个加密字段解释如下:

lq:滑动距离/300

ro:滑动轨迹

ed:滑动结束时间戳-滑块开始时间戳

px:300,背景图显示宽度

rm:150,背景图显示高度

lw:-1

iu:0

gh:1

ps:

这里有一点要注意下,获取的到背景图大小一般为600*300,实际显示图片大小为300*150,计算滑动距离的时候需要缩放下。

三、部分代码

3.1 图像缺口识别

import cv2
import numpy as np


def get_distance(fg, bg):
    """
    计算滑动距离
    """
    target = cv2.imdecode(np.fromstring(fg, np.uint8), cv2.IMREAD_COLOR)
    template = cv2.imdecode(np.fromstring(bg, np.uint8), cv2.IMREAD_COLOR)
    result = cv2.matchTemplate(target, template, cv2.TM_CCORR_NORMED)
    _, distance = np.unravel_index(result.argmax(), result.shape)
    return distance

3.2 轨迹生成

import random


def get_trajectory_1(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 ge, ge[-1][2]

四、最终效果

数美滑块验证码逆向分析

 

发布者:糖太宗,转载请注明出处:https://www.qztxs.com/archives/science/technology/5600

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年5月7日 下午4:13
下一篇 2022年5月7日 下午4:34

相关推荐

  • MYSQL常用函数

    普通函数 数学函数  SELECT ABS(-8); /*绝对值*/  SELECT CEILING(9.4); /*向上取整*/  SELECT FLOOR(9.4); /*向下取整*/  SELECT RAND(); /*随机数,返回一个0-1之间的随机数*/  SELECT SIGN(0); /*符号函数: 负数返回-1,正数返回1,0返回0*/ 字符...

    技术 2022年6月16日
    2200
  • 百度开源OpenRASP - IAST使用

    0x00 前言 相对于awvs和netsparker的IAST,百度iast为主动型插桩技术,无需人工配置任务及代理等,由agent采集请求及hook点信息,自动选择扫描漏洞类型,极大的增加覆盖率和效率,减少脏数据产生 主动型扫描,不适用于参数加密、编码、防重放等场景 管理后台部署参考 OpenRASP 部署   0x01 开启灰盒扫描 参考 安装...

    技术 2022年6月13日
    14800
  • 如何规划程序员技术生涯

    阅读本文大概需要5分钟。 昨天在知乎上看到一个程序员发展的好问题:   死月是前端领域一个比较知名的IP,之前在大搜车带领整个node团队,出过书写过技术专栏,在业内享有比较高的知名度。 认识死月的同学都对他评价非常高,甚至在这个帖子下面一个阿里P8都站出来认为阿里P6级别是委屈了死月同学: 之所以说这是个好问题,因为它太有共性了。不光是死月同学,我身边带过...

    2022年5月19日
    3500
  • 某手滑块验证码JS逆向

    有很多小伙伴在采集快手数据的时候,经常会碰到跳滑块验证码。 验证码链接格式如下:https://captcha.zt.kuaishou.com/mobile/app/index.html?captchaSession=Cgp6dC5jYXB0Y2hhEuoBcz4Gw2gwHfF…… 打开后如下是一个拼图验证码。 一、JS逆向分析 打开滑块页面,可以看到生成...

    2022年5月7日
    10600
  • 一次搞透,面试中的TopK问题!

    前言:本文将介绍随机选择,分治法,减治法的思想,以及TopK问题优化的来龙去脉,原理与细节,保证有收获。   面试中,TopK,是问得比较多的几个问题之一,到底有几种方法,这些方案里蕴含的优化思路究竟是怎么样的,今天和大家聊一聊。 画外音:除非校招,我在面试过程中从不问TopK这个问题。   问题描述: 从arr[1, n]这n个数中,找出最大的k个数,这就...

    2022年5月11日
    1100

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信