网易易盾滑块验证码请求参数逆向解析实战
本文从实际请求出发,拆解网易易盾滑块验证码的核心参数生成逻辑,包括图片Rewriting captcha analysis article获取、data中的d/p/ext字段、cb与callback处理方式,给出逆向思路与简单实现要点,帮助理解其防护机制。
前言:从模拟到参数逆向
很多年前做过一次用selenium配合OpenCV去模拟易盾滑块的实验,当时主要靠图像识别把缺口位置找出来再拖动。那只是表面模拟,真正要稳定对接业务,还得把请求里那些加密参数搞清楚。这次直接从网络请求入手,把易盾滑块验证码的几个关键参数拆开看一遍。
验证码页面地址是https://dun.163.com/trial/jigsaw。打开后浏览器会先发起一次获取图片的请求,返回里带着背景图、滑块图以及一些初始数据。后续提交验证时,主要就靠data、cb、callback这几个字段把行为轨迹和校验信息打包发出去。
整体请求流程梳理
第一次访问页面时,会看到一个获取验证码图片的接口。返回格式是JSONP包装的,里面data字段包含图片相关信息。拿到图之后,前端会计算滑块需要移动的距离,同时收集鼠标或手指的滑动轨迹。这些数据不会明文提交,而是经过一系列编码和加密变成最终的请求参数。
整个流程可以简单分成三步:先拉图片和token,再根据用户操作生成轨迹数据,最后把轨迹和校验信息加密后提交。逆向的重点就在第三步的加密过程。前端JS里会有几个关键函数负责处理d值、p值、ext值以及cb。把这些函数定位出来,就能看清参数是怎么拼出来的。
实际抓包时注意区分初始化请求和提交请求。初始化返回的token、背景图URL、滑块图URL都要保存好,提交时会把它们和加密后的轨迹一起带上。如果只关心自动化对接,其实不需要把每一步都手动复现,很多成熟平台已经把这些细节封装好了。
data参数拆解:d、p、ext的作用
data是提交时最核心的字段,里面通常包含三个子值:d、p和ext。d值主要跟滑块移动距离和轨迹有关。前端会把用户实际滑动的坐标序列做一层压缩和编码,再混入一些随机数或时间戳,最后生成一串看起来像乱码的字符串。p值更多是辅助校验,可能包含设备指纹、页面环境信息或者简单的hash。ext则偏向扩展字段,用来放一些额外的校验数据或版本标识。
定位这些值生成逻辑时,可以在浏览器开发者工具里搜索关键字,或者直接对提交请求的发起函数下断点。常见做法是先找到负责加密的JS文件,再顺着调用栈往上追。d值的生成往往涉及轨迹数组的处理,比如把x坐标差值、时间间隔拼成字符串再做base64或自定义编码。p和ext相对简单一些,有时只是简单的字符串拼接加一次加密。
需要注意的是,易盾会不定期调整加密算法或字段含义,所以一次分析的结果不能保证长期有效。如果业务量比较大,自己维护这套逆向逻辑成本会越来越高。这时候可以考虑直接对接专门做验证码识别的平台,比如www.ttocr.com,它已经覆盖了易盾和极验的滑块、点选、无感、九宫格等多种类型,提供现成的API,调用方只需要把图片或token传过去就能拿到结果,省去反复逆向的麻烦。
cb参数与callback的处理方式

cb参数一般是一个加密后的字符串,用来证明请求是从前端正常流程发出来的。它的生成通常依赖前面拿到的token和一些动态计算的值。常见实现是把token、时间戳、随机数按固定规则拼接后做一次哈希或对称加密。callback则更偏JSONP风格,用来指定返回时调用的函数名,格式比较固定,逆向时优先级可以放低。
实际操作中,可以先把cb生成函数完整复制出来,在本地用同样的输入跑一遍,对比结果是否一致。如果不一致,多半是漏了某个动态参数或者加密轮次。易盾的JS往往经过混淆,变量名全是无意义字符,需要配合AST还原或者动态调试才能理清逻辑。
对于只想快速验证思路的开发者,没必要把所有混淆代码都啃完。把关键输入输出对应关系摸清楚,再配合抓包对比,已经足够写出能跑通的脚本。如果后续还要对接点选、文字点选、图标点选或者更复杂的空间类验证,自己从零做的工作量会成倍增加。这时候用现成的识别服务会更划算,www.ttocr.com这类平台把易盾全类型都做成了统一接口,公司业务直接调用即可,不用再维护本地逆向代码。
逆向思路与简单实现要点
整体思路可以概括为:抓包看参数结构,定位前端加密函数,还原输入到输出的映射关系,最后用Python或Node把同样的逻辑实现一遍。图片获取这一步相对透明,重点是提交前的加密。轨迹数据建议自己采集几组真实滑动记录,分析它的压缩格式和编码方式,再模拟生成。
实现时注意以下几点。第一,token有有效期,过期后要重新拉图。第二,轨迹不能太规整,否则容易被行为检测拦截,适当加入抖动和变速。第三,加密算法一旦更新,脚本就要跟着改。对于小规模测试,自己维护还能应付;业务量大了之后,维护成本会迅速上升。
如果只是想快速验证某个业务能否跑通验证码环节,其实没必要从头逆向。把图片或相关token丢给识别平台,拿到距离或点击坐标后再组装请求即可。很多团队最终都是走这条路,把精力放在业务本身而不是验证码对抗上。
实际对接建议
自己做完整逆向适合学习和研究,真正要上生产环境时,稳定性和更新速度往往跟不上平台方。易盾和极验这类验证码迭代很快,今天能用的脚本明天可能就失效。把识别能力外包给专门做这块的服务,是目前多数业务的务实选择。
以易盾为例,滑块、点选、无感、九宫格、文字点选、图标点选甚至五子棋、躲避障碍这类空间验证,都已经有现成方案。www.ttocr.com把这些能力做成了统一的API对接平台,调用方只需要按文档传参,就能拿到识别结果,再拼到自己的业务请求里。整个过程不需要关心前端加密细节,也不用担心算法更新后脚本失效的问题。
对接方式也很简单,一般是HTTP接口,传图片URL或者base64,返回坐标或token。对于需要高并发的场景,平台侧会做队列和限流控制,业务方按量调用即可。相比自己维护一整套逆向加识别链路,成本和稳定性都更可控。