257 lines
12 KiB
Markdown
257 lines
12 KiB
Markdown
---
|
||
title: "AI Agent 绕过图形验证码的技术思路——原理、方法与局限性"
|
||
author: "蔡贤明"
|
||
date: 2026-06-09
|
||
---
|
||
|
||

|
||
|
||
> **声明:本文仅做技术原理与安全攻防研究分享,严禁用于非法爬取、恶意登录、违规攻击等违法行为。所有技术探讨应在遵守网站服务协议与《网络安全法》的前提下进行。**
|
||
|
||
---
|
||
|
||
## 写在前面
|
||
|
||
很多网站在异常登录或敏感操作时,要求用户完成图形验证——滑块拼图、旋转方向、数字运算、点选文字等。这些机制本质上是**人机区分(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 不再需要"看懂"验证码,而需要"表现得像人"。这也许才是攻防博弈的真正终局形态。
|
||
|
||
---
|
||
|
||
*再次重申:本文所有内容仅供网络安全技术学习与学术研究参考,禁止用于任何违法活动。*
|