研究 Arkose Labs v4.2.2 的反爬机制, 以 Adobe 注册接口作为样本.
纯协议实现: Cloak Chromium 单点发 gt2, Python curl_cffi 跑剩下全部流程.
- ✅ 纯协议 完整 register flow (
/accountsblob → Arkose → /accounts 提交 token) - ✅ Arkose Labs v4.2.2 完整 bypass:
- BDA
c字段 (9 顶层 + enhanced_fp 90 项) 生成 + 加密 - PoW (SHA512 hashcash + UTF16LE) GPU 暴破 (CUDA, 单 round 0.5-1s)
- gfct (page.evaluate fetch 在 Cloak chromium 内, JA3 真值)
- selfsolve (本地 CLIP/DINOv2 + ONNX 模型分类, 不依赖第三方 captcha 服务)
- BDA
- ✅ TLS / Fingerprint 三件套:
- WebRTC IP per-slot fake (
--fingerprint-webrtc-ip) - locale/timezone/UA 按 slot 多元化
- curl_cffi impersonate 跨号 5 版 chrome (chrome146/145/142/136/133a)
- WebRTC IP per-slot fake (
- ✅ FE/enhanced_fp 内部一致性 修复 (ife_hash 重算 MMH3 seed=38)
- ✅ sing-box 代理池, 滚动热窗口 (lazy 模式), IP 信誉 cooldown
- ✅ Cloudflare Workers freemail 收码 (自建)
- ✅ 本地解题 (selfsolve): claw_machine + icon_segments + orbit_match_game 三大题型
┌─────────────────────────────────────────────────────────────┐
│ example.py / register.py (主入口) │
└──────────┬──────────────────────────────────────────────────┘
│
▼
┌────────────┐ ┌─────────────┐ ┌──────────────┐
│ proxy_pool │ │ akamai_warm │ │ mail.py │
│ sing-box │ │ ak_bmsc/sv │ │ freemail API │
└────────────┘ └─────────────┘ └──────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ register.py Adobe 注册流水线 (curl_cffi 纯 HTTP) │
│ ┌────────────┐ ┌────────────┐ ┌────────────────┐ │
│ │ /passkey │ │/bfp_capture│ │ /signin/v2/ │ │
│ │ /passwords │ │ 拿 genuine │ │ accounts blob │ │
│ └────────────┘ └────────────┘ └────────┬───────┘ │
└──────────────────────────────────────────┼───────────┘
│
▼ blob
┌─────────────────────────────────────────────────────┐
│ arkose 流水线 │
│ ┌──────────────────────────────────────────────┐ │
│ │ bda_gen.py BDA c 字段生成 (MMH3 + 加密) │ │
│ └──────────────────────────────────────────────┘ │
│ ┌─────────────────┐ ┌────────────────────────┐ │
│ │ cloak_pool.py │ │ arkose_pow.py │ │
│ │ Cloak Chromium │ │ Node + GPU SHA512 │ │
│ │ page.evaluate │ │ hashcash 暴破 │ │
│ │ gt2 → token+ │ │ │ │
│ │ ARID │ │ │ │
│ └─────────────────┘ └────────────────────────┘ │
│ ┌──────────────────────────────────────────────┐ │
│ │ arkose_enforce.py gfct → game_data │ │
│ └──────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────┐ │
│ │ selfsolve.py 解题 (本地模型) → token │ │
│ │ ├── claw_solver.py (CLIP+DINOv2 ensemble) │ │
│ │ ├── icon_seg_solver.py (ONNX YOLO) │ │
│ │ └── orbit_match.py (ONNX CNN) │ │
│ └──────────────────────────────────────────────┘ │
└──────────────────────┬───────────────────────────────┘
│
▼ token
┌─────────────────────────────────────────────────────┐
│ /signin/v2/accounts POST X-Ims-Captcha-Token │
│ → 200 userId → 收码 MFA → 拿 session cookie │
└─────────────────────────────────────────────────────┘
pip install -r requirements.txtrequirements.txt 内容见 requirements.txt.
PoW 用 Node + CUDA 暴破 SHA512, 单 round 0.5-1s. 不装 Node 会回退到 Python 实现 (慢 15-20x).
# 安装 Node 20+
npm installpackage.json 依赖:
tsl-create-server(无), 实际用 node:http + crypto- 直接 require 'crypto' / 'http', 不需要 npm 包
- PoW SHA512 GPU 暴破依赖 CUDA, 用
cuda.runtime在 Node 调 - claw/icon_segments 模型用 PyTorch CUDA 推理
- 显存需求: ~2GB (DINOv2 ViT-S/14 + ONNX 模型)
pip install cloakbrowser
playwright install chromiumCloakBrowser 是 patched chromium fork, 提供 --fingerprint-webrtc-ip, --fingerprint-timezone, --fingerprint-locale 等指纹 spoof flags. 主页: https://cloakbrowser.dev
# Windows 下载 binary 放到 ./sing-box.exe
# Linux: pacman -S sing-box / brew install sing-boxsub.txt 放节点订阅 (vless://, vmess://, trojan://, shadowsocks://, hysteria2://, anytls://).
如果用自家域名收 Adobe MFA 邮件:
- Cloudflare 加自有域名 (例如
myadobe.com) - Email Routing → catch-all → Worker
- 部署 Worker (代码见 docs/freemail-worker.md)
- 配
.env:WORKER_DOMAIN=freemail.yoursubdomain.workers.dev FREEMAIL_TOKEN=your_workers_api_token MAIL_DOMAIN=myadobe.com
不用自建可换 catchmail 或类似公共接码 (有失效风险).
放到 data/models/:
claw_match_head_v3.pth— claw_machine 解题 head (HeadV2, ViT-S/14)icon_segments_v2.onnx— icon_segments YOLO 检测orbit_match_game.onnx— orbit_match_game CNN 分类
下载链接见 docs/models.md (或自训, 见 training/ 目录).
python gui/adobe_register_gui.py # 批量注册
python gui/adobe_login_gui.py # 铸 session (可选, 跑账号密码登录拿 cookie)GUI 包含完整 ProxyPool (sing-box 集成) / session 池 / 进度条 / 失败补单 / 统计面板. 适合本地小规模 (< 200 worker) 交互式调试.
详见 gui/README.md.
python examples/single_register.py代码:
import os
from core.register import register_account
os.environ["WORKER_DOMAIN"] = "freemail.xxx.workers.dev"
os.environ["FREEMAIL_TOKEN"] = "xxx"
os.environ["EMAIL_DOMAIN"] = "myadobe.com"
result = register_account(
proxy_url="http://127.0.0.1:20001", # sing-box 本地代理
)
print(result)
# {"success": True, "email": "abc@myadobe.com", "password": "Aa1!...", "user_id": "...", "cookie": "..."}python examples/batch_register.py --count 100 --threads 30 --sub sub.txtopen_source/
├── README.md # 本文档
├── requirements.txt # Python 依赖
├── package.json # Node.js 依赖 (PoW)
├── .env.example # 环境变量示例
├── sub.txt.example # sing-box 订阅示例
├── LICENSE # MIT
│
├── core/ # 库形式 (供 examples / 外部项目 import)
│ ├── __init__.py
│ ├── bda_gen.py # BDA c 字段生成 (MMH3 + AES 加密) [70KB]
│ ├── register.py # Adobe 注册主流程 (纯 HTTP) [59KB]
│ ├── arkose_enforce.py # gfct, dapib [21KB]
│ ├── arkose_pow.py # PoW (调 Node pow_server.js) [28KB]
│ ├── pow_server.js # Node + CUDA SHA512 hashcash GPU 暴破
│ ├── cloak_pool.py # Cloak Chromium 池 (gt2 token) [37KB]
│ ├── claw_solver.py # claw_machine 本地解题 [11KB]
│ ├── selfsolve.py # 解题入口 (路由 + YesCaptcha fallback)
│ ├── akamai_warmup.py # Akamai bm_sv / ak_bmsc 暖场
│ ├── proxy_pool.py # sing-box 池接口 + 文档
│ └── mail.py # Cloudflare Workers freemail API
│
├── gui/ # Tkinter GUI
│ ├── adobe_register_gui.py [225 KB, 4328 行] — 批量注册主 GUI
│ ├── adobe_login_gui.py [155 KB, 3160 行] — 铸 session, 含 _arkose_selfsolve 模块 (被 register_gui import)
│ └── README.md # GUI 用法 + import 链
│
├── 别名 .py (根目录, 给 GUI 用)
│ ├── register_pure_http.py → from core.register import *
│ ├── bda_gen_python.py → from core.bda_gen import *
│ ├── _arkose_enforcement_http.py → ...
│ ├── _arkose_pow_node.py → ...
│ ├── _cloak_gt2_pool.py → ...
│ ├── _akamai_warmup_python.py → ...
│ └── claw_machine_solver.py → ...
│
├── data/
│ ├── real_plaintext_template.json # BDA 真实捕获模板
│ ├── pwgt2_bda_template.json
│ ├── _marketing_consent_text.py # Adobe 营销条款 HTML
│ ├── gpu_profiles/ # 102 套 GPU profile (v6 多元化用)
│ └── models/
│ └── claw_match_head_v3.pth # claw 解题 HeadV2 (val 90.8%)
│
├── examples/
│ ├── single_register.py # 单号 demo (~3 KB)
│ └── batch_register.py # 批量并发 CLI
│
└── docs/
├── arkose-bypass.md # BDA / PoW / selfsolve 算法细节
├── freemail-worker.md # Cloudflare Workers 完整部署 (含 worker.js)
├── models.md # 模型训练 + 自训说明
└── faq.md # 常见问题
Arkose api.js 在 BDA 加密前算 ife_hash = MMH3_x64_128(fe.join(", "), seed=38). 服务端独立重算对比, fe 字段任何 mismatch 立刻识破. 修复见 bda_gen.py:_realign_fe_and_rehash().
BDA lfasdgs 字段 (session UUID) 跟 HTTP ark-build-id header 必须用同一个值. 之前误判 random 化 → "client tamper" → DENIED. 见 bda_gen.py:build_from_template_diversified().
--fingerprint-webrtc-ip=auto 防 WebRTC STUN 暴露真公网 IP. CloakBrowser 自带 patch. 见 cloak_pool.py:_fake_public_ip_from_seed().
Arkose pows/check 用 SHA512 hashcash 验证, 我们用 CUDA 在 Node 内暴破 nonce. 100 并发 ~150-200 号/分, 单 round 0.5-1s vs CPU 16.6s. 见 pow_server.js.
历史 BDA template 里 fe.S=1920,1080 跟 enhanced_fp.window_inner=2880,1620 物理矛盾 (viewport > screen). 现在动态对齐 + 重算 ife_hash. 见 bda_gen.py.
Adobe 服务端按 disposable email 域名累积黑名单, 一个域名跑几千号就被 flag. 建议多域名轮转 (3-5 个 Cloudflare 域名).
- claw_machine: CLIP ViT-B-32 + DINOv2 ViT-S/14 + 自训 HeadV2, val_acc 90.8% / 实测生产 77.8%
- icon_segments: ONNX YOLO detection (2000×400 / 10 格)
- orbit_match_game: ONNX CNN
- 全本地, 0 第三方 captcha 服务费用
本项目仅用于:
- 学习 web 安全 + 反爬虫机制
- 研究 Arkose Labs / Akamai Bot Manager 内部
- 测试自家系统反 spam 能力
- 计算机视觉训练 (本地解题模型)
禁止用途:
- 商业 spam / 滥用 Adobe 资源
- 倒卖 Adobe 账号
- 干扰 Adobe 正常运营
使用者承担一切法律责任. 作者不对使用后果负责.
MIT — see LICENSE.
- CloakBrowser — Patched Chromium fork
- curl_cffi — Chrome JA3 impersonate
- sing-box — Proxy multiplexer
- DINOv2 — Self-supervised ViT
- OpenCLIP — CLIP implementation
- Arkose Labs — The challenge we're studying