全部指纹
渲染

AudioContext

离线渲染的振荡器输出因音频栈而异,而静音振荡器必须输出精确的零。

读取方式OfflineAudioContextAudioBuffer.getChannelData

它是什么

Web Audio API 可以不播放就渲染声音。一个振荡器经过压缩器后输出的波形,其精确采样值取决于音频引擎、操作系统和 CPU 的浮点行为——一个你听不见的指纹。

网站怎么读

const ctx = new OfflineAudioContext(1, 5000, 44100);
const osc = ctx.createOscillator(); osc.type = 'triangle'; osc.frequency.value = 10000;
osc.connect(ctx.createDynamicsCompressor()).connect(ctx.destination); osc.start();
const buffer = await ctx.startRendering();   // hash(buffer.getChannelData(0))

渲染出的缓冲区被求和或哈希。某个系统上的 Chrome 会给出一个著名的数字(124.04347…),Firefox 给另一个;细微的偏差能把硬件范围缩得更小。

为什么它能认出你

这个值跨会话稳定、跨标签页一致,又独立于图形信号,因此能佐证它们。因为它是算出来而不是声明出来的,没法像字符串那样直接编辑。

风控怎么用它

两项行为测试占主导。0 Hz 的振荡器必须渲染出精确的零:任何其他结果都说明渲染之后被注入了噪声。getChannelData 与 createOscillator 必须仍是原生函数。一个独一无二却每次渲染都变的值,正是“保护”扩展的签名。

常见翻车点

每次调用都加随机噪声;对静音也加噪声;hook 掉 getChannelData;Chrome 环境里出现属于 Firefox 的音频值。

Mango 正在接受候补登记。以下介绍首发能力,客户端将在发放邀请后开放使用。

Mango Browser 如何处理

噪声

对渲染采样施加带种子的确定性噪声;静音仍是静音,“零值测试”可通过。

检测你的值

跳转到你的检测结果中的这一项。

查看我的结果