Obscura Stealth 模式——指纹伪装、TLS 指纹与反检测原理
Obscura Stealth 模式的实现原理:8 个内置浏览器 Profile、wreq BoringSSL TLS 指纹伪装、Tracker 拦截、身份一致性配置。
亿牛云技术团队2026年7月3日4 分钟阅读
为什么自动化流量容易被检测
一个无头浏览器被检测出来,通常不是某一个特征暴露的,而是多个层面联合暴露:
- TLS 层:Go 或 Python 的 HTTP 库发送的 TLS ClientHello 与 Chrome 差异明显(密码套件顺序、ALPN 扩展、椭圆曲线)
- JS API 层:
navigator.webdriver为true、Function.prototype.toString返回非原生代码 - navigator 一致性:
userAgent是Mozilla/5.0...但platform是Linux、userAgentData缺失 - 行为模式:缺少对
canvas、audio、WebGL等指纹 API 的正常响应 - 网络关联:IP 地址来自数据中心段,与浏览器指纹的地理信息不匹配
Obscura Stealth 模式从架构层面解决了前四个问题。
8 个内置浏览器 Profile
Obscura 内置了 8 个浏览器 Profile,每个 Profile 包含 userAgent、platform、uaPlatform、uaPlatformVersion,三者完全一致:
| 索引 | 平台 | Chrome 版本 | userAgent |
|---|---|---|---|
| 0(默认) | Windows 10 | 143 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ... Chrome/143.0.0.0 Safari/537.36 |
| 1 | Windows 10 | 144 | 同上,Chrome 144 |
| 2 | macOS | 144 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 ... Chrome/144.0.0.0 Safari/537.36 |
| 3 | macOS | 145 | Chrome 145 |
| 4 | macOS | 146 | Chrome 146 |
默认使用 Profile 0(Windows Chrome 143)。环境变量控制 Profile 选择:
# 锁定到特定 Profile
OBSCURA_PROFILE=2 obscura serve
# 随机轮换(每个浏览器上下文一个随机 Profile)
OBSCURA_ROTATE_PROFILE=1 obscura serve
```bash
> 轮换身份本身也是一种信号——真实设备不会频繁变换指纹。默认不开启轮换。
## TLS 指纹伪装
这是 Stealth 模式的核心能力。Obscura 通过 **wreq** crate 使用 **BoringSSL**(Google 维护的 OpenSSL 分支),配置与真实 Chrome 一致的:
- 密码套件顺序
- TLS 版本偏好
- ALPN 协议列表
- 椭圆曲线选择
```bash
# Stealth 模式依赖 wreq + BoringSSL,编译需要 cmake
cargo build --release --features stealth
# 启用后,TLS ClientHello 与真实 Chrome 一致
obscura fetch https://example.16yun.cn --stealth
```bash
非 Stealth 模式下使用 `rustls`,不需要 cmake 或 OpenSSL。
编译时注意:wreq 的 `prefix-symbols` 功能仅在 Linux 和 Android 上正确重命名 BoringSSL 导出符号,macOS 上使用不带 prefix-symbols 的配置。
## JS API 层伪装
Stealth 模式在 V8 层做了以下伪装:
**navigator.webdriver 隐藏**
```javascript
// 非 stealth:暴露自动化标志
navigator.webdriver // true
// stealth:与真实 Chrome 一致
navigator.webdriver // undefined
```bash
**Function.prototype.toString 伪装**
```javascript
// 非 stealth:toString 暴露代码内容
navigator.webdriver.toString() // "function webdriver() { [native code] }" 或自定义
// stealth:返回标准原生标记
Function.prototype.toString.call(navigator.webdriver) // "function () { [native code] }"
```bash
**event.isTrusted**
Stealth 模式下分发的合成事件 `event.isTrusted = true`,不会被页面脚本识别为自动化事件。
**Object.keys(window) 安全**
隐藏的内部属性不会暴露在 `Object.keys(window)` 的返回结果中。
## Tracker 拦截
Stealth 模式内置了 **Peter Lowe 的广告与跟踪器域名列表**,包含 3500+ 个域名。请求在离开发送前就在 net 层被拦截:
```bash
# Stealth 模式自动拦截以下类型的请求
# - 分析统计(Google Analytics、Mixpanel、Hotjar)
# - 广告网络(DoubleClick、Criteo、Adnxs)
# - 社交追踪(Facebook.net)
# - 指纹采集脚本
```bash
拦截实现在 `obscura-net/src/blocklist.rs`,使用 Peter Lowe 的 `pgl_domains.txt`。支持的匹配模式:
- **精确匹配**:`google-analytics.com`
- **子域名通配**:`www.google-analytics.com`、`ssl.google-analytics.com`
## 身份一致性配置
光有 JS 层伪装不够。timezone、geolocation 和 proxy 地区必须一致。
```bash
# 完整反检测配置示例
OBSCURA_TIMEZONE=America/New_York \
OBSCURA_GEOLOCATION="40.7128,-74.0060" \
OBSCURA_PROFILE=2 \
obscura serve --stealth --proxy http://user:pass@proxy.16yun.cn:8888
```bash
**OBSCURA_TIMEZONE**:默认 `Europe/Berlin`。设置后影响 `Date.getTimezoneOffset`、`Intl.DateTimeFormat` 和时区相关 API。
**OBSCURA_GEOLOCATION**:配置 `navigator.geolocation` 返回的坐标,格式 `lat,lon`。
**Profile / Timezone / Proxy 三者一致**:如果你通过代理出口到纽约,Profile 应该为 macOS(常见于北美商业用户),时区为 `America/New_York`,地理位置为 `40.7128,-74.0060`。任何互相矛盾都会成为被检测的信号。
## Stealth 的局限性
Stealth 不处理以下场景:
- **Cloudflare 交互式挑战**(Turnstile、JS Challenge、CAPTCHA)
- **Datadome 和 Akamai 主动 Bot 管理器**
- **任何 CAPTCHA 系统**
- **基于 IP 地址的速率限制**(需要搭配代理)
对于这些场景,Stealth 需要和住宅代理、指纹浏览器等外部工具配合使用。
## 组合的最佳实践
```bash
# 生产级反检测配置
OBSCURA_TIMEZONE=Asia/Shanghai \
OBSCURA_GEOLOCATION="31.2304,121.4737" \
OBSCURA_PROFILE=0 \
obscura serve \
--stealth \
--proxy http://user:pass@proxy.16yun.cn:8888 \
--port 9222
```bash
## 总结
Obscura Stealth 从四个层面构建反检测能力:
1. **TLS 层**:BoringSSL wreq 客户端,指纹与 Chrome 一致
2. **Profile 层**:8 个内置 Profile,navigator 属性一致
3. **JS API 层**:webdriver 隐藏、native code 伪装、event.isTrusted
4. **网络层**:3500+ 域名 Tracker 拦截,在请求离开前阻断
它不是万能的反检测方案,但对于绝大多数基于 JS 特征检测和 TLS 指纹识别的防护系统,Stealth 模式足以绕过。需要企业代理方案?
我们可根据目标站点、并发规模与稳定性目标提供定制方案。