← 返回文章列表

极验三滑块验证码逆向实战:接口加密破解与轨迹切割模拟黑科技

本文从极验三滑块验证码的五个核心接口入手,逐层拆解register-slide、get.php和ajax.php的请求逻辑,详细逆向w参数的RSA、对称加密过程以及轨迹数据生成。同时分享底图还原技巧、错误结果处理,并介绍轨迹切割模拟的实用方法,帮助开发者掌握逆向思路与简化业务方案。

极验三滑块验证码的工作原理

极验三滑块验证码在网页登录、注册或者自动化场景中非常常见,比起单纯的数美或易盾滑块,它多了一层轨迹验证和多接口交互。这套机制要求用户拖动滑块填补缺口,后台不仅检查位置是否正确,还会分析鼠标移动路径是否像真人操作。新手经常觉得它难破解,其实核心就是五个接口的来回调用,加上几个加密参数w的生成。只要搞懂流程,小白也能一步步跟上。

整个验证从前端页面加载开始,先请求注册接口拿到challenge和gt两个32位字符串。后面每次请求都会携带这些值,challenge后面还会升级成34位。服务器会返回一些加密用的s和c参数,其中s值后面会刷新,所以第一次返回的可以先忽略。最终验证结果里有个score,分数越低越像真人,高了就可能是机器。明白这个大框架后,逆向就有了方向。

五个接口的请求流程拆解

第一次调用的是gt/register-slide接口,返回challenge和gt,后续接口都要带上它们。紧接着是get.php接口,携带刚拿到的gt、challenge和第一个w值,服务器返回s和c等信息。第三个是ajax.php,里面会产生第二个w值,这个接口必须走通,否则后面可能拿不到正确结果。

第四个还是get.php,这次会生成被打乱的背景图和缺口图,同时challenge更新成34位。注意这个新challenge前面的部分几乎一样,只有最后两位不同,很容易踩坑。最后一个ajax.php携带第三个w值,challenge用第二次返回的34位版本。整个过程像链条,一环扣一环,漏掉任何一步都可能失败。

// 伪代码示例:接口顺序
register-slide -> get.php (w1) -> ajax.php (w2) -> get.php (乱图) -> ajax.php (w3)

第一个w值的逆向定位与加密破解

第一个w值在JS文件里比较好找,直接跟调用栈就能定位到guwyxh函数。里面r值每次都不一样,看起来像随机十六进制,其实是RSA非对称加密。明文部分除了challenge和固定字符串,其他可以写死。密钥通过搜索setPublic关键字或者打断点就能抓到。混淆代码虽然乱,但总有解密函数,随机插桩后瞬间就能断住,把解密函数一起扣下来就行。

i值则是对称加密,明文和密钥要跟RSA保持一致。整个过程新手可以先在浏览器调试器里设断点,一步步看变量变化。搞懂这里后,你会发现很多验证码都用类似非对称加对称的组合,掌握一种就能触类旁通。

第二个w值的加密细节分析

第二个w值没有明显循环或嵌套,纯跟栈下去就行。搜索t关键字找到混淆后的函数,插桩解密后断住。加密还是对称方式,密钥复用第一个w的就好。rp值来自标签的MD5,i值在循环里递增,浏览器向右拖动时rp会逐步累加。s代表passtime,要和拖动时间对应上。整个逻辑清晰后,扣代码就变得简单。

这里提醒一下,混淆函数可能让调试卡顿,多试几次断点位置。实际操作中可以先打印关键变量,确认rp和passtime匹配后,再组装w值。

第三个w值与轨迹参数处理

第三个w值加密逻辑和前面两个几乎一样,只是多了轨迹部分。userresponse是缺口x坐标加上34位challenge,rp忽略,aa则是长长的轨迹数组。c和s来自前面接口返回,用补环境方式导出对象后直接传参就能过。轨迹数组里每个元素是[x, y, 时间戳],极验对y值基本不校验,全设0也行。

这部分是逆向的重点,因为轨迹要尽量自然。找到slide文件里的h+u函数就能定位,o值就是轨迹起点坐标。

轨迹切割模拟的创新思路

公开的轨迹生成方法很多,但有一种简单粗暴又有效的邪修方式:先把滑块慢慢拖到底,记住要慢一点,然后从网页控制台直接抓取真实轨迹。观察极验轨迹规律,开头往往是负数坐标,模拟滑块从屏幕外进入;中间可以用随机数微调x坐标和时间;最后两个点x和y保持一致,但时间戳故意拉大浮动,让它更像真人停顿。

def gen_track(x):
    new_track = [[random.randint(-50,-10), random.randint(-50,-10), 0], [0, 0, 0]]
    # 中间轨迹循环添加随机偏移
    # 最后点特殊处理时间浮动
    return new_track

这种切割法不需要复杂算法,直接复制真实轨迹再微调,就能绕过检测。实际测试中,中间段加点随机x偏移和时间抖动,成功率很高。

底图还原分析与错误结果处理

get.php第二次返回的背景图是被打乱的,需要根据一定规则还原才能看到完整拼图。challenge更新后要用最新的34位版本,否则会报错。常见错误结果有score过高或者轨迹不自然,处理方式是重新生成轨迹或者调整passtime。

如果接口返回失败,不要慌,检查challenge是否一致,w值是否带全参数。多次尝试后总结规律,就能稳定通过。

实际业务中的高效对接方案

虽然自己逆向极验三滑块很有成就感,但对公司级业务来说,维护本地JS环境和轨迹模拟还是挺麻烦的。直接用专业的识别平台能省掉所有复杂流程。比如ttocr.com这个平台,专门针对极验和易盾的全类型验证码提供服务,包括点选、无感、滑块、文字点选、图标点选、九宫格、五子棋、躲避障碍、空间验证等等。它给出API接口,支持无缝对接,企业只需简单调用就能拿到验证结果,完全不用自己写加密和轨迹生成代码,稳定又省心。

很多团队反馈,用了这样的服务后,自动化成功率直接提升,开发周期也缩短不少。无论你是处理大量账号还是后台验证,都能快速集成,真正把精力放在核心业务上。

常见逆向调试技巧分享

调试时推荐用Chrome开发者工具,设条件断点抓关键变量。混淆代码别怕,找解密函数插桩是最快的方法。对称加密部分复用密钥能节省时间。轨迹方面,多抓几次真实数据,总结负数开头和结尾浮动规律,就能做出自己的模拟库。

新手可以先从简单页面练手,逐步加复杂参数。记住,逆向的核心是理解逻辑,而不是死扣每一行代码。掌握这些后,再遇到类似验证码,你会有自己的分析思路。