Retour à l’étude BotGuard
Document de l’étude · Octobre 2026

Contrôle de fond, nov. 2025 à oct. 2026

444 captures : nouveaux tests d’août, retrait de WebGPU, module de stockage local.

Powered by RESONEO

Contrôle de fond QyE : novembre 2025 au 17 octobre 2026

Analyse du programme que Google exécute en tâche de fond sur ses pages de résultats (canal sg_ck=QyE), à partir de réponses récoltées. État au 19 octobre 2026.

En bref

  1. Quatre nouvelles familles de tests apparaissent entre le 20 août à 12:06 UTC et le 22 août à 20:58 UTC. Notre corpus ne contient aucune capture entre ces deux moments. Les quatre arrivent ensemble : réglages déclarés par le navigateur, rendu et césure du texte, précision du pointeur, WebGPU.
  2. Le programme décodé grossit d'environ 13 % (+2 648 octets) entre le 12 et le 28 août, alors que le moteur JavaScript qui l'exécute diminue légèrement.
  3. Le test WebGPU est retiré le 5 octobre, entre 06:53 et 14:07 UTC. Les trois autres familles restent. Notre session en direct du 17 octobre le confirme.
  4. Une variante avec un module de stockage local coexiste avec le programme normal depuis juillet. 134 captures du 8 juillet au 17 octobre ; elle est servie en même temps que la version normale, pour une même adresse de requête.
  5. Les données stockées ne sont acceptées que par l'exemplaire de programme qui les a écrites.

Corpus et méthode

ÉlémentValeur
Entrées QyE repérées (réponses de plus de 20 000 octets)4 780, du 13 novembre 2025 au 17 octobre 2026
Captures sélectionnées444 : toutes les grandes réponses, leur voisine normale la plus proche, tout septembre, trois par semaine depuis novembre 2025, bissections de dates
Corps récupérés et vérifiés (empreinte et date de capture)444 sur 444
Corps exécutés hors ligne441 ; 3 réponses liées à Google Flights, de format différent, sont écartées
Exécutions à stockage vide441, sans erreur
Traçages détaillés69

Le moteur d'origine est exécuté avec son programme dans un navigateur isolé. La page https://www.google.com/search est servie en local ; aucune requête n'est envoyée à Google et aucun token n'est soumis.

La hausse d'août

Mesure12 août28 aoûtDifférence
Programme encodé, caractères26 27529 807+3 532, soit +13,44 %
Programme décodé, octets19 70322 351+2 648, soit +13,44 %
Moteur JavaScript, octets63 73463 231−503
Réponse complète, octets120 495123 421+2 926, soit +2,43 %

La configuration auxiliaire est identique. La hausse ne vient ni de l'encodage ni de l'emballage.

Taille du programme normal, mois par mois

Programme décodé, en octets, hors variante avec stockage.

PériodeCapturesMédianeMinimumMaximum
Novembre 2025318 87218 83819 523
Décembre 2025818 91518 57520 158
Janvier 20261319 13618 78820 150
Février1119 09918 83020 138
Mars1319 28719 14820 110
Avril1519 40319 11420 102
Mai1119 86319 75923 213
Juin920 14719 99720 341
Juillet8820 09719 86121 196
1er au 20 août5319 73418 63819 950
22 août au 5 octobre 06:539822 14821 25322 811
5 octobre 14:07 au 17 octobre2721 82921 43922 663

Environ +1 Ko en neuf mois, puis un saut d'environ +2,4 Ko le 22 août, puis −319 octets après le retrait de WebGPU. L'écart entre captures d'une même période atteint 1,5 Ko : la taille seule ne suffit pas à attribuer la baisse d'octobre.

Les nouveaux tests

TestCe que fait le programme
Réglages déclarésLit navigator.platform, navigator.doNotTrack et window.doNotTrack
Rendu du texteCrée des blocs cachés en police à chasse fixe (16 px, interligne 20 px), compare hyphens: auto et none, lit offsetHeight
PointeurAppelle matchMedia avec any-pointer: fine et any-pointer: coarse
Carte graphique (jusqu'au 5 octobre)Appelle navigator.gpu.requestAdapter avec powerPreference: low-power, puis lit info.vendor et info.architecture
Période (UTC)TraçagesRéglages, rendu, pointeurWebGPU
Novembre 2025 au 20 août 12:0610absentsabsent
22 août 20:58 au 5 octobre 06:5343présentsprésent
5 octobre 14:07 au 17 octobre16présentsabsent

Aucune exception dans les 69 traçages. Le retrait de WebGPU coïncide avec le passage à une nouvelle version du moteur JavaScript, entre 06:53 et 14:07 UTC le 5 octobre. Les versions de moteur changent plusieurs fois par semaine : la coïncidence date le changement, sans prouver que le moteur en soit la cause.

Des constantes liées aux nouveaux tests ont été localisées dans le programme (environ 618 octets de reconstruction de littéraux). La répartition exacte des 2 648 octets supplémentaires entre code, données et remplissage n'est pas établie.

La variante avec stockage local

Elle se repère de deux façons concordantes : sa taille et le fait qu'elle laisse un état dans localStorage après exécution. Sur 441 exécutions, les 134 grands programmes laissent tous un état, les 307 autres aucun.

MoisEntrées de l'indexVariantesPart
Novembre 2025 à juin 20261 64100 %
Juillet1 106116 (du 8 au 16 juillet)10,5 %
Août721 (18 août)1,4 %
Septembre861 (28 septembre)1,2 %
1er au 17 octobre1 875160,9 %

C'est le programme normal du moment augmenté d'un module de 4,7 à 7,4 Ko (médiane 6 Ko). Elle suit ses évolutions : sans les nouveaux tests en juillet, avec WebGPU le 28 septembre, sans WebGPU en octobre. En octobre, la capture normale de même moteur la plus proche est à 1,2 minute en médiane ; le 15 octobre, une variante et un programme normal sont capturés à 16 secondes d'écart. Rien dans l'adresse de requête ne les distingue : l'attribution se fait côté serveur. Test A/B, échantillonnage ou ciblage restent compatibles avec ces données.

Le module programme aussi un intervalle de 2 000 ms.

Les données stockées sont liées à leur programme

État réinjectéProgramme qui le litRésultat
Son propre étatle même programmeaccepté (6 programmes de juillet sur 6, et la variante du 18 août)
État d'un autre programme du 8 juillet, même moteurprogramme de juilletrefusé (4 cas sur 4)
État d'un autre programme du 8 juillet, moteur différentprogramme de juilletrefusé (2 cas sur 2)
État d'un programme de juilletvariante du 18 aoûtrefusé
État de la variante du 18 aoûtprogramme de juilletrefusé

« Accepté » : même résultat qu'avec l'état du programme lui-même. « Refusé » : même résultat qu'avec un stockage vide. Ces essais de transfert entre programmes ne déterminent ni la règle de validation ni l’exploitation côté serveur.

Structure et contenu du stockage

Le décodage de six programmes (8 et 11 juillet, 18 août, 28 septembre, 6 et 15 octobre) montre une structure commune. Le moteur original et le programme associé sont rejoués hors ligne, sans envoi de token à Google. Le tableau décodé est capturé pendant la relecture du stockage ; les longueurs et le compteur final sont vérifiés.

ÉlémentTaille et observation
Enveloppe externe8 octets
Marqueur du contenu décodé3 octets : 01 be ef
Bloc associé au programme12 octets, rôle inconnu, différents entre les six exemplaires
EnregistrementHorodatage 4 octets big-endian, champ 1 octet observé à 1, longueur 2 octets big-endian, charge utile variable
Compteur final1 octet

Sans interaction, la charge utile mesure 114 octets, soit 121 octets par enregistrement et un total binaire de 24 + 121 × n. Un enregistrement représente donc 145 octets ; vingt, 2 444 octets, avant encodage base64. Les interactions font varier la longueur : 146 octets de charge utile pour un mouvement ou une frappe, 151 pour un clic isolé dans les scénarios testés.

L’horodatage correspond à la capture du programme à la seconde près dans cinq exemplaires et à une seconde d’écart dans le sixième. Il ne mesure pas la date de visite simulée dans ces replays. Le rôle du champ égal à 1 demeure inconnu.

Historique des vingt derniers passages

Sur le programme du 18 août, 21 contextes neufs reçoivent successivement l’état écrit par le précédent. Chaque passage comporte un clic distinct, de (101,201) à (121,221). L’état final contient exactement les vingt enregistrements de (102,202) à (121,221), dans cet ordre : le premier est supprimé. Cette politique FIFO concerne les passages du programme, pas vingt clics au sein d’une page. Elle n’est pas démontrée pour les cinq autres programmes par la seule similitude de leur format.

Les coordonnées étudiées sont celles du dernier clic : un clic en (123,234), suivi d’un déplacement en (500,400), laisse (123,234). Un mouvement seul laisse la sentinelle (65535,65535).

Un bloc marqué c5 26 01 20 comprend un indicateur, puis 32 compteurs d’un octet lorsqu’il est actif dans les scénarios testés. Une frappe place les compteurs d’indices 27, 28 et 29 à 1 ; trois frappes les portent à 3. Les touches a et b produisent des charges utiles identiques. Il s’agit de compteurs d’événements, sans distinction des caractères saisis dans ce bloc et ces scénarios ; cela ne permet pas de conclure sur une collecte ailleurs.

Un clic JavaScript synthétique incrémente un compteur sans renseigner les coordonnées comme le clic CDP. Les séquences et cibles pouvant différer, ce contraste ne démontre pas un effet de isTrusted seul. Les correspondances exactes entre tous les compteurs et les événements DOM, ainsi que leurs règles de saturation, restent indéterminées.

Clés et encodage : 134 états

PériodeÉtatsClés observéesEncodage
Juillet116Base commune avec suffixe de 0 à 9Base64 avec remplissage
Août1Base avec suffixe 4Base64 avec remplissage
Septembre1Base sans suffixeBase64 URL-safe sans remplissage
Octobre16Base sans suffixeBase64 URL-safe sans remplissage

Le changement est encadré par nos captures du 18 août et du 28 septembre, sans date exacte de déploiement. La fonction des suffixes et leur règle de sélection ne sont pas établies ; le volume cumulé à travers plusieurs clés n’est pas mesuré. La présence d’un historique persistant ne démontre ni identifiant personnel stable, ni suivi intersites, ni utilisation dans le score serveur.

Limites

  • Les dates sont des dates de capture, encadrées par nos captures voisines. Le contexte dans lequel chaque requête a été émise n'est pas connu.
  • Un test absent signifie que ses chaînes n'ont pas été reconstruites dans ce scénario hors ligne. Pour WebGPU, l'absence d'octobre est recoupée en direct.
  • Les comptes de variantes de l'index reposent sur la taille : un seul faux positif parmi les 441 corps vérifiés.
  • Aucune conclusion fiable sur le coût d'exécution ni sur l'efficacité de détection.
Retour à l’étude BotGuard