Controle do fingerprint do navegador, no motor
Um fingerprint de navegador são dezenas de valores que precisam fazer sentido juntos. O Clearcote deriva todos eles de um seed e os entrega pelos próprios caminhos de código do Chromium, então uma página que lê a GPU, a tela e as fontes recebe respostas que pertencem a uma única máquina plausível, com idioma e fuso horário definidos para combinar com ela: no frame principal, nos iframes e nos workers.
A persona por seed e o ruído por site estão em todos os planos, inclusive no build aberto.
Um seed, uma identidade
import { launch } from "clearcote";
// the same seed returns the same identity; a new seed is a new one
const browser = await launch({
fingerprint: "account-42",
timezone: "America/New_York",
acceptLanguage: "en-US,en",
});Destaques
Um seed, uma máquina
O --fingerprint deriva uma persona correlacionada: faixa de CPU e memória, tela, profundidade de cor, GPU, vozes, codecs e dispositivos de mídia que combinam entre si.
Por site, não global
O ruído de canvas e WebGL é derivado por site, no modelo de farbling do Brave, então esses hashes mudam de um site para outro, enquanto o hardware que a persona reporta continua o mesmo em todo lugar, como numa máquina real.
Nativo em todo realm
Os valores vêm de getters em C++, então o toString, os property descriptors e um iframe ou worker novo enxergam código nativo e a mesma resposta.
Uma GPU coerente consigo mesma
O vendor e o renderer do WebGL ficam constantes durante a sessão, os limites do getParameter acompanham essa GPU até onde esta máquina consegue sustentá-los, e o WebGPU descreve o mesmo adaptador.
Importe uma máquina real
Carregue um perfil capturado de um Chrome real, ou escolha um na biblioteca aberta de perfis, e os valores dele substituem os sintéticos.
Pegue leve onde importa
O lightStealth varia só os metadados seguros. fingerprintNoise: false mantém a identidade e tira o ruído de canvas e WebGL onde o próprio ruído é pontuado.
Por que consistência vale mais que valores engenhosos
A detecção raramente depende de um único valor incomum. Ela procura contradições: uma string de GPU que não bate com os pixels, um fuso horário que não combina com o IP, um worker que reporta um hardware diferente do da página. Então a pergunta que o Clearcote responde não é quais valores falsificar, mas como manter todos eles consistentes entre si e com a máquina por baixo.
O seed é determinístico. O mesmo seed produz a mesma identidade em toda inicialização, como um visitante recorrente, e um seed novo produz uma identidade nova. As leituras de canvas 2D e WebGL levam uma pequena perturbação por seed e por site, porque a leitura já varia entre máquinas reais. O áudio renderizado e os client rects ficam exatos de propósito: perturbá-los gera valores que nenhum navegador real emite, o que chama mais atenção do que dois perfis compartilhando um hash. A documentação de fingerprint passa por cada superfície.
Algumas alegações o host não consegue sustentar, e a documentação diz isso com todas as letras. Um tamanho de tela que não bate com a janela real, ou uma GPU que a máquina não consegue de fato renderizar, é testado contra o host e falha. É por isso que o lightStealth mantém a tela real e os overrides de tela são opcionais, que a ponte de canvas existe e que o ponto de partida recomendado varia menos, e não mais.
O que está coberto
| Superfície | O que o Clearcote faz |
|---|---|
| Leitura de canvas 2D e WebGL | Ruído por seed e por site, dentro da variação natural entre máquinas reais |
| Renderer e limites do WebGL | Uma GPU constante durante a sessão, com os limites de parâmetros dessa GPU onde quer que esta máquina consiga sustentá-los |
| WebGPU | O mesmo adaptador do WebGL, então por padrão as duas APIs apontam a mesma GPU |
| Áudio | A taxa de amostragem e a latência do AudioContext seguem a persona; as amostras renderizadas ficam exatas |
| Fontes e vozes de síntese | Os conjuntos de fontes e vozes da persona |
| Hardware e tela | hardwareConcurrency, deviceMemory, pixel ratio, profundidade de cor, pontos de toque, e a tela e a área de trabalho da persona (o lightStealth mantém a tela real) |
| Locale e horário | Accept-Language, navigator.language, Intl e o fuso horário concordam |
| User agent e client hints | Marca, versão, plataforma, bitness e modelo, vindos do motor |
| TLS | O ClientHello segue a versão do Chrome que a persona declara |
| Sinais de automação | navigator.webdriver e os indícios de headless |
A lista completa de switches, com o que cada um faz, está na referência da flag de fingerprint.
Para que as pessoas usam
Privacidade
Um navegador de fábrica reporta a combinação de valores da sua própria máquina. Uma persona reporta uma máquina plausível e consistente que não é a sua.
Identidades separadas
Dê a cada conta o seu próprio seed, para que as contas não compartilhem um fingerprint de renderização.
Testar código sensível a fingerprint
Veja como o seu próprio código de antifraude, analytics ou personalização reage a hardwares, GPUs e locales diferentes.
Pesquisa sobre fingerprinting
Reproduza o que uma página de teste mede, com entradas controladas e repetíveis.
O Clearcote foi feito para privacidade, testes, pesquisa e automação lícita. Você é responsável pela forma como o usa e por seguir os termos dos sites que visita.
Qual plano inclui
A persona por seed, o ruído por site, os overrides de metadados e a correspondência de TLS estão em todos os planos, inclusive no build aberto. O build licenciado (grátis com GitHub) acrescenta alguns switches mais finos, realismo de comportamento e recebe primeiro as novas versões major do Chromium, e o Pro não libera nenhum spoofing que o Grátis com GitHub não tenha.
Comparar planosPerguntas frequentes
O que é spoofing de fingerprint do navegador?
É alterar os valores que um site lê para reconhecer um navegador: GPU, tela, fontes, hardware, idioma e assim por diante. A maioria das ferramentas faz isso sobrescrevendo propriedades JavaScript. O Clearcote faz isso no motor do Chromium, então os valores vêm de código nativo e permanecem consistentes entre si.
Por que não usar um spoofer de fingerprint em JavaScript?
Funções sobrescritas se denunciam. O toString retorna o código-fonte do override em vez de [native code], os property descriptors mudam e um iframe ou worker novo traz de volta o valor original. O Clearcote não tem uma camada dessas para ser encontrada. Veja como a detecção funciona.
O mesmo seed gera sempre o mesmo fingerprint?
Sim. O seed deriva de forma determinística a persona e o ruído por site, então o mesmo seed é a mesma identidade em toda inicialização, e um seed novo é uma identidade nova.
Duas contas na mesma máquina podem ter fingerprints de canvas diferentes?
Sim, com seeds diferentes: as leituras de canvas e WebGL variam por seed. Um perfil de dispositivo importado só muda os valores reportados, não a renderização, então use um seed por conta para separar a renderização. O áudio renderizado e os client rects vêm da máquina por baixo e são iguais para todas as identidades que rodam nela.
Isso torna a automação indetectável?
Nenhuma ferramenta pode prometer isso, e nós não prometemos. O Clearcote remove as contradições que um navegador com spoofing costuma carregar. Comportamento, reputação do IP e a forma como você o usa continuam importando. O teste de fingerprint mostra como o seu próprio setup aparece.
Vá mais fundo na documentação
Recursos relacionados
Um seed por conta: o mesmo dispositivo a cada sessão, um diferente para a próxima conta, com cookies e armazenamento que persistem entre execuções.
O handshake TLS e os frames HTTP/2 vêm da própria stack de rede do Chromium, e os campos que dependem da versão seguem a versão do Chrome que a sua persona declara.
Encaminhe operações de canvas e WebGL para uma máquina remota com GPU real, para que os pixels que a página lê de volta batam com a GPU que a sua persona declara.
Defina um proxy com geoip ligado e o fuso horário, os idiomas e o WebRTC seguem o IP de saída. SOCKS5 com usuário e senha funciona direto no build licenciado.
Leituras relacionadas
Experimente o Clearcote
Plug-and-play no Playwright e no Puppeteer, coerente até o handshake TLS, com um build de código aberto para começar.
Grátis para um navegador com GitHub. Sem cartão.