Aller au contenu
Bibliothèque ouverte · GPL-3.0

De vraies captures, prêtes à porter

Plutôt qu’une persona synthétique dérivée d’une seed, exposez avec --fingerprint-profile les valeurs capturées sur une vraie machine Chrome — ses chaînes GPU, son écran, ses polices et ses valeurs matérielles. La bibliothèque clearcote-profiles convertit le jeu de données ouvert chrome-fingerprints (~10k captures réelles de Chrome sous Windows) en plusieurs milliers de profils cohérents, prêts à l’emploi.

72

échantillons sélectionnés et validés — GPU variés, prêts à l’emploi

~8.5k

profils dans la bibliothèque complète générée

~10k

captures réelles de Chrome dans le jeu de données source

Triés sur le volet, pas seulement convertis. Les captures réalisées en rendu logiciel (SwiftShader / llvmpipe) ou dans une VM (Parallels / VMware / VirtualBox) sont écartées — un adaptateur de VM est à lui seul un signal révélateur. Par souci de transparence, les enregistrements rejetés restent dans le dossier excluded/ du dépôt, à côté du manifeste index.json, qui étiquette chaque profil avec le fabricant et la famille de son GPU, son écran et son nombre de threads (Intel 29 · NVIDIA 34 · AMD 9 dans le jeu d’échantillons).

Ce que contient un profil — et ce qu’il laisse volontairement de côté

Les valeurs qu’il renvoie

  • GPU — les chaînes vendor/renderer non masquées de WebGL, la table getParameter et la liste des extensions prises en charge
  • Écran — résolution, zone disponible, profondeur de couleur, device-pixel-ratio, gamut de couleurs
  • Matériel — hardwareConcurrency et deviceMemory
  • Polices, voix de synthèse vocale, fréquence d’échantillonnage & latence audio

La version du navigateur (toujours à jour)

Les profils ne contiennent pas le User-Agent, la version de Chrome ni les brands UA-CH. Le jeu de données source correspond à Chrome 117, alors que Clearcote embarque un moteur bien plus récent. Importer l’ancienne version ferait annoncer 117 au navigateur alors qu’il se comporte comme sa vraie version — une incohérence détectable en elle-même. Clearcote conserve sa propre version, à jour ; seules les valeurs capturées sont empruntées.

samples/vinyzu-04201.json — extrait
{
  "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 }
}

Ce que vous téléchargez réellement : chaque profil est un fichier JSON. Celui-ci provient d’un PC de bureau équipé d’une Intel Arc A770 — les valeurs déclarées par une vraie machine, capturées d’un seul tenant : une table de pilote Arc A770, 12 threads, 8 Go, un écran 1080p et 395 polices installées. 71 autres sont fournis dans samples/, ~8.5k de plus via generate.py.

Ce qu’un profil n’est pas : du matériel. Un profil modifie ce que le navigateur déclare. Il ne change pas ce qui dessine vos pixels — le canvas, le readback WebGL et l’audio proviennent toujours de la machine sur laquelle vous tournez réellement, et aucun navigateur ne peut y changer quoi que ce soit. Deux comptes qui utilisent deux profils différents sur une même machine rendent donc un canvas identique. Si chaque compte doit ressembler à une machine différente au niveau du pixel, cela passe par une seed fingerprint propre à chaque compte, pas par le profil.

Comment le configurer

Mesuré avec pixelscan et BrowserScan sur ~30 configurations. Ce sont les deux règles ci-dessous qui ont réellement fait bouger le résultat.

1Déclarer le vrai GPU

Quoi qu’il arrive, c’est votre machine hôte qui dessine les pixels. Annoncer un autre GPU, c’est faire diverger le nom et le rendu — et les scanners qui calculent un hash du rendu le sanctionnent. Activer disable_gpu_fingerprint=True aligne le GPU déclaré sur celui qui fait réellement le travail : WebGL et WebGPU basculent ensemble, si bien que les deux ne se contredisent jamais. Le profil fournit toujours l’écran, les polices et les valeurs matérielles.

2Une seed par compte — sans l’associer à un profil

À lui seul, un profil donne le même canvas à tous les comptes, car il remplace des valeurs déclarées sans jamais toucher au rendu. Le canvas propre à chaque compte vient de la seed fingerprint. Définir à la fois une seed et un profil capturé est la seule combinaison que les scanners signalent comme une manipulation (tampering) : choisissez l’un ou l’autre. Pour plusieurs comptes, choisissez la seed.

Configuration multicompte : une seed unique par compte + le vrai GPU + un proxy dédié. Laissez le bruit canvas activé — le couper supprime justement le canvas propre à chaque compte que vous venez de mettre en place.

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

Générer la bibliothèque complète

Le convertisseur de référence se trouve dans le dépôt du navigateur et est épinglé comme dépendance ; la sélection s’ajoute par-dessus :

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

Vous préférez cliquer ?

Le Profile Manager parcourt cette bibliothèque pour vous — filtrée selon le fabricant du GPU de votre machine — et lance le profil choisi dans une fenêtre interactive. Sans la moindre ligne de code.

La fenêtre principale du Clearcote Profile Manager : les profils enregistrés sous forme de cartes, avec des pastilles pour la seed d’empreinte, le fuseau horaire, geoip et le proxy, chacune avec les boutons « Launch », « Edit », « Duplicate » et « Delete ».