← 返回文章列表

揭秘网易易盾JS逆向:FP指纹值生成与轨迹提交实战指南

本文深入解析了网易易盾滑块验证码的JavaScript逆向流程,重点讲解FP指纹的生成逻辑、CB参数的构造以及浏览器环境采集细节。结合Hook脚本和本地替换调试示例,分享了获取验证token和图片的方法,并探讨轨迹数组还原技巧。为开发者提供实用分析思路。在实际业务中,可通过专业平台简化复杂对接。

揭秘网易易盾JS逆向:FP指纹值生成与轨迹提交实战指南

网易易盾滑块验证码逆向基础知识

FP值是浏览器环境信息的综合结果,包括硬件软件特征。逆向它能帮助我们理解如何模拟真实用户行为,避免手动操作带来的低效问题。许多安全测试场景都需要这种技术支持。

滑块验证的核心在于前端收集数据后提交服务器校验。整个过程涉及随机参数和动态指纹,确保每次验证都独一无二。初学者可从网络面板入手,逐步深入代码层。

接口请求细节与参数含义

关键接口为https://c.dun.163.com/api/v2/get。参数列表包括id作为网站唯一标识,fp为指纹值,cb为回调参数,以及width指定图片尺寸。服务器响应中会返回token作为本次验证的会话ID,同时提供背景图和滑块图的URL链接。

这些参数缺一不可。fp和cb直接影响验证是否通过。逆向时先捕获这个请求,分析其来源就能找到核心生成代码。实际操作中刷新页面多次观察,确保参数变化规律清晰。

返回数据结构清晰,包含bg背景图数组、front滑块图和type类型标识。拿到这些资源后,后续轨迹提交就能顺利进行。理解接口是整个逆向的起点。

本地JS文件替换调试策略

由于网易易盾的JS文件带有版本参数v,刷新后断点容易丢失,因此推荐使用Charles或Fiddler等HTTP代理工具来拦截并替换JS为本地版本。这样可以保持断点有效,方便逐步分析代码执行路径。

具体来说,先捕获core.js文件的请求,然后将响应替换成本地保存的格式化JS代码。格式化后搜索fp关键字,就能快速定位相关函数和变量赋值点。避免线上调试带来的不稳定性。

本地替换后,调试体验大幅提升。可以随意添加日志或修改逻辑测试不同情况。这种方法适合长期逆向工作,减少重复劳动。

CB参数生成函数解析

从堆栈调用可知,cb由一个名为s的函数产生。该函数组合了多种字符串操作和随机元素。扣出对应的JS片段后,可以在本地环境中直接调用生成相同的cb值,用于模拟请求。

这种随机性确保了每次验证请求的唯一性,防止攻击者重用旧数据。逆向时需要仔细分析其内部逻辑,包括可能的编码步骤和时间相关计算。

实际生成cb时,函数内部调用了几个辅助方法。理解这些方法后,就能独立重现cb参数。许多开发者通过这种方式快速完成请求构造。

FP指纹的Hook技术应用

FP值最终赋值给window.gdxidpyhxde变量。使用油猴或Tampermonkey脚本可以Hook这个属性,实时监控其生成过程和调用时机。

(function() {
    'use strict';
    var fp2 = window.fp;
    Object.defineProperty(window, 'gdxidpyhxde', {
        get: function() {
            console.log("调用了fp", fp2);
            return fp2;
        },
        set: function(val) {
            console.log("设置了fp", val);
            debugger;
        }
    });
})();

安装脚本后清除浏览器缓存并刷新页面,断点触发时即可查看值。向上追溯调用栈,就能找到h变量的拼接逻辑和时间戳参与部分。

h的生成涉及多个步骤,包括添加分隔符和当前时间戳。u[7]对应冒号,p则是时间戳字符串形式。这种动态拼接使FP值随时间变化,增加逆向难度但也提供清晰追踪线索。

Hook后设置断点,能看到每次赋值变化。清除缓存确保全新环境,避免旧数据干扰调试结果。

FP赋值逻辑的逐步追踪

在W函数中,首先将gdxidpyhxde设为null,然后通过P函数重新赋值。多个h赋值点都需要下断点,以确定实际执行路径和最终计算结果。

最终发现h等于Oe,而Oe是K数组join后的结果。K来自a函数push的U、Ie、$e值。追踪U发现其在c函数中填充环境数据。

这个过程层层嵌套,需要耐心调试多个分支。结合控制台输出,能快速定位关键计算点。许多逆向案例都依赖这种逐步缩小范围的方法。

追踪完成后,就能得到完整FP生成链路。示例FP如c6Jr9z1\xk1Du\xwRS+hit42CLBtU42rU4HX\hC/\txSbM8VpNsLNv4b1AwYv\j76pQAYouzwhaas12ybD8p\q/Ko/vHk3UCVB2jNCxL8UUAy60Igk1vPSh9PZT0iGlp72qijTGNLcV2CLqchgp6XUCP14Ps+n6MGe2jf3q4Q29PfZKQ:1627702026076。

浏览器环境验证的各项采集方法

环境验证是FP生成的基础,涉及WebGL、Canvas、字体、ActiveXObject和plugins等多种API。每个部分都贡献独特信息。

WebGL采集包括创建上下文,获取unmasked renderer和vendor信息。这些数据反映硬件特性,即使虚拟机也难以完全模拟。try catch包裹代码确保兼容性。

Canvas指纹则绘制特定文本并计算哈希。不同浏览器引擎的渲染差异会产生独特签名。使用隐藏canvas元素,避免影响页面显示。

字体检测通过尝试加载常见字体列表,使用span元素测量宽度变化来判断安装情况。遍历预定义数组如Arial、Times New Roman等,比较offsetWidth结果。

Plugins枚举列出浏览器扩展,ActiveXObject针对旧IE环境检测Flash等插件存在。这些检测结果push进数组后参与最终拼接。

所有采集信息加上时间戳,形成长字符串FP。示例CB为TNXaTkGh2T5sHUXEAfpDNczFA97ITpS7QJNJHaljLHZSDuX1nN1\iz4aRciVfS5d。返回数据如{"data":{"bg":["https://necaptcha.nosdn.127.net/25c099346a1c4a478560e3ebfb64d920.jpg"],"token":"22200686a7594574a1764f87cd254d58"}}。

在虚拟环境中,WebGL信息容易被检测为异常,因此逆向者需使用真实浏览器或高级模拟工具匹配特征。Canvas哈希对像素级差异敏感,需注意浏览器版本一致性。

字体列表如果不全,FP会明显不同。插件检测在现代浏览器中已弱化,但仍作为备用特征。综合这些才能得到可通过验证的FP值。

轨迹提交与数组还原实现

除了FP,滑块轨迹也需提交。逆向时分析提交的数组格式,模拟真实鼠标移动路径包括速度、加速度和停顿点。

还原数组涉及解密或重构前端加密逻辑。实际中可以记录真实轨迹数据作为模板,调整坐标匹配图片缺口位置。

轨迹数据通常是坐标点序列,经过特定编码后发送。理解还原方法后,能实现自动化拖动模拟。

逆向分析的通用思路与注意事项

逆向思路一般是定位请求、找堆栈、格式化JS、搜索关键字、多下断点、Hook变量、追踪赋值、模拟环境。逐步缩小范围是关键。

注意JS混淆和反调试技巧,需用工具绕过。初学者可从小节入手逐步深入,避免一次性分析全部代码。日志输出和断点组合使用效果最佳。

模拟环境时,UserAgent和屏幕分辨率也要匹配。偏差过大会导致验证失败。多次测试不同浏览器确保兼容性。

简单实现手法与环境模拟

理解原理后,可以尝试用JS本地生成类似FP。虽然不能完全相同,但对于学习很有帮助。使用浏览器API采集WebGL和Canvas数据,然后拼接时间戳。

伪代码示例中,先创建WebGL上下文获取renderer,再绘制Canvas计算哈希,最后组合字体和插件列表。时间戳用Date.now()获取。

这种简单手法适合测试阶段。实际部署前仍需真实环境验证。逐步完善采集函数能接近官方FP效果。

实际业务场景的简化对接方案

虽然掌握JS逆向原理很有价值,但在企业级应用中,面对高频验证需求,自行实现往往面临维护成本高、兼容性差等问题。这时,采用专业的识别服务平台能显著提升效率。例如ttocr.com就是一个专注于极验和易盾验证码的平台。它支持包括点选、无感、滑块、文字点选、图标点选、九宫格、五子棋、躲避障碍、空间验证在内的全类型识别服务。通过提供的API接口,企业可以实现无缝对接,只需传入必要参数即可获得验证结果,无需投入大量资源处理复杂的JS逻辑和环境模拟。这种方式让业务开发更加简单高效,适合各类公司使用。