# Fingerprint Bypass

> 浏览器/客户端指纹分析与绕过方案（TLS/HTTP2/TCP/浏览器 4 层指纹检测与伪造）。基于 fingerprint-collector 项目的检测维度。 TRIGGER when: 用户提到反指纹、指纹检测、浏览器指纹、TLS指纹、JA3/JA4、HTTP2指纹、反爬虫检测、Cloudflare绕过、Akamai绕过、DataDome绕过、被风控了、请求被拦截、403/429错误、bot检测、headless检测。包括但不限于"为什么被检测了"、"怎么过风控"、"指纹怎么伪造"、"TLS指纹不对"、"请求被拦截怎么办"。 DO NOT TRIGGER when: 只是普通的 JS 加密逆向（用 find-crypto-entry）、或补环境（用 env-patch）。

- Skill: `zxzvsdcj/fingerprint-bypass` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add zxzvsdcj/fingerprint-bypass`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zxzvsdcj/fingerprint-bypass/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: zxzvsdcj (https://skillmd.com/u/zxzvsdcj)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/zxzvsdcj/fingerprint-bypass

---


# fingerprint-bypass

对 **$ARGUMENTS** 进行指纹分析与绕过方案设计。

**核心理念**: 反指纹系统检查 TLS、HTTP/2、TCP/IP、浏览器 API 四层指纹的**跨层一致性**。单层伪造容易，四层自洽难——这是大多数方案翻车的根因。

---

## 四层指纹体系

### Layer 1: TCP/IP 层

操作系统在 TCP 握手时暴露的特征，无法通过应用层伪造：

| 特征 | Windows | Linux | macOS |
|------|---------|-------|-------|
| TTL | 128 | 64 | 64 |
| TCP Timestamp | 无 | 有 | 有 |
| Window Size | 65535 | 29200 | 65535 |
| TCP Options 顺序 | MSS,NOP,WScale,NOP,NOP,SACK | MSS,SACK,Timestamp,NOP,WScale | MSS,NOP,WScale,NOP,NOP,Timestamp,SACK,EOL |

**关键**: TCP 层指纹由操作系统内核决定，应用层无法控制。UA 声称 Windows 但 TTL=64 → 立即矛盾。

### Layer 2: TLS 层

TLS ClientHello 中的指纹：

| 指纹类型 | 组成 | 用途 |
|----------|------|------|
| JA3 | cipher_suites + extensions + groups + ec_point_formats | 经典 TLS 指纹 |
| JA4 | 协议版本 + SNI + cipher 数量 + extension 数量 + ALPN | 新一代指纹 |

**Chrome 特征**:
- 含 GREASE 值（0x0a0a, 0x1a1a 等随机值）
- 扩展列表含 ECH (encrypted_client_hello)
- Chrome 116+ 扩展顺序随机化（JA3 不再稳定，JA4 更可靠）

**Node.js 特征**（暴露点）:
- 无 GREASE 值
- cipher suite 列表与浏览器不同
- 缺少 `application_settings` 等 Chrome 专有扩展

### Layer 3: HTTP/2 层

HTTP/2 连接建立时的 SETTINGS 帧参数：

| 参数 | Chrome | Firefox | Safari | Node.js(默认) |
|------|--------|---------|--------|-------------|
| HEADER_TABLE_SIZE | 65536 | 65536 | — | 4096 |
| INITIAL_WINDOW_SIZE | 6291456 | 131072 | — | 65535 |
| MAX_HEADER_LIST_SIZE | 262144 | — | — | — |
| WINDOW_UPDATE | 15663105 | 12517377 | 10420225 | 不发送 |
| 伪头顺序 | m,a,s,p | m,p,a,s | m,s,a,p | m,a,s,p |

**关键**: WINDOW_UPDATE 值是区分浏览器的最强信号，且几乎没有工具正确伪造。

### Layer 4: 浏览器 API 层

JavaScript 可访问的 API 暴露的信息：

| 类别 | 检测项 | 自动化工具常见问题 |
|------|--------|-----------------|
| 自动化检测 | `navigator.webdriver` | Selenium/Puppeteer 默认 `true` |
| 浏览器标识 | `window.chrome` | headless Chrome 缺少此对象 |
| Canvas | `toDataURL()` hash | headless 渲染结果不同 |
| WebGL | `WEBGL_debug_renderer_info` | SwiftShader / Mesa 暴露 headless |
| Audio | `AudioContext` 输出 | 不同硬件 LSB 不同 |
| 权限 | `Permissions.query()` | 自动化工具返回 `denied` |
| CDP 检测 | 错误堆栈中的 CDP 痕迹 | Puppeteer 会泄露 CDP 调用栈 |
| 插件 | `navigator.plugins` | headless 通常为空 |

---

## 分析流程

### Step 1: 识别检测系统

```
常见反指纹服务:
  Cloudflare → 检查 cf-ray header、Turnstile 验证
  Akamai → 检查 _abck cookie、sensor_data 请求
  DataDome → 检查 datadome cookie、interstitial 页面
  PerimeterX → 检查 _px cookie
  
判断方法:
  1. 查看 403/429 响应头中的特征
  2. 搜索页面 JS 中的特征字符串
  3. 分析 cookie 名称和 JS 请求模式
```

### Step 2: 采集当前指纹

如果可以部署 fingerprint-collector，用它做全面自测：

```bash
# 部署 fingerprint-collector
git clone https://github.com/zhizhuodemao/fingerprint-collector.git
cd fingerprint-collector && pip install -r requirements.txt
sudo ENABLE_TCP=1 python app.py

# 用你的工具/脚本访问 https://localhost:8443
# 查看 /api/analysis 获取检测报告
```

无法部署时，可以用公开测试站点：
- `tls.browserleaks.com` — TLS 指纹
- `browserleaks.com/canvas` — Canvas 指纹
- `browserleaks.com/webgl` — WebGL 指纹

### Step 3: 一致性诊断

对照以下矛盾检测表，排查不一致：

| 检查项 | 一致性规则 | 常见矛盾 |
|--------|----------|---------|
| UA ↔ TLS | UA 声称的浏览器与 JA3/JA4 匹配 | Node.js 的 TLS 指纹但 UA 写 Chrome |
| UA ↔ HTTP/2 | SETTINGS 参数与 UA 浏览器一致 | HTTP/2 用默认值，UA 写 Chrome |
| UA ↔ TCP | TTL 与 UA 声称的操作系统一致 | Linux 服务器（TTL=64）但 UA 写 Windows |
| WebGL ↔ UA | GPU renderer 与声称的平台一致 | SwiftShader（headless 标志） |
| 时区 ↔ IP | JS 时区与 IP 地理位置一致 | UTC+8 但 IP 在美国 |
| 语言 ↔ IP | navigator.languages 与 IP 区域一致 | 中文语言但美国 IP |

### Step 4: 制定绕过方案

根据诊断结果选择方案：

#### 场景 A: Python 请求被拦截

```
方案 1（推荐）: curl_cffi — 模拟真实浏览器 TLS + HTTP/2 指纹
  pip install curl_cffi
  from curl_cffi import requests
  r = requests.get(url, impersonate="chrome")
  
方案 2: tls_client — Go 实现的 TLS 指纹库
  pip install tls_client
  session = tls_client.Session(client_identifier="chrome_120")
  
方案 3: 自定义 TLS — 使用 PyOpenSSL + h2 精确控制
  需要手动设置 cipher suites、extensions、HTTP/2 SETTINGS
```

#### 场景 B: 自动化浏览器被检测

```
方案 1: Patchright（推荐） — Playwright 反检测分支
  js-reverse-mcp 已内置 Patchright 引擎
  
方案 2: undetected-chromedriver — Selenium 反检测
  pip install undetected-chromedriver
  
方案 3: Playwright + stealth 插件
  npm install playwright-extra puppeteer-extra-plugin-stealth
  
关键配置:
  - 使用持久化 user-data-dir（保持登录态 + cookie）
  - 不使用 headless 模式（或使用 new headless）
  - 注入 stealth 脚本消除自动化痕迹
```

#### 场景 C: Node.js 补环境被识别

```
参考 env-patch skill 的 references/fingerprint-consistency.md
重点: 
  - navigator.webdriver = false（正确的属性描述符）
  - window.chrome 对象完整性
  - Canvas/WebGL 返回有意义的值
  - AudioContext 行为正确
```

---

## 伪造工具对比

| 工具 | TLS | HTTP/2 | TCP | 浏览器API | 适用场景 |
|------|-----|--------|-----|----------|---------|
| curl_cffi | ✅ | ✅ | ❌ | ❌ | 纯 API 请求 |
| tls_client | ✅ | ✅ | ❌ | ❌ | 纯 API 请求 |
| Patchright | ✅ | ✅ | ❌ | ✅ | 需要执行 JS |
| undetected-chromedriver | ✅ | ✅ | ❌ | ✅ | Selenium 场景 |
| 真实浏览器 + 代理 | ✅ | ✅ | ✅ | ✅ | 最高拟真度 |

**TCP 层**: 除非运行在与 UA 声称一致的操作系统上，否则 TCP 层不可伪造。这是"终极检测"——如果目标做 TCP 层检测，必须使用对应 OS 的机器。

---

## 反模式

- **不要只改 User-Agent** — UA 是最容易检查也最没价值的指纹，改 UA 不改 TLS/HTTP2 等于自曝。
- **不要混用不同浏览器的特征** — Chrome 的 TLS + Firefox 的 HTTP/2 = 世界上不存在的客户端。
- **不要在 Linux 上声称 Windows** — TCP TTL 会暴露。
- **不要忽略 HTTP/2 WINDOW_UPDATE** — 这是最被忽视但最具区分度的指纹。
- **不要用 requests 库直接请求** — Python requests 的 TLS 指纹是独特的，任何检测系统都能识别。

---

## 完成标准

```
指纹绕过结果：
- 目标站点：$ARGUMENTS
- 检测系统：[Cloudflare | Akamai | DataDome | 其他]
- 矛盾维度：[TLS | HTTP/2 | TCP | 浏览器API | 跨层不一致]
- 绕过方案：[curl_cffi | Patchright | 其他]
- 验证结果：请求返回 200 + 正常业务数据（非验证码/拦截页）
```

---

## References

| 文件 | 何时读取 |
|------|---------|
| `references/tls-fingerprint.md` | 需要深入了解 JA3/JA4 指纹构造和伪造细节 |
| `references/http2-fingerprint.md` | 需要精确匹配 HTTP/2 SETTINGS 和 WINDOW_UPDATE |
| `references/browser-fingerprint.md` | 需要补全浏览器 API 层指纹（Canvas/WebGL/Audio 等） |

