Scarnox · Blog

AI 验证码识别器的工作原理:模型、token 与限制

AI 验证码识别器是一种利用机器学习模型代你回答验证码的软件。它最擅长处理答案可以从内容中读出来的挑战,例如扭曲的文字或图片网格。对于基于 token 的控件,模型的任务是生成一个网站服务器会接受的响应,这是另一类问题。本指南会分别说明这两种情况、AI 的局限在哪里,以及你从识别服务实际能拿到什么。

本指南介绍的是通用技术,不描述任何特定服务的内部实现。作为开发者,真正需要关心的是接口约定:你发送验证码的相关信息,然后拿回一个 token。

三类验证码

大多数验证码属于三类,AI 对每一类的处理方式各不相同。

内容挑战。 访客需要读取或识别某些内容:扭曲的字符、一组门牌号、网格中的交通信号灯、一个旋转的物体。正确答案就在图片或音频本身中。这是机器学习最擅长的领域。

行为评分。 可能根本没有可见的挑战。网站观察浏览器的行为,查看请求历史,并给访客打分。reCAPTCHA v3 就是这样工作的,它返回的是一个数字而不是谜题。模型无法直接“读出”答案,因为这里根本没有答案可读。问题在于这些信号看起来是否足够像人。

基于 token 的控件。 控件在页面中运行,完成自己的检查,并把一个 token 写入隐藏的表单字段。随后网站的后端会向服务提供方验证这个 token。PopularCaptcha 就是这样工作的,reCAPTCHA v2 和 Cloudflare Turnstile 也是如此。

模型如何处理内容挑战

对于扭曲文字,标准做法是光学字符识别(OCR)模型。卷积网络或基于 Transformer 的视觉模型读取图片,并输出一串字符。训练时使用大量已知答案的生成验证码,让模型学会常见的扭曲方式:变形、噪点线、字符重叠和背景纹理。

对于图片网格,任务是分类。模型逐个查看每个方块,判断其中是否包含题目要求的物体。难点在于物体被部分遮挡、位于方块边缘,或者含义模糊,比如一辆大部分已经移出画面的公交车。这类情况的准确率较低,好的识别器需要判断什么时候应该猜测,什么时候应该请求新一轮挑战。

音频挑战使用语音识别。模型转写音频片段,答案就是转写结果。背景噪音和刻意加入的干扰是主要难点。

旋转图片、滑动拼图之类的谜题挑战,需要另一种模型。模型从图片中估算角度或位置,然后生成与之匹配的拖动或点击动作。

模型如何处理评分与 token

行为评分和 token 控件通过读取页面来求解,难度更高。服务提供方自己的检查在访客的浏览器中运行,其输出取决于浏览器环境、输入事件的时间以及会话历史等信号。从外部看,识别器无法有效地看到分数或这些信号的细节。

在这类情况下,可行的做法是使用一个能返回网站所期望响应的识别器,它采用能生成有效 token 的流程。对你来说,重要的性质很简单:你会拿到一个 token 或一个错误,而 token 最终由网站来校验。

这就是 Scarnox API 设计成现在这个样子的原因。你发送任务类型、sitekey 和页面 URL,然后在 solution 字段中收到 token:

{"errorId": 0, "solution": {"token": "..."}, "cost": ...}

token 会被填入网站期望的表单字段,并且大约两分钟后过期。完整的请求方式请参阅验证码识别 API 指南。

AI 在哪里有用,在哪里失效

AI 识别器擅长的方面包括:

AI 较弱的方面包括:

还有一个任何模型都无法消除的实际限制:验证码是刻意设置的障碍,供应商会更新挑战。今天能用的识别器,下个月可能就失效了。因此你应当监控识别器的输出,而不是假定它会一直有效。

如何选择识别服务

有四个问题可以帮助你评估任何识别服务:

  1. 它目前支持哪些验证码类型,而不是只停留在路线图上?
  2. 识别失败会让你付出什么代价?如果失败也收费,重试就会变得昂贵。
  3. 遇到超时或响应缓慢时,它的表现如何?你的代码需要一个明确的错误才能据此处理。
  4. 验证码变化时,你需要改动多少代码?改动越少越好。

Scarnox 目前支持 PopularCaptcha(无代理,已上线)。其他类型即将支持,验证码类型指南说明了每种类型的状态。

下一步