验证码的底层逻辑已经换代了。今天主流的验证码系统,判断你是不是人,不靠你答得对不对,而是靠你怎么操作。那个“我不是机器人”的复选框,真正的验证在你移动鼠标准备点击的那一刻就开始了。

这篇文章从检测方的视角拆解行为验证码的分析维度,再从工程实现的角度讨论如何构建拟真轨迹。内容偏技术原理,不涉及具体平台绕过。


一、验证码的分析维度

现代行为验证码系统以每秒数十次的频率采样鼠标坐标、按键间隔、滚动速度,甚至触控压力,通过机器学习模型计算出一个“人类概率评分”。评分低于阈值时,弹出拼图或点选等进阶验证。

在所有行为特征中,鼠标轨迹的权重最高。原因在于人类的运动控制系统有固有的生物力学特征,这些特征深入神经反射层面,很难被算法完美复刻。

具体来说,检测系统至少在五个维度上分析轨迹。

1. 速度剖面

机器移动鼠标最容易暴露的特征是匀速直线运动。真人的鼠标移动遵循钟形速度曲线:启动时加速,中段达到峰值速度,接近目标时减速。这一规律在人机交互领域被称为菲茨定律(Fitts's Law),移动时间与距离的对数成正比,与目标大小成反比。

更底层的解释是“最小加加速度模型”(Minimum Jerk Model):神经系统会本能地优化运动轨迹,使加加速度的变化最小化。这意味着速度变化是平滑过渡的,不会出现突兀的匀速或突变。

2. 轨迹形态

由于手腕的生理结构,大多数右利手用户的鼠标轨迹会呈现自然弧度——横向移动时偏向圆弧,纵向移动时相对平直。这是因为指尖以手腕为支点做圆周运动,而不是真正的平移。

检测系统甚至能通过轨迹的弯曲方向,推测操作者是左利手还是右利手。脚本生成的轨迹要么是完美直线,要么是过于规整的贝塞尔曲线,缺乏人类特有的随机偏差。

3. 微抖动

即使手很稳,鼠标也在以8-12Hz的频率做1-3像素的微小振动。这是肌肉的生理性震颤,由运动神经元的脉冲发放节律决定,无法通过意志消除。

机器鼠标要么完全没有抖动(像素级精准),要么叠加了错误频率的随机噪声。真实的人类抖动不是均匀的白噪声,而是速度越快、抖动幅度越小;速度越慢、抖动越明显。

4. 过冲与修正

快速移动到小目标时,人类几乎一定会冲过目标3-5像素,然后再小幅回退修正。这是大脑运动皮层预测机制的固有误差——先做弹道式运动,再用视觉反馈微调。

这种“冲过头再拉回来”的模式权重很高。很多模拟脚本只做到了“到达目标”,却忽略了这个收尾动作。有没有过冲、过冲多少、修正速度多快,构成了每个人独特的运动签名。

5. 时间结构

真人操作还有几个关键时间特征:

  • 页面加载后不会立即操作,通常有数百毫秒的认知等待

  • 按下鼠标前有100-300ms的短暂停顿确认

  • 长距离移动中可能出现极短暂的减速或停顿

  • 点击完成后鼠标会自然移开,而不是停在原地

机器脚本往往“秒操作”——元素一出现就立刻点击,没有任何思考和犹豫的时间差。


二、轨迹模拟的工程实现

了解了检测原理,可以从底层构建拟真轨迹。这不是加个随机数就能解决的问题,需要一套生物力学模型。

基础方案:贝塞尔曲线加速度映射

最常用的入门方法是用三次贝塞尔曲线生成路径骨架,再用非线性时间映射实现变速效果。

具体步骤:

  1. 在起点和终点之间设置两个控制点,控制点偏移量与移动距离成正比,生成自然弯曲路径

  2. 将总时长按高斯分布分配到每个采样点,实现“两头慢、中间快”的速度剖面

  3. 每隔10-20毫秒采样一个坐标点,模拟浏览器事件的触发频率

这只能骗过最基础的检测。要达到高拟真度,还需要叠加更多细节。

进阶方案:多层噪声叠加

真实轨迹是“确定性路径加多层随机扰动”的叠加:

  • 路径级扰动:整体轨迹的弯曲度随机变化,每次移动曲率不同

  • 速度级扰动:峰值速度在一定范围内波动

  • 像素级抖动:每个采样点叠加高斯噪声,抖动幅度与当前速度成反比

  • 生理震颤:叠加8-12Hz的低频正弦分量

关键在于随机性不能是均匀的。速度快时抖动小,速度慢时抖动大;接近目标时修正多,远离目标时修正少。这种“有条件的随机”才是人类的本质。

高级方案:过冲与修正

在距离终点还有总路程5%-8%的位置,插入一个过冲点,使坐标略微超过目标,然后再用更慢的速度回退到准确位置。

参数建议:

  • 过冲距离:3-8像素,与移动速度正相关

  • 过冲后的修正速度:约为峰值速度的三分之一

  • 修正次数:1-2次

这段轨迹虽然只占很小比例,但在检测模型中的权重很高。

顶级方案:扩散模型生成

最新的研究开始用AI生成鼠标轨迹。比如DMTG模型使用熵控扩散网络,学习真实人类轨迹的分布特征,生成的轨迹在曲率、速度、抖动等多个维度上接近真人水平。但这种方法需要大量真实数据训练,成本较高,主要用于专业对抗场景。


三、滑块验证码的专属检测点

滑块验证码是行为检测的重灾区,除了通用轨迹特征,还有几个专属检测点。

第一,不要一上来就拖。 真人会先把鼠标移到滑块按钮上,悬停片刻,按住,再拖动。很多脚本直接从当前位置拖到目标位置,省掉了“移动到滑块”这一步。

第二,拖动不是匀速的。 真人拖动滑块的典型模式是:启动稍慢,中段平稳加速,接近缺口时减速微调。速度曲线同样是钟形的。

第三,释放位置不必绝对精准。 真人对齐缺口时,可能偏差±1像素,甚至松开后还有轻微回弹。这种“不完美”反而更像人。

第四,拖动过程中可以有微小上下波动。 人手拖动时很难保持绝对水平,Y轴通常有±2像素的起伏。完全水平的直线拖动反而可疑。


四、轨迹只是其中一部分

鼠标轨迹只是行为验证的一个维度。即使轨迹模拟得天衣无缝,其他维度的异常依然会暴露。

完整的拟人化还需要考虑:

浏览器指纹一致性。 WebGL、Canvas、字体列表、屏幕分辨率等都要符合真实设备特征。如果轨迹是Windows的,但指纹暴露的是Linux无头浏览器,前功尽弃。

操作节奏合理性。 两次验证之间的间隔、页面停留时间、滚动深度都要符合正常用户行为。秒进秒出、没有任何浏览动作,本身就是异常信号。

错误率自然。 真人偶尔会验证失败,会重试,而不是100%一次通过。永远一次过反而可疑。

网络环境匹配。 IP属地、请求频率、TLS指纹都要在合理范围内。数据中心IP配合完美的真人轨迹,综合评分依然会很低。

现代风控系统是综合打分制,鼠标轨迹占比虽高,但不是全部。任何一个维度的异常都可能拉低整体评分。


五、攻防的演进方向

从本质上看,鼠标轨迹模拟是生物力学与机器学习之间的持续对抗。验证码系统在积累更多真人数据、优化检测模型;模拟技术也在引入更精细的生理模型,逼近人类行为的极限。

这场对抗正在向更深层演进。当鼠标轨迹越来越难分辨时,检测方开始转向更底层的信号,比如操作系统层面的输入时序、硬件中断间隔,甚至触控屏的压力分布。而模拟方也在从软件模拟走向硬件模拟,用单片机控制真实的鼠标硬件。

对于大多数工程场景而言,理解上述核心原则已经足以构建出能通过常规检测的拟真轨迹。但需要明确的是,大多数检测系统的目标不是找出所有机器人,而是把“不够像人”的机器人挡在外面。这个目标的设定,本身就决定了攻防的边界和成本结构。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐