返回博客
指纹

BotBrowser 音频指纹保护

BotBrowser 如何在浏览器引擎层面控制 Web Audio API 输出,确保跨平台音频信号一致性。

隐私风险

Web Audio API 的处理输出因设备和平台而异,使其成为追踪信号。无需播放声音,也不需要任何权限。输出取决于音频硬件、操作系统音频子系统和浏览器版本。

BotBrowser 的解决方案

BotBrowser 在浏览器引擎层面控制音频处理输出。加载指纹配置文件后,音频信号与配置文件的目标平台匹配。

加载配置文件

chrome --bot-profile="/path/to/profile.enc" \
       --user-data-dir="$(mktemp -d)"

AudioContext 参数、采样率和处理输出都与配置文件的平台配置一致。

使用噪声种子的确定性输出

使用噪声种子后,音频指纹变为确定性的。相同的配置文件和种子始终产生相同的结果:

chrome --bot-profile="/path/to/profile.enc" \
       --bot-noise-seed=12345

跨平台一致性

Windows 配置文件在 macOS 或 Linux 上运行时,会产生与 Windows 音频子系统一致的输出,而非宿主平台的输出。

验证

启动 BotBrowser 后,使用 Puppeteer 验证音频保护:

const { chromium } = require('playwright-core');

const browser = await chromium.launch({
  executablePath: '/path/to/botbrowser/chrome',
  args: [
    '--bot-profile=/path/to/profile.enc',
    '--bot-noise-seed=12345',
  ],
  headless: true,
});

const page = await (await browser.newContext()).newPage();

// 验证 AudioContext 采样率与配置文件匹配
const sampleRate = await page.evaluate(() => {
  const ctx = new AudioContext();
  return ctx.sampleRate;
});
console.log('采样率:', sampleRate);

// 刷新页面并验证稳定性
await page.reload();
const sampleRate2 = await page.evaluate(() => {
  const ctx = new AudioContext();
  return ctx.sampleRate;
});
console.log('稳定:', sampleRate === sampleRate2);

关键检查项:

  1. 音频指纹哈希在页面刷新后保持稳定
  2. AudioContext 采样率与配置文件的平台默认值匹配
  3. 不同配置文件产生不同的音频指纹

快速开始

  1. GitHub 下载 BotBrowser
  2. 使用 --bot-profile 加载配置文件
  3. 使用 --bot-noise-seed 实现确定性音频输出
  4. 使用检查 AudioContext 的指纹测试工具进行验证
#audio#fingerprinting#audiocontext#privacy