指纹伪装:50+ 维度的浏览器身份模拟
为什么需要伪装
Web 世界里有大量的「指纹识别」机制——网站通过检测浏览器的 User-Agent、屏幕尺寸、时区、硬件并发数、TLS ClientHello 等信息,来判断你是谁、用什么浏览器、来自什么设备。
这些检测被用于:
- 反爬虫:检测到非 Chrome/Firefox/Edge 的环境后拦截访问或降低访问频率
- 差异化内容:不同 UA 返回不同版本的页面
- 追踪:跨网站追踪你的访问行为
- 风控:某些金融/电商场景会根据指纹做额外验证
WebToApp 的伪装覆盖
浏览器指纹(约 28 维)
| 维度 | 伪装能力 |
|---|---|
| User-Agent | 多版本 Chrome / Firefox / Safari / Edge 可选 |
| 屏幕宽度 / 高度 | 任意值 |
| 设备像素比(DPR) | 任意值 |
| 视口宽度 / 高度 | 任意值 |
| 语言 | 任意语言代码 |
| 时区 | 任意时区 |
| Platform | Win32 / MacIntel / Linux x86_64 / Android / iPhone |
| HardwareConcurrency | 1-64 核可选 |
| DeviceMemory | 1-32 GB 可选 |
| Canvas 指纹 | 可注入噪点 |
| WebGL 指纹 | 可伪装 GPU 厂商和型号 |
| AudioContext 指纹 | 可注入噪点 |
| Battery API | 可伪造电量和充电状态 |
| 更多 | 约 15 个 API 级别的伪装 |
网络指纹(TLS)
- TLS ClientHello:加密套件排序、TLS 版本支持、扩展列表——这是很多反爬系统的第一道检查
- HTTP/2 指纹:SETTINGS、SETTINGS_PRIORITY、WINDOW_UPDATE、PING 等帧的默认值
- 加密客户端 Hello(ECH):隐藏真实 SNI(Server Name Indication),防止中间路由设备识别目标域名
DNS / 代理
- DNS-over-HTTPS:隐藏 DNS 查询
- 应用级代理:可以指定 HTTP 或 SOCKS5 代理出口
- CORS 绕过:某些受限 SPA 的跨域问题
伪装的局限性
- WebView 内核级别的一些指纹无法伪装:比如 Chrome 的某些内部 API 会暴露真实内核版本
- 高级反作弊系统可能检测到多个指纹之间的矛盾:比如伪装成 iPhone 但同时声明 HardwareConcurrency: 8(iPhone A 系列芯片有不同的核数模式)
- 指纹伪装是对抗而非消除:网站可以选择在检测到异常指纹时降级服务而非完全拦截
- GeckoView 内核下部分伪装不生效:完整的伪装能力依赖系统 WebView
配置方式
在应用的通用配置 → 隐私卡片里:
- 打开「指纹伪装」
- 选择预设(Chrome/Win11、Safari/macOS14、Firefox/Linux 等),或手动调整每个维度
- 可以单独开启 Canvas / WebGL / AudioContext 的噪点注入
- 保存后预览,看目标网站是否还能检测到你的真实环境
- 重新构建 APK(伪装配置编译进 APK)
一个实用例子
场景:某个电商网站对 WebView 环境有更严格的风控,经常要求额外验证或降低页面质量。
步骤:
- 创建网页型应用,输入目标 URL
- 通用配置 → 隐私 → 指纹伪装
- 选 Chrome 最新版 + Windows 11 预设
- 打开 Canvas 噪点
- 保存配置,预览——如果网站不再做额外验证了,就说明伪装生效
- 重新构建 APK,分发出去