跳转至

房天下滑块验证全流程说明文档

本文档以房天下滑块为示例,介绍滑块 js 验证的通用方式。随便介绍补环境框架的使用方法

1. 前提条件

房天下 js 滑块验证码逆向前准备如下:

  • 安装 nodevscodevm2
  • 若需要浏览器无环境来辅助调试,则需要安装 node-inspectnode
  • 目标网址:验证页面
  • 补环境框架基于 node vm2 开发,所以使用一些执行 js 的库来调用时可能会有运行结果与浏览器运行不一致的问题,或运行报错的问题。若出现此问题,推荐以下方法解决:
    • 将框架的内容转为 v8 模块再调用(暂未实现,待定)
    • 使用 pythonnode_vm2 之类的库来执行(一般使用此方法)

2. 验证流程

一般的验证码验证流程大都分为多个请求包,来分别验证请求者的环境信息(浏览器 bom 信息,dom 信息)及鼠标事件数组(滑块为拖动像素距离及移动轨迹,点选为点击顺序及坐标)是否正常。

以下为房天下滑块验证流程,一般极验等站也都采用类似的流程:

2.1. __get_verify_index

请求验证页面,获取初始 cookie 及响应内容长度,其中响应长度可供环境参数生成使用

此请求包主要用来获取响应内容长度,会在后面环境参数的生成中使用。但也可不模拟此请求(有多种方法生成环境参数 i),直接从 2.2. __get_gt 获取 gt 和 challenge 部分开始即可。

  • 由于此请求不很重要,略。

2.2. __get_gt

获取 gtchallenge 值,一般这两个值参与判断是否是同一轮验证。房天下只在请求参数中体现,没有像极验之类的站点使用这两个值参与请求值的计算。

image-20211108102612879

字段 说明 类型 是否必填 备注
channel 平台 str

注:请求需要携带 cookieglobal_cookieunique_cookie,参数定位使用 cookiehook 方法。

  • 返回结果(只介绍主要参数,其余略):
字段 说明 类型 备注
gt 用于同一轮验证 str
challenge 用于同一轮验证 str

2.3. __get_config

获取到版本等配置信息,一般此请求同 2.4. __get_image 一样用来 set-cookie 操作,根据不同站点来确定是否需要模拟请求。建议还是与浏览器一致。

image-20211108103854006

字段 说明 类型 是否必填 备注
c str 写死,值为 index
a str 写死,值为 getType
gt 用于同轮验证 str
challenge 用于同轮验证 str
time str
callback str 爱写不写,写死也可以
  • 返回结果(只介绍主要参数,其余略):

返回内容全都不重要,略。

2.4. __get_image

获取验证码图片信息,用于获取滑块的位移距离

image-20211108104456118

字段 说明 类型 是否必填 备注
c str 写死,值为 index
a str 写死,值为 getType
gt 用于同轮验证 str
challenge 用于同轮验证 str
callback str 爱写不写,写死也可以
  • 返回结果(只介绍主要参数,其余略):
字段 说明 类型 备注
surl 滑块图 str
url 滑块背景图 str

2.4.1. 确定滑块位置

直接匹配滑块和背景图像素即可,具体请参考程序。

​ 略。

2.5. __verify

验证请求包,用于验证环境参数和拖动距离和轨迹信息

此包比较重要,需要正确生成环境 i 值和轨迹 t 值。具体请在 其它参数定位 中查看。

字段 说明 类型 是否必填 备注
c str 写死,值为 index
a str 写死,值为 getType
start 开始时间,与 end 参数的差值要与生成轨迹的时间一致 str
end 结束时间 str
i 环境验证参数,取浏览器特征并处理而生成 str 请在 其它参数定位 中查看
t 轨迹处理后的值 str 请在 其它参数定位 中查看
gt 用于同轮验证 str
challenge 用于同轮验证 str
callback str 爱写不写,写死也可以

注:i 值可以复制浏览器参数,就只更改时间戳和 2.1. __get_verify_index 中的值即可,甚至只修改时间戳,或直接写死都能过验证。具体环境的随机生成方法和轨迹解密方法,请看 ast-hook-for-js 和补环境框架的教程。

  • 返回结果(只介绍主要参数,其余略):
字段 说明 类型 备注
validate 通过验证后的值 str

3. 补充说明

对以上流程进行补充说明

3.1. 房天下注意点

房天下 cookie 生成的位置大都在同一位置

image-20211108120021827

注:hook cookie 的代码如下(具体请看开发文档中的 cookie 定位和调试方法):

(function() {
    'use strict';
    //document 为要hook的对象   这里是hook的cookie
    var cookieTemp = "";
    Object.defineProperty(document, 'cookie', {
        //hook set方法也就是赋值的方法 
        set: function(val) {
            //这样就可以快速给下面这个代码行下断点
            //从而快速定位设置cookie的代码
            console.log('Hook捕获到cookie设置->', val);
            cookieTemp = val;
            debugger;
            return val;
        },
        //hook get方法也就是取值的方法 
        get: function()
        {
            return cookieTemp;
        }
    });
})();

3.1.3. 其它参数定位

使用内存漫游很方便就能定位到大致位置

  • 请求参数获取方法

  • 推荐直接在同目录(开发文档中) 下的 ast-hook-for-js 即可定位到参数生成的大致位置,再根据调用栈调试即可。

  • xhr 断点调试
  • 特征值搜索

  • 这里以轨迹 t 值为例:

直接搜 url 或特征值即可定位在这附近,稍微断点调试即可得到轨迹 t 的生成逻辑。而环境 i 值就在轨迹生成逻辑的上面。

image-20211110174518575

3.2. 如何运行 hook 到的 js 代码

  • 比较推荐使用补环境框架来调试,js 整体 try catch,再加上 js proxy 输出日志,通过 debugger 后即可 v8node 运行。

image-20211110173002174

  • 其中 js 所有方法所依赖的环境较少,直接手补最差的环境都能过。

具体请参考 gitlab 中的 ftx.js 内容

  • jsdom 环境也能过

略,不再演示。

注:补框架导出的环境在通过 v8 调试,或者 node 调试正常后,才可使用 py execjs 库运行。

image-20211110143442324

可能通过 js 调试工具了,还需要相应地稍微修改调试代码才能供 py execjs 直接使用(毕竟 js 调试工具大都是 v8 环境,推荐使用带有系统调用和 v8 运行双环境的调试工具)。

image-20211111171127194

4. 运行方式

对应程序在房天下程序中查看

  • 直接运行 run_slide.py 文件即可

这里放上整个流程图:

image-20220406122709865

评论

回到页面顶部