Files
nanocode/personal-blog/content/posts/ai-agent-captcha-bypass-techniques.md
Ubuntu 32b43f85bd a
2026-07-03 16:58:28 +08:00

257 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "AI Agent 绕过图形验证码的技术思路——原理、方法与局限性"
author: "蔡贤明"
date: 2026-06-09
---
![AI Agent 绕过图形验证码](/tmp/captcha-cover.png)
> **声明:本文仅做技术原理与安全攻防研究分享,严禁用于非法爬取、恶意登录、违规攻击等违法行为。所有技术探讨应在遵守网站服务协议与《网络安全法》的前提下进行。**
---
## 写在前面
很多网站在异常登录或敏感操作时,要求用户完成图形验证——滑块拼图、旋转方向、数字运算、点选文字等。这些机制本质上是**人机区分(Turing Test)**,但随着 AI Agent 能力的提升,这些"图形验证"正在被逐一突破。
目前主流的 CAPTCHA 服务商包括 Google reCAPTCHA(v2/v3/Enterprise)、Cloudflare Turnstile、hCaptcha、GeeTest(极验)、阿里云滑块等。它们的**安全强度差异巨大**:有的纯前端校验(极易绕过),有的配合后端行为风控(较难突破),有的已是无感评分模式(reCAPTCHA v3 根本不展示验证码)。
下文按 **传统视觉方案、端内交互模拟、模型识别、旁路绕过、行为对抗** 五大类,逐一拆解技术思路。
---
## 一、AI Agent 运行环境——自动化基础设施
AI Agent 要操作验证码,一般依托**无头或仿真浏览器**(Playwright、Selenium、Puppeteer、CDP 直连),也可能运行在真实设备/真机上。常用强化工具包括:
| 工具/库 | 用途 |
|---------|------|
| Playwright + stealth 插件 | 浏览器自动化 + 隐藏自动化特征 |
| undetected-chromedriver | 绕过 Chrome 自动化检测 |
| Browser-Use / Agent-Browser | AI Agent 专用浏览器操作框架 |
| puppeteer-extra-plugin-stealth | 额外浏览器指纹伪装 |
| curl-impersonate / TLS 指纹模拟 | 绕过 TLS 层面的自动化检测 |
核心流程:**页面渲染 → 元素定位 → 截图获取验证码 → 坐标计算 → 键鼠事件模拟 → 结果提交**。
---
## 二、各类验证码对应的技术思路
### (一)滑块验证码(滑动缺口、拼图拼接)
分为三类:简易滑块、轨迹校验型、行为风控型。
**1. 基础图像识别 + 固定坐标滑动(简易滑块)**
流程:浏览器截图 → OpenCV 边缘检测 → 定位缺口与滑块起始位置 → 计算偏移距离 → 模拟鼠标按下→拖动→松开。
局限:只对**无轨迹校验、无速度校验**的低安全级滑块有效。
**2. 动态轨迹模拟(对抗轨迹风控)**
主流平台(极验、阿里云)会校验**速度曲线、加速度、停顿点、轨迹非线性**。
- **真人轨迹采样复现**:采集大量人类轨迹(坐标-时间序列),拟合后重放:分段变速、小幅抖动、中途停顿。
- **物理运动模型**:模拟人体手部惯性——先加速、匀速、减速,加入随机微小偏移。
- **分次短距调整**:将一次长滑动拆成多次小幅度调整,模拟人类"瞄一下再对准"的行为。
**3. 图像预处理 + 轻量模型**
针对缺口模糊、阴影、干扰线的滑块:先高斯去噪 → 轮廓提取 → 模板匹配或轻 CNN(如 MobileNet-SSD)直接输出目标坐标。
**4. 旁路 Hook 绕过(高阶非视觉方案)**
逆向前端 JS → 捕获滑块最终偏移量、校验 token、加密参数 → **直接构造合法参数提交,不执行鼠标滑动**。这是当前最稳定的绕过方式之一。
---
### (二)旋转/方向验证码
**1. 传统图像处理**
截图 → 霍夫变换/图像投影法计算偏转角度 → 调用旋转控件。
适用于规则化文字或图标(如"将图片转正")。
**2. 图像分类模型**
用 MobileNet / ResNet-18 轻量化版,输入图片直接输出**目标角度值**(回归任务)。大幅优于传统算法,且抗模糊、扭曲能力强。
**3. 交互模拟**
分次小幅旋转,避免一步到位(风控特征)。
---
### (三)数字运算 / 文字计算验证码
这是**技术最简单**的一类,OCR 方案完全成熟:
- **传统 OCR**:截图 → 降噪分割 → Tesseract 识别数字和运算符 → 自动计算填值。
- **AI OCR**:PP-OCR、CRNN 直接整行识别,无需分割,适配花体、粘连字符。
- **对抗干扰**:面对噪点、干扰线,先用图像掩码去噪再送入模型。
**补充说明**:这类验证码当前基本已被 AI 完全攻克。部分网站已放弃纯文字运算,转而使用"语义理解题"(如"点击图片中的红色车辆"),需要多模态模型才可解决。
---
### (四)点选类验证码(文字点选、图标点选、顺序点选)
"按顺序点击文字""点击相同图标""点击倒立文字"等。
**1. 目标检测方案(主流)**
YOLOv8 / DETR 等检测模型 → 定位所有文字/图标位置 → 识别内容 → 按题目要求排序坐标 → 模拟点击。
**2. 多模态模型(新兴方案)**
用 GPT-4o / Gemini Vision 等输入"截图 + 指令"直接输出点击坐标序列。无需训练,但延迟较高且成本大。
**3. 行为伪装**
两次点击间加随机时延,鼠标路径曲线化,模拟人类视线移动。
---
### (五)无感式验证码(reCAPTCHA v3 / Cloudflare Turnstile)
这类验证码**不展示任何图形界面**,完全基于用户行为打分。它的挑战在于:
**行为模式模仿是唯一方案**:
- 页面停留随机时长(5-30 秒)
- 模拟真实滚动路径(分段、变速、偶尔回滚)
- 鼠标轨迹曲线化(Bezier 曲线拟合)
- 随机的页面交互(悬停、划词、点击无关元素)
- 模拟多标签切换等真人浏览特征
**设备指纹与网络环境**:
- 使用真实浏览器指纹(Canvas、WebGL、AudioContext、字体等不暴露自动化特征)
- 接入动态代理池,避免单 IP 高频触发评分
- 避免 TLS 指纹异常(可用 curl-impersonate、ja3 模拟)
> **关键认知**:这是最接近"人机对抗终局"的形态——当验证码不再可见,AI Agent 的唯一方法就是**让自己看起来像人**。
---
### (六)音频验证码——语音替代通道
多数 CAPTCHA 提供"音频备用"选项(为视障用户设计),播放一段含干扰的语音数字/字母。
- **经典方案**:用 Whisper(OpenAI 语音模型)或 DeepSpeech 直接转录 → 填入答案。
- **特点**:音频干扰往往较弱,语音模型的准确率远高于图像 OCR。
- **启示**:这是一个经常被忽略的**低悬果实**——反而可能是当前 bypass 技术中最简单的入口。
---
## 三、通用高阶绕过方案(不依赖视觉识别)
### 1. 接口逆向 + 协议层直连(最稳定,难度最高)
验证码本质是 **前端展示 + 后端校验**,绕过前端即绕过验证码:
1. 抓 HTTPS 流量(浏览器 DevTools / mitmproxy)
2. 分析验证码请求、提交接口、加密参数(AES、RSA、自定义混淆)
3. 逆向 JS/wasm 加密逻辑 → **直接调用后端接口**
4. 部分平台验证码 Token 可复用或存在有效期漏洞
**适用场景**:长期稳定的高频操作(如爬虫、自动化测试)。
### 2. 代理池 + 指纹伪装(基础风控对抗)
- 动态代理轮换,避免单 IP 高频触发验证
- 环境伪装:UA、Canvas 指纹、WebGL、时区、语言、分辨率
- 关闭无头浏览器特征(`navigator.webdriver` 等)→ 使用 stealth 插件
### 3. 第三方打码平台对接(工程化最简方案)
流程:截取验证码图片 → 调用第三方打码 API → 接收答案 → 自动填入。
- 优点:零视觉开发,最快落地
- 缺点:有延迟、按量付费、服务可能下线、敏感场景不适用
### 4. 业务逻辑绕过(常被忽略的方向)
很多系统的**内部/管理 API 不经过验证码校验**,这是架构设计上的疏漏:
- 直接调用 `POST /api/login` 而非 `POST /api/login_with_captcha`
- 手机端 API 可能无验证码(网页端才有)
- 登录后获得的 Token/Session 后续所有操作均无需验证码
**这是性价比最高的绕过方式**——根本不用破解验证码本身。
### 5. Session 与 Token 复用
合法获取一次验证码后,在有效期内重复使用其 token。部分弱实现的验证码 token 可跨请求、跨页面复用。
---
## 四、AI Agent 特有的新兴攻击面
### 1. 强化学习 + 屏幕观察
不依赖传统图像识别,让 Agent 通过**屏幕截图→动作输出→奖励信号**的 RL 循环直接学习操作验证码。
- 框架:RL + Vision Encoder + Action Decoder
- 优势:端到端,无需手工设计图像管线
- 劣势:训练成本高、泛化到新验证码较慢
### 2. 多模态大模型直接推理
GPT-4o / Claude / Gemini 等具备视觉理解能力,可以:
> "截图看这里 → 这是一个滑块验证码,缺口在距左边 240 像素处 → 计算轨迹 → 模拟拖动"
这正在成为最"自然"的 AI Agent 破解方式——就像人看到验证码后思考、动手一样。
### 3. 上下文感知 + 自适应策略
Agent 可先识别验证码服务商(从页面特征/JS 指纹),自动加载对应策略模块——不同平台走不同方案,大幅提升整体成功率。
---
## 五、不同方案的技术对比
| 方案 | 开发难度 | 稳定性 | 反制难度 | 适用场景 |
|------|---------|--------|---------|---------|
| OpenCV 传统视觉 | ⭐ | ⭐ | ⭐ | 老旧简单验证码 |
| 轻量视觉模型(YOLO/PP-OCR) | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | 主流滑块、点选、计算 |
| 多模态大模型直推 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | 复杂验证码、低频率操作 |
| 轨迹/行为模拟 | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | 带行为校验的滑块 |
| 音频转录(Whisper) | ⭐⭐ | ⭐⭐⭐⭐ | ⭐ | 有音频备选的验证码 |
| 第三方打码平台 | ⭐ | ⭐⭐ | ⭐ | 快速开发、不想自研 |
| JS 逆向 + 接口直调 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 长期稳定、高频场景 |
| 业务逻辑绕过 | ⭐ | ⭐⭐⭐⭐⭐ | — | 发现漏洞时有效 |
| 强化学习端到端 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | 研究前沿 |
---
## 六、平台反制手段——矛与盾的博弈
了解防御才能更好理解攻击的边界:
1. **动态变形**:验证码样式/字体/字号实时变换,训练好的模型需要持续更新
2. **强行为风控**:轨迹、点击间隔、键鼠特征、设备指纹全链路检测
3. **图片动态加密与分片**:Canvas 实时绘制而非静态图片,无法直接截图
4. **深度学习行为模型**:用 Transformer/BERT 区分机器与真人操作特征
5. **接口签名实时变化**:密钥动态下发、Wasm 强混淆,提高逆向成本
6. **多因子叠加**:验证码 + 设备指纹 + 行为评分 + IP 信誉分联动
---
## 七、总结
AI Agent 绕过图形验证码的核心路线可归纳为三条:
1. **视觉路线**:图像处理 / AI 识别 → 解析验证码内容 → 模拟交互。最直观,但仍然需要对抗不断的变形与风控升级。
2. **工程路线**:对接第三方打码服务,或利用业务逻辑漏洞、Token 复用等手段。开发成本最低,但依赖外部条件。
3. **逆向路线**:破解前端加密,直调后端接口,**彻底绕过图形验证**。这是最高阶同时也最稳定的方式,但对攻防能力要求极高。
> **最后的思考**:随着 reCAPTCHA v3、Cloudflare Turnstile 等"无感验证"的普及,验证码正在从"图形挑战"转向"行为挑战"。未来的 AI Agent 不再需要"看懂"验证码,而需要"表现得像人"。这也许才是攻防博弈的真正终局形态。
---
*再次重申:本文所有内容仅供网络安全技术学习与学术研究参考,禁止用于任何违法活动。*