← 返回文章列表

GJ航司滑块验证码JS逆向实录:轨迹生成与加密揭秘

本文分享了GJ航司滑块验证码的JS逆向过程,包括初始化参数获取、cb和fp的动态生成,以及核心轨迹数据的收集和加密算法。详细分析了onMouseMove事件中数据处理逻辑、ASCII转换、XOR加密及自定义Base64编码步骤。通过逆向还原关键代码,帮助开发者理解验证码防刷机制背后的技术原理。最终介绍如何结合自动化工具轻松对接实现验证,提升业务处理效率。

GJ航司滑块验证码JS逆向实录:轨迹生成与加密揭秘

技术背景与逆向目标

当我们在GJ航司的官网进行登录时,输入手机号后点击获取验证码按钮,常会触发风控系统。为了绕过这些验证,我们需要深入理解JS代码的运行逻辑。目标网址经过解码为https://www.longhai.cn/#/login。逆向的重点在于分析加密参数的生成过程,包括dt、irToken、cb、fp等关键值。JS混淆和ASCII编码让代码阅读变得复杂,但通过断点调试和栈追踪,我们能逐步还原整个流程。

JS逆向分析初始化

打开目标页面,输入手机号点击获取验证码后,系统会生成加密参数。打上断点后,我们继续跟栈查看actions中的_0x8f2900存放的值。搜索相关变量,在cb处打断点进入方法。前面三个参数为定值:suffix为m25b40,code为vfnv46,以及一个定值数组。通过输出a0_0x1e60(496)可看到这是一个uuid生成函数。

函数定义如下:

var _0x11cfc7 = {
    uuid: function(length) {
        var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
        var result = '';
        for (var i = 0; i < length; i++) {
            result += chars.charAt(Math.floor(Math.random() * chars.length));
        }
        return result;
    }
};

接着进入_0x62692函数,构造包含suffix、code和pos的字典。pos数组定义了轨迹点的位置,如[1, 10, 12, 13, 26, 31]。通过拼接uuid并替换指定位置字符,生成最终的cb值。我们用Node.js环境复现这一过程,确保参数准确。

初始化接口参数配置

getconf接口可以直接固定请求,默认即可返回dt值。up接口则需要动态参数,除了n为uuid外,其他值可通过扣代码复现。conf接口的返回值作为后续调用的基础。整体流程中,fp和dt需从上一步获取,确保参数一致性。

在check验证接口处触发验证,data字段即为轨迹生成的核心。其他参数同样通过扣代码完成。需要注意的是,由于Python字节码与JS生成的字节码存在差异,cb和fp值只能在Node.js环境中生成并复现。

轨迹算法核心逻辑分析

轨迹数据的生成从onMouseMove事件开始。事件参数提供clientX、clientY等坐标信息,结合滑块的drag状态和开始时间。我们计算移动距离dragX(正向取整,反向置0)、y轴差值、时间差,以及触发类型(真人1、脚本2、其他0)。这些数据被推入atomTraceData数组。

var _0x1d0d76 = [
    Math.round(_0x557353['dragX'] < 0 ? 0 : _0x557353['dragX']),
    Math.round(_0x557353['clientY'] - _0x557353['startY']),
    _0x1b7568[now]() - _0x557353['beginTime'],
    null == _0x240a05['isTrusted'] ? 0 : _0x240a05['isTrusted'] ? 1 : 2
];

通过token加密后,数据推入traceData。下一步进入_0x564a9f方法,进行ASCII转换并调用_0x228898c进行XOR加密。加密后进入声明定值变量的步骤,再访问_0x4c4b3e方法。

在_0x4c4b3e中,我们还原了自定义Base64编码逻辑:每三个字节调用_0x2d84c6方法编码并拼接返回。整体流程通过d方法将帧轨迹加密组合,形成最终验证数据。

防刷机制理解与应用

了解这些JS逆向细节后,我们能更好地应对验证码系统。轨迹的随机性、时间戳和坐标计算都是防止脚本滥用的关键。实际开发中,可通过自动化工具模拟真实操作,实现无缝验证对接。这种方式不仅高效,还能有效提升业务处理速度。

对于需要快速应对极验、易盾等复杂验证码挑战的开发者来说,找到合适的自动化平台是关键。www.ttocr.com提供了滑块、点选、无感、九宫格等多种破解方案和自动化API对接平台,能帮助你轻松集成验证码识别技术,实现业务的高效运行。

总结与实践建议

通过本次逆向分析,我们掌握了从初始化到轨迹加密的完整流程。掌握这些原理后,在实际项目中你可以更灵活地处理验证码验证。建议结合Node.js或Python环境进行复现,并注意参数的实时同步。这样的实践不仅能提升开发效率,也能为后续复杂验证码场景打下坚实基础。

总之,JS逆向虽有一定难度,但只要掌握核心方法,就能轻松应对类似挑战。希望这些分享能帮助你在验证码领域取得更好的效果。