【验证码的识别与逆向】数美点选逆向分析-附坐标识别(思路 + 代码)


前言

数美点选和数美滑块加密逻辑相同,详细分析过程可见文章【验证码的识别与逆向】数美滑块全流程分析-附代码 本文主要分析其中变动参数的明文。


一、目标网址

atob(‘aHR0cHM6Ly93d3cuaXNodW1laS5jb20vdHJpYWwvY2FwdGNoYS5odG1s’)

二、逆向分析

通过对数美滑块的分析,我们知道数美验证有register获取验证码和fverify提交验证两个接口,这里直接来看fverify接口。

在这里插入图片描述

这个接口中我们可以很明显的看到两个特别长的加密参数,分别为aogm,这也是我们需要重点关注的两个参数,我们随便选择一个打开F12搜索,'ao'或者'gm'

在这里插入图片描述

在这里插入图片描述

可以看到ao搜索结果只有一行,gm搜索结果有三行,这四行我们随便点击一行进入JS代码。

在这里插入图片描述

跳转到JS代码之后,又可以看到我们熟悉的三个大case块。与滑块不同的是,点选走的是第一个case,我们在ao这一行打下断点,然后手动过点选验证,使断点断下。

在这里插入图片描述

和滑块相同,这里this[_0x551ddd(0x511)]是加密函数,也就是DES ECB模式,这个函数传入了两个参数,第一个是明文,第二个是密钥,我们在控制台输出一下这两个重点参数的明文和密钥。根据输出我们可以看出

  • ao 明文为 归一化之后的坐标 密钥为 1e28f551
  • gm 明文为 归一化之后的坐标 密钥为 995190d6

归一化就是将坐标缩放到0-1这个区间,我们获取到的背景图为600 * 300,所以归一化的坐标为[x / 600, y / 300, t]

其他参数如果感兴趣也可以用同样的方式在控制台输出明文和密钥,由于数美点选的其他参数明文是固定的,加密结果直接抓包写死就行,这里就不再演示了。

三、坐标识别思路

对于点选类验证码的识别,目前有两种解决方法:

  • 目标检测 + 分类网络
  • 目标检测 + 孪生网络

目标检测现在流行的是YOLO系列,GitHub-YOLOv5,用于识别图中文字的位置,使用起来十分简单,可以根据网上的教程进行标注训练。

分类网络则是我们常说的CNN网络,将切割好的汉字图片标注之后进行训练,需要大量样本。

孪生网络是将两张图片通过同一个CNN网络,计算出两个输出之间的距离,也就是我们所说的相似度,根据相似度来区分两张图片是否相同。相对于分类网络来说,需要的样本大量减少。

四、坐标识别代码

这里给出使用ddddocr实现文字坐标识别的代码供大家参考。

from io import BytesIO
import ddddocr
from PIL import Image

# 实例化目标检测模型
detection = ddddocr.DdddOcr(show_ad=False, det=True)
# 实例化分类模型
classification = ddddocr.DdddOcr(show_ad=False)


def get_text_pos(image: bytes, order: list) -> list:
    """
    :param image: 图片
    :param order: ["享", "庖", "隶", "中"]
    """

    # 目标检测 获取文字位置
    pos_list = detection.detection(image)
    # 将图片用PIL(Pillow)打开
    ori_image = Image.open(BytesIO(image))
    # 初始化数组
    ans = [[]] * 4
    for pos in pos_list:
        # 切割图片
        crop = ori_image.crop(pos)
        # 分类网络识别文字
        word = classification.classification(crop)
        # 查找识别结果在 order (目标文字)中的下标
        index = order.index(word) if word in order else -1
        if index != -1:
            # 找到下标之后将切割图片的中心点加入到ans中
            ans[index] = [int((pos[0] + pos[2]) / 2), int((pos[1] + pos[3]) / 2)]
    return ans

五、结果演示

在这里插入图片描述

需要坐标识别模型的可以私聊作者~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值