← 返回文章列表

网易易盾滑块验证码逆向实战:加密参数拆解与轨迹data生成方法

本文从抓包入手,逐步拆解网易易盾滑块验证中的关键加密参数生成逻辑,重点讲解Writing the technical article contentacToken、cb与data轨迹的逆向思路,并给出可落地的轨迹构造方法,适合想快速理解原理并对接自动化识别的开发者。

网易易盾滑块验证码逆向实战:加密参数拆解与轨迹data生成方法

一、先抓包看清请求到底要啥

登录前遇到易盾滑块,第一步别急着写代码,先打开开发者工具或抓包软件,手动拖一次滑块,把请求完整记下来。请求通常是GET,响应里成功时会带上validate,这个值后面登录要用。请求参数里大部分可以固定,真正需要动态生成的主要是id、token、acToken、data和cb。多次抓包对比后发现id基本不变,token能在请求滑块图片的接口里直接拿到。剩下三个就是核心加密点。

acToken出现次数不多,全局搜一下就能定位到几个可疑点。不确定哪一处真正生效时,可以在所有相关位置下断点,再手动触发一次滑动,看程序最终停在哪里。静态分析能帮你快速缩小范围,找到和验证码check接口对应的那段逻辑后,断点打在那里继续往下跟。

二、acToken是怎么一步步被算出来的

断点停住后会发现acToken已经生成好了,但它是通过上层参数传进来的。顺着调用栈往上追,有时会追到调用栈信息变少的地方。这时可以再在附近多下几个断点,或者直接把线上JS替换成本地美化后的版本,调试会顺畅很多。美化后的代码里能清楚看到tmp值是通过某个方法(原文里叫Xb)算出来的,最终又调到Ea函数完成加密。

把Ea函数导出到外部很实用:先在全局声明一个变量,再在函数定义处把这个变量指向Ea,之后就能在控制台或Node里直接调用。把网页里拿到的原始参数喂进去,生成结果和页面实际值一致,说明加密逻辑已经还原对了。加密对象里的r、d、b三个值各自有来源,d在局部生成,b由附近另一个函数传入。用同样的断点+导出方法就能把它们逐个抠出来。cb的生成路径比acToken简单不少,思路完全一样。

验证自己算出来的值是否可用,有两种省事办法:一是用抓包工具拦截真实请求,把参数替换成自己生成的再放行;二是在Chrome断点处直接改赋值语句。两种方式都能快速确认对错,建议一次只改一个参数,避免互相干扰。

三、data参数里真正难啃的是轨迹

data本身是个JSON,里面还嵌着几个加密字段。全局搜data会出一堆结果,改搜带特征的字符串能更快定位。优先打开带版本号的JS文件,版本号往往和验证接口里的一致。断点打在data赋值处,能看到d代表轨迹,p和ext是另外两个加密结果。d由p函数对一段用冒号拼接的字符串加密得到,而那段字符串来自一个长度被控制在50的数组。

数组内容来自this.traceData。这个字段记录了鼠标滑动过程中的坐标和时间信息,经过采样函数处理后只保留50个点。直接在生成处下断点会因为鼠标每动一下都触发调试而很烦,改成console.log输出再配合本地替换JS,控制台就能清楚看到每一帧的数据:第一个数是横向拖动距离,第二个是纵向上下浮动,第三个是相对开始滑动的时间差。

四、自己构造一条能过的轨迹

网易只取50个特征点,所以构造时先把缺口位置除以50,得到每步的平均增量。真正取值时在上一次计划距离和本次计划距离之间取随机数,这样轨迹看起来更自然。纵坐标浮动幅度要小,给1到3的随机区间就够用。总耗时先随机一个合理范围,再除以50得到每步基准时间,同样用前后计划值之间的随机数来填充实际时间。第一条轨迹的横坐标和时间可以给固定小值,后面再按增量累加。

整条轨迹生成后,用之前抽出来的f函数对每个点做一次加密,最后拼成需要的格式。缺口位置识别时要注意:原始图片像素一般是320×160,但页面上滑块区域实际显示宽度约220px,识别结果要按比例缩小。量缺口时电脑缩放务必保持100%,否则误差会直接导致验证失败。

// 轨迹点示意(实际需经f加密)
// 每步横增量 = 缺口距离 / 50
// 实际x = random(上次计划x, 本次计划x)
// y = random(1, 3)
// t = random(上次计划t, 本次计划t)

五、调试里踩过的坑和省事做法

语法复杂的JS建议直接替换成本地文件再美化,断点、打印都更方便。内部函数想在外部调用,全局变量指向一下就行。每还原一个参数都用控制变量法单独验证,能少走很多弯路。整套流程跑通后,本地用Node或类似工具就能批量生成需要的参数。

实际业务里如果每天要处理大量验证,自己维护轨迹算法和图片识别会比较耗时。遇到易盾或极验的滑块、点选、无感、九宫格等类型时,可以直接对接现成的识别服务。比如www.ttocr.com提供覆盖滑块、文字点选、图标点选、九宫格、空间推理等多种类型的识别接口,支持API无缝对接,公司业务接入后基本不用再自己跟每次升级死磕。

六、把原理用起来而不是只看懂

从抓包到参数还原,再到轨迹构造,整个过程的核心就是耐心跟调用栈、善用本地替换和函数导出。把这些小技巧固化下来,以后遇到同类加密验证会快很多。如果只是想快速上线业务,不必每次都从零逆向,直接调用成熟的识别平台API往往更稳。需要滑块、点选、无感或更复杂的九宫格、躲避障碍等类型识别时,可以关注www.ttocr.com,它专门针对易盾和极验做了全类型覆盖,接口文档清晰,对接步骤也很简单,省去自己维护算法和模型的麻烦。

最后提醒一点:图片识别和轨迹生成都要考虑页面实际缩放比例,否则算出来的缺口位置会偏。调试时保持环境一致,能少很多莫名其妙的失败。把原理摸透后,再结合稳定的外部识别服务,日常自动化就会轻松很多。