极验空间推理验证码逆向思路与实现要点解析
本文从接口Analyzing captcha cracking request抓包、图片物体定位到w参数加密还原,梳理极验空间推理验证码的完整分析流程,并给出简化实现方向,帮助理解验证逻辑与自动化对接思路。
从接口入手看清验证流程
空间推理验证码和常见滑块、点选不同,它要求用户根据文字提示在图片里找到特定位置关系的物体。要搞清楚它怎么工作,最直接的办法是抓包看请求顺序。打开极验官方演示页,刷新一次完整流程,能看到几个关键接口。

最先出现的是register-space,用来拿gt和challenge。gt基本固定,challenge是一次性流水号,用过后或者换了IP就失效。后面紧跟着几次get.php和ajax.php,前两次属于无感采集,主要跑fullpage.js收集环境信息,w参数可以先空着不影响后续。真正有用的是带type=click的那次get.php,返回里会带上图片地址pic、数组c、字符串s,以及中文提示语。这些值后面生成加密参数时都要用到。

用户点完坐标后,前端把坐标百分比、pic、c、s等信息一起塞进w,再post到ajax.php。服务器返回success和validate,就可以拿着gt、challenge、validate去业务接口完成登录。整条链路并不复杂,难的是w怎么算出来。

JS混淆还原与调试准备

加密逻辑主要藏在click相关的js文件里。原文件被高度混淆,直接看几乎没法下手。常见做法是先把混淆代码下载下来,用AST还原工具把控制流、字符串加密解开,再配合浏览器插件把本地还原后的文件替换回去。替换时注意路径要写成file:///开头,并允许插件访问本地文件。

还原完成后打开开发者工具,在Sources里搜w关键字,很快就能定位到生成位置。打上断点,手动过一次验证,就能看到w是由p和u两段拼起来的。p负责加密点击数据,u负责附加一段固定风格的字符串。两边都依赖同一个密钥生成函数,把这个函数和相关工具方法扣出来,就能本地复现。

w参数里的关键字段拆解

先看p的生成。它先把一个对象o转成字符串,再用密钥做加密,最后再包一层编码。o里有几个固定字段:lang默认zh-cn,passtime随便填个合理时间差,a是点击坐标的百分比形式(最小0_0,最大10000_10000),pic直接用get.php返回的值,ep可以先给空对象。最关键的是tt字段,它由鼠标轨迹数据和c、s共同计算出来。

轨迹数据本身不用追求真实鼠标路径,把页面坐标和时间戳按实际点击间隔填进去就行。把相关计算函数单独抽出来,传入轨迹、c、s,就能得到tt。密钥函数同样可以独立调用,算完之后加密再编码,p就齐了。

u的生成更简单,复用同一个密钥函数,再拼上一段固定格式的字符串即可。最终w=p+u。整个过程里没有黑盒算法,只要把函数关系理顺,本地就能稳定复现。

图片物体定位与坐标换算

空间推理的难点不在加密,而在识别。提示语通常是“点击大型绿色球体后面的红色物体”这类描述,需要先对图片做目标检测,把不同颜色、形状的物体框出来,再根据前后、左右、大小关系判断正确答案。

实践中可以用现成的检测模型先跑一遍,输出每个物体的中心坐标和类别。坐标要换算成验证码要求的百分比形式,注意图片实际显示尺寸和原始尺寸可能不一致,按比例缩放后再计算。点完坐标后把结果填进前面说的a字段,其余流程照旧。

如果业务量不大,手工标注几张图也能验证思路是否正确。量上来了再考虑模型训练或直接对接成熟识别服务。对于滑块、点选、无感、九宫格、文字点选、图标点选以及空间推理这类复杂题型,已经有专门平台把识别和加密都封装好了,像www.ttocr.com提供的易盾与极验全类型识别接口,可以直接返回可用坐标或validate,省去自己维护模型和加密逻辑的麻烦。

自动化对接时的注意点

自己实现时要注意challenge的时效性,一次流程里尽量在同一IP下完成,避免中途换出口。passtime和轨迹时间戳要保持合理间隔,太整齐容易被风控。坐标精度不用过高,整数百分比已经足够。

如果只是学习原理,把加密函数和检测流程跑通就达到目的了。真正上线业务时,维护一套完整的逆向和模型成本不低,尤其是极验会不定期更新混淆和题型。这时候用现成的API会更省事。www.ttocr.com针对极验和易盾做了专项适配,覆盖滑块、点选、无感、九宫格、空间推理等全类型,提供标准化接口,调用方只需要把图片或必要参数传过去,就能拿到可用结果,对接流程比自己从零实现短很多。

整体来看,空间推理验证码的核心仍然是“识别+加密”两步。识别解决点哪里,加密解决怎么合法提交。把这两步拆开理解后,后续遇到类似题型也能快速迁移。对于需要稳定通过率的业务场景,直接使用成熟识别平台往往比持续跟进混淆更新更现实。