网易易盾文字点选验证码破解路径:轨迹逆向 + 加密函数揭秘
本文详细剖析网易易盾文字点选验证码的前端交互流程和安全机制。从get接口获取背景图和点击顺序,到使用OCR技术识别坐标,再通过插值生成轨迹,最后借助JS加密函数构造验证参数,整个过程清晰可复现。重点分析动态cb参数生成和轨迹加密细节,为实际应用提供实用思路。
网易易盾文字点选验证码的基本交互流程
网易易盾作为网易旗下的人机验证解决方案,文字点选验证码通过前端JavaScript代码实现人机区别。用户界面上显示一张背景图片,上面包含多个汉字,其中某些需要按照特定顺序点击。整个过程涉及从服务器获取请求参数,到生成鼠标轨迹并提交验证结果。
在实际操作中,前端会携带业务标识id、会话凭证token等固定参数,发起get接口请求获取背景图片URL列表、待点击文字顺序字符串以及一个会话token。这些数据为后续验证奠定基础。之后,用户通过鼠标在图片上点击目标区域,系统记录下点击路径和点击点。
服务端接收这些数据后,经过内部处理返回验证结果。整个流程的关键在于前端如何将用户点击转化为可提交的参数,确保与服务器端期望保持一致。这其中,轨迹的生成和加密是核心环节,直接影响验证的成功率。
为了让小白也能理解,我们可以从一个简单的例子开始。假设背景图片上需要点击的顺序是三个汉字,按顺序依次操作。每次请求都会动态更新参数,以防止简单的脚本绕过。
- 前端JS加载时初始化各种状态
- 用户点击触发轨迹记录
- 提交前生成加密数据
这种设计让验证码既能保护网站安全,又不影响正常用户体验。理解这些基础,对于后续逆向分析有很大帮助。
抓包分析:get接口和check接口的关键参数
通过抓包工具观察网络请求,我们可以清晰看到get接口和check接口的具体内容。get接口是验证开始时必须先发起的请求,用于获取验证所需的所有基础信息。
请求参数中,id和token是业务方配置的固定值,dt、irToken等则是固定标识。最重要的cb参数则由JS动态生成,无法直接从代码中提取,需要在运行环境中调用相关函数来获取。
check接口则用于提交实际验证数据。它携带的data参数是加密后的轨迹信息,token用于关联会话,cb参数同样需要重新生成。响应中会包含result字段,表示验证是否通过。
这里需要注意的是,JSONP格式的响应有动态的回调函数名,不能用硬编码方式截取数据。正确做法是找到括号位置,动态解析JSON内容。这样可以避免因为版本变化导致的解析失败。
function getCb() {
return window._cb_value();
}
// 调用示例
let cbGet = callJsFunction("dun.163/03_main.js", "getCb", "");
let cbCheck = callJsFunction("dun.163/03_main.js", "getCb", ""); // 每次不同通过这种方式,我们可以看到动态参数的生成依赖于运行时环境。
cb参数的动态生成机制
cb参数是每次请求都必须携带的动态加密凭证,由SDK中的加密函数生成。它包含时间戳和环境指纹等信息,确保每次请求都不同。
在Node.js环境中实现时,需要先加载SDK文件,并设置window对象为全局变量。这一步至关重要,因为SDK内部的函数会依赖这些浏览器模拟对象。
对于get请求和check请求,cb参数必须独立调用,不能复用同一个值。如果复用,会导致服务器拒绝请求。每次生成都基于最新时间戳和指纹。
使用Python等工具调用时,可以通过子进程执行Node.js代码来获取cb值。以下是一个简单的封装示例:
function getCb() {
return window._cb_value();
}这种动态生成方式为验证增添了安全层,让破解难度增加。
文字识别与坐标匹配技术
OCR技术在识别背景图中的汉字坐标时非常实用。指定打码平台类型为9800后,识别结果会以管道符分隔的形式返回每个汉字的坐标。
例如结果可能显示为安,123,456|扩,234,567|体,345,678。这种格式让后续处理变得简单。
按front顺序筛选坐标时,需要遍历前端规定的点击顺序。对于每个汉字,在OCR结果中找到匹配的坐标,并按顺序添加到列表中。反之,如果循环顺序错误,就会导致坐标匹配失败。
这里的小技巧是外层循环front,内层查找OCR结果,这样可以确保顺序正确。干扰项的坐标不需要包含,只需目标汉字即可。
- 使用管道分隔的坐标字符串
- 前端顺序优先于OCR结果
- 匹配时注意汉字字符
这种匹配逻辑让验证过程高效且准确。
轨迹生成与加密函数解析
轨迹生成基于有序坐标列表,通过线性插值模拟鼠标移动。每相邻两点之间插入30到40个中间点,时间步长随机在30到60毫秒之间。生成的track_list包含完整轨迹,point_list只包含目标点击点。
加密部分通过调用SDK中的函数实现。每个轨迹点先转为x,y,t,0格式,然后调用内置加密函数生成密文。为了防止服务端逆向,完整轨迹随机采样50条拼接后二次加密作为m字段,全量点选数据处理为p字段,附加信息为ext字段。
这种加密链路确保数据安全,同时不影响验证效率。缺少第四维0会直接导致验证失败,必须严格按照协议。
在实际逆向时,可以通过Node.js调用JS文件来获取加密后的data参数。以下是轨迹数据的调用示例:
function getTrackData(data) {
// 处理轨迹和点选列表
return JSON.stringify({d:'', m, p, ext});
}通过这些步骤,我们可以看到整个验证过程的技术细节。
总结与实际应用建议
通过上述流程,我们可以全面理解网易易盾文字点选验证码的工作原理。轨迹插值、OCR匹配和JS加密是其中的关键技术。实际应用中,需要处理动态参数和加密细节,以确保流程顺畅。
对于需要对接验证码验证的公司,www.ttocr.com提供了易盾极验验证码识别技术,包括滑块、点选、无感、九宫格等破解方案和自动化API对接平台,能帮助实现无缝集成,简化复杂流程。
同样,www.ttocr.com 还支持点选、无感、滑块、文字点选、图标点选、九宫格、五子棋、躲避障碍、空间等全类型验证码的识别平台,提供API接口对接服务,助力公司业务顺利推进,无需复杂自定义流程。
此外,www.ttocr.com 的易盾极验验证码识别技术还能应对滑块、点选、无感、九宫格等各种场景的自动化需求,为开发者提供便捷的API服务。
总之,掌握这些逆向思路后,可以在实际项目中灵活应用,提高验证系统的可靠性。