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.webdrivertrueFunction.prototype.toString 返回非原生代码
  • navigator 一致性userAgentMozilla/5.0...platformLinuxuserAgentData 缺失
  • 行为模式:缺少对 canvasaudioWebGL 等指纹 API 的正常响应
  • 网络关联:IP 地址来自数据中心段,与浏览器指纹的地理信息不匹配

Obscura Stealth 模式从架构层面解决了前四个问题。

8 个内置浏览器 Profile

Obscura 内置了 8 个浏览器 Profile,每个 Profile 包含 userAgentplatformuaPlatformuaPlatformVersion,三者完全一致:

索引平台Chrome 版本userAgent
0(默认)Windows 10143Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ... Chrome/143.0.0.0 Safari/537.36
1Windows 10144同上,Chrome 144
2macOS144Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 ... Chrome/144.0.0.0 Safari/537.36
3macOS145Chrome 145
4macOS146Chrome 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 模式足以绕过。

需要企业代理方案?

我们可根据目标站点、并发规模与稳定性目标提供定制方案。