极验滑块验证码破解与研究(四):滑块轨迹构造

声明

原创文章,请勿转载!

本文内容仅限于安全研究,不公开具体源码。维护网络安全,人人有责。

本文关联文章超链接:

  1. 极验滑块验证码破解与研究(一):AST还原混淆JS
  2. 极验滑块验证码破解与研究(二):缺口图片还原
  3. 极验滑块验证码破解与研究(三):滑块缺口识别
  4. 极验滑块验证码破解与研究(四):滑块轨迹构造
  5. 极验滑块验证码破解与研究(五):请求分析及加密参数破解

一、极验滑动轨迹分析

想构造一个成功率高的滑动轨迹,首先得知道js代码中是如何记录滑动过程,不同厂家的记录方式不同。但是,万变不离其宗,记录的过程无非就是通过触发鼠标的点击、移动等事件,记录时间、位置等信息。

1. 生成滑动轨迹的js入口

首先将混淆的js代码还原,还原过程请看 极验滑块验证码破解与研究(一):AST还原混淆JS ,使用reres插件将slide.7.8.4.js替换成还原后的js文件。下面介绍两种方式找到js记录的滑块轨迹。

1.1. 参数搜索方式

破解极验最终的目的就是构造w参数,而w参数是由滑动轨迹通过加密算法得到的。所以,可以先找到w参数的位置,通过w参数跳到滑动轨迹加密之前的位置。
在这里插入图片描述

控制台输出r[‘LxVe’][‘MEOT’],即为滑动轨迹列表
在这里插入图片描述

1.2. 请求调用栈方式

滑块移动完成时,会调用验证请求,通过请求的调用栈,可以找到请求参数的生成过程,因此,也能找到滑动轨迹列表。
在这里插入图片描述

2. 滑动轨迹分析

通过多次滑动滑块,观察轨迹数组中每条记录的特征。轨迹是一个n*3的2维数组,每一行有三个值(以下简称[x, y, t])。x为已滑动的横向距离,y为已滑动的纵向距离,t为滑动过程消耗的时间, 单位: 毫秒。
第一行特征: 第一行为鼠标点击在滑块上,点击位置相与滑块的相对位置,其中0>x>65,0>y>65;
第二行特征: 第一行为为统一的[0,0,0];
行间特征: 点击触发滑块时,每隔10毫秒左右记录一次位置和时间(其实是检测鼠标事件的代码执行时间约10毫秒),两次记录间x差值不为0;
最后一行特征: x与上一行相同,t与上一行相差比较大或0。
在这里插入图片描述

3. 滑动轨迹的python实现

此方式构造的滑动轨迹,成功率在95%左右,其中各项参数还可以优化。
优化方案:滑动的距离在0-200范围内,可能性不大。每次可保存校验成功的轨迹。下次遇到相同距离时,可直接调用。

# -*- coding: utf-8 -*-
import random


def __ease_out_expo(sep):
    if sep == 1:
        return 1
    else:
        return 1 - pow(2, -10 * sep)


def get_slide_track(distance):
    """
    根据滑动距离生成滑动轨迹
    :param distance: 需要滑动的距离
    :return: 滑动轨迹<type 'list'>: [[x,y,t], ...]
        x: 已滑动的横向距离
        y: 已滑动的纵向距离, 除起点外, 均为0
        t: 滑动过程消耗的时间, 单位: 毫秒
    """

    if not isinstance(distance, int) or distance < 0:
        raise ValueError(f"distance类型必须是大于等于0的整数: distance: {distance}, type: {type(distance)}")
    # 初始化轨迹列表
    slide_track = [
        [random.randint(-50, -10), random.randint(-50, -10), 0],
        [0, 0, 0],
    ]
    # 共记录count次滑块位置信息
    count = 30 + int(distance / 2)
    # 初始化滑动时间
    t = random.randint(50, 100)
    # 记录上一次滑动的距离
    _x = 0
    _y = 0
    for i in range(count):
        # 已滑动的横向距离
        x = round(__ease_out_expo(i / count) * distance)
        # 滑动过程消耗的时间
        t += random.randint(10, 20)
        if x == _x:
            continue
        slide_track.append([x, _y, t])
        _x = x
    slide_track.append(slide_track[-1])
    return slide_track


if __name__ == '__main__':
    for _ in get_slide_track(100):
        print(_)

二、结语

友情链接:极验滑块验证码破解与研究(五):请求分析及加密参数破解

本期文章结束啦,如果对您有帮助,记得收藏加关注哦,后期文章会持续更新 ~~~

在这里插入图片描述

### Makefile 编译时出现 `moc_form.cpp` 错误的原因分析 在 Qt 开发环境中,当使用 C++ 和 Qt 的元对象编译器 (Meta-Object Compiler, moc) 处理 `.ui` 文件或其他资源文件时,可能会遇到 `moc_form.cpp` 相关的错误。这种错误通常发生在未正确配置 Makefile 或者缺少必要的依赖项。 以下是可能原因及其解决方案: #### 1. **Qt Meta Object Compiler 配置不正确** 如果项目中的某些类继承自 QObject 并包含了 Q_OBJECT 宏,则需要通过 moc 工具生成额外的代码。如果没有正确设置 Makefile 中的相关规则,可能导致 `moc_form.cpp` 缺失或无法正常生成[^1]。 解决方法: 确保项目的 Makefile 正确指定了以下选项: ```makefile QT += core gui widgets CONFIG += c++17 SOURCES += main.cpp \ form.cpp \ $(MOC_DIR)/moc_form.cpp HEADERS += form.h FORMS += form.ui ``` 上述配置中,`$(MOC_DIR)` 是用于存储由 moc 生成的中间文件的目录路径。如果此变量未定义,可以手动指定其位置并将其添加到 SOURCES 列表中。 --- #### 2. **UI 文件转换失败** `.ui` 文件是由 Qt Designer 创建的界面描述文件,在构建过程中会被 uic 转换为头文件形式(通常是 `ui_<filename>.h`)。如果该过程出现问题,也可能间接影响到 `moc_form.cpp` 的生成。 证方式: 运行命令行工具检查是否有语法错误: ```bash uic form.ui -o ui_form.h ``` 如果成功生成了对应的头文件,则说明 UI 文件本身无误;否则需修正其中存在的问题后再重新尝试。 --- #### 3. **Makefile 自动生成机制失效** 对于一些复杂的多模块工程来说,可能存在子目录间的相互依赖关系未能被妥善处理的情况。这会导致部分目标文件丢失或者顺序混乱从而引发链接阶段报错。 调整建议如下所示: ```makefile SUBDIRS = subdir1 subdir2 include($$PWD/subdir1/Makefile) include($$PWD/subdir2/Makefile) all: subdirs-pre make-default subdirs-post subdirs-pre: @echo "Preparing Subdirectories..." subdirs-post: @echo "Postprocessing Completed." ``` 这里展示了如何利用递归调用来管理多个子级组件之间的协作流程。 --- #### 示例修复后的完整 Makefile 片段 下面是一个经过优化后能够兼容大多数场景下的基础模板供参考: ```makefile TARGET = MyApp TEMPLATE = app DEFINES = INCLUDEPATH= . ../common_headers/ DEPENDPATH+= . # Input files. FORMS += form.ui RESOURCES += resources.qrc SOURCES += main.cpp \ form.cpp \ $(MOC_DIR)/moc_form.cpp OBJECTS_DIR= ./obj/ QMAKE_MOC_FLAGS += -I../custom_includes/ ``` 注意:以上仅为简化版实例,请依据实际需求灵活修改参数设定。 --- ### 总结 针对 `Makefile` 编译期间发生的 `moc_form.cpp Error 1` 类型异常现象,可以从以下几个方面入手排查并解决问题——确认 Qt meta-object compiler 设置准确性、审查 user interface descriptor 是否存在问题以及审视整个 build system 架构设计合理性等方面逐一核查直至恢复正常运作状态为止。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值