Pular para o conteúdo
Biblioteca aberta · GPL-3.0

Capturas reais, prontas para usar

Em vez de uma persona sintética derivada da seed, informe os valores capturados de uma máquina real com Chrome — strings de GPU, tela, fontes e contagens de hardware — via --fingerprint-profile. A biblioteca clearcote-profiles converte o dataset aberto chrome-fingerprints (~10k capturas reais do Chrome no Windows) em milhares de perfis coerentes, prontos para usar.

72

amostras curadas e validadas — GPUs variadas, prontas para usar

~8.5k

perfis ao gerar a biblioteca completa

~10k

capturas reais do Chrome no dataset de origem

Curadas, não só convertidas. Capturas feitas com renderização por software (SwiftShader / llvmpipe) ou dentro de uma VM (Parallels / VMware / VirtualBox) são descartadas — um adaptador de VM já é um indício por si só. Por transparência, os registros rejeitados ficam na pasta excluded/ do repo, junto com o manifesto index.json, que marca cada perfil com o fabricante e a família da GPU, a tela e a concorrência (Intel 29 · NVIDIA 34 · AMD 9 no conjunto de amostras).

O que um perfil traz — e o que ele deixa de fora de propósito

Os valores que ele informa

  • GPU — as strings unmasked de vendor/renderer do WebGL, a tabela de getParameter e a lista de extensões suportadas
  • Tela — resolução, área disponível, profundidade de cor, device-pixel-ratio, gama de cores
  • Hardware — hardwareConcurrency e deviceMemory
  • Fontes, vozes de síntese de fala, taxa de amostragem & latência do áudio

A versão do navegador (sempre atual)

Os perfis não trazem o User-Agent, a versão do Chrome nem as brands do UA-CH. O dataset de origem é do Chrome 117; o Clearcote vem com um motor muito mais novo. Importar a versão antiga faria o navegador declarar 117 enquanto se comporta como a versão real — uma inconsistência que, por si só, é detectável. O Clearcote mantém a própria versão atual; só os valores capturados são emprestados.

samples/vinyzu-04201.json — resumido
{
  "meta": { "id": "vinyzu-04201", "gpu_vendor": "Intel", "gpu_family": "Arc" },
  "hardware_concurrency": 12,
  "device_memory": 8,
  "screen": { "width": 1920, "height": 1080, "color_depth": 24, "device_pixel_ratio": 1 },
  "webgl": {
    "UNMASKED_VENDOR_WEBGL": "Google Inc. (Intel)",
    "UNMASKED_RENDERER_WEBGL": "ANGLE (Intel, Intel(R) Arc(TM) A770 Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)"
  },
  "fonts": { "detected": ["Arial", "Calibri", "Cambria", "Consolas", "Segoe UI", "… 390 more"] },
  "audio": { "BaseAudioContextSampleRate": 48000, "AudioContextBaseLatency": 0.01 }
}

O que você baixa de fato: cada perfil é um arquivo JSON. Este é um desktop com Intel Arc A770 — os valores informados por uma máquina real, capturados por inteiro: uma tabela de driver da Arc A770, 12 threads, 8 GB, uma tela 1080p e 395 fontes instaladas. Outros 71 vêm em samples/, e mais ~8.5k via generate.py.

O que um perfil não é: hardware. Um perfil muda o que o navegador informa. Ele não muda quem desenha os seus pixels — canvas, readback de WebGL e áudio continuam vindo da máquina em que você está rodando de fato, e nenhum navegador consegue mudar isso. Por isso, duas contas com dois perfis diferentes na mesma máquina ainda renderizam um canvas idêntico. Se você precisa que cada conta pareça uma máquina diferente no nível dos pixels, isso vem de uma seed fingerprint por conta, não do perfil.

Como configurar

Medido no pixelscan e no BrowserScan em ~30 configurações. As duas regras abaixo são as que realmente mudaram o resultado.

1Informe a GPU real

Quem desenha os pixels é o seu host, de um jeito ou de outro. Declarar outra GPU faz o nome e a renderização não baterem, e os scanners que calculam o hash da saída renderizada penalizam isso. Ativar disable_gpu_fingerprint=True faz a GPU informada coincidir com a que realmente faz o trabalho — isso altera WebGL e WebGPU juntos, então os dois nunca se contradizem. O perfil continua fornecendo tela, fontes e contagens de hardware.

2Uma seed por conta — e sem combiná-la com um perfil

Sozinho, um perfil dá o mesmo canvas a todas as contas, porque ele substitui valores informados e nunca mexe na renderização. O canvas por conta vem da seed fingerprint. Definir uma seed e um perfil capturado ao mesmo tempo é a única combinação que os scanners apontam como tampering — escolha um dos dois. Para várias contas, escolha a seed.

Setup para várias contas: uma seed única por conta + GPU real + um proxy próprio. Deixe o ruído de canvas ligado — desligá-lo elimina justamente o canvas por conta que você acabou de montar.

python
import clearcote

# ONE ACCOUNT, ONE IDENTITY — the multi-account setup
browser = clearcote.launch(
    fingerprint="acct-1",              # unique per account: this is what varies the canvas
    disable_gpu_fingerprint=True,      # report the real GPU, so name and render agree
    geoip=True,                        # timezone + language follow the proxy
    proxy={"server": "..."},           # one per account
)                                      # note: no fingerprint_profile — a seed replaces it

# A CAPTURED MACHINE INSTEAD — for a single identity, not a fleet
# (the repo's samples/ set works out of the box)
browser = clearcote.launch(
    fingerprint_profile="samples/vinyzu-04201.json",   # an Intel Arc A770 desktop
    disable_gpu_fingerprint=True,
)                                      # note: no fingerprint seed alongside it

Gere a biblioteca completa

O conversor canônico fica no repo do navegador e é fixado como dependência — a curadoria é aplicada por cima:

bash
pip install -r requirements.txt   # dataset + canonical converter
python generate.py                # -> profiles/*.json (~8.5k profiles)
python generate.py --samples 80 --out samples   # regenerate the sample set

Prefere apontar e clicar?

O Profile Manager navega por esta biblioteca para você — filtrada pelo fabricante da GPU do seu host — e abre o perfil escolhido em uma janela interativa. Sem nenhuma linha de código.

A janela principal do Clearcote Profile Manager: perfis salvos como cards, com chips de seed de fingerprint, fuso horário, geoip e proxy, cada um com os botões “Launch”, “Edit”, “Duplicate” e “Delete”.