Auteur : Neil Tyagi
Résumé
L’équipe McAfee Advanced Threat Research a identifié une campagne active recourant à des extensions de navigateur pour voler des cryptomonnaies en remplaçant discrètement les adresses de portefeuilles dès qu’un utilisateur lance une transaction. La campagne s’appuie sur des programmes d’installation non signés — observés aussi bien dans des variantes .NET que Golang — qui déploient une extension Chromium malveillante se faisant passer pour un utilitaire « Google Notes » inoffensif.
Cette campagne est liée à un article de blog publié précédemment par McAfee Labs, intitulé « Sinkholing CountLoader: Insights into Its Recent Campaign », étant donné que le même cybercriminel semble être derrière ces deux opérations. Lors de cette étude antérieure, nous avons analysé une charge virale de type « crypto clipper » qui avait été injectée directement dans la mémoire. Nous examinons ici une autre variante de la charge virale de la phase finale : une extension malveillante pour navigateur conçue pour intercepter et manipuler les transactions en cryptomonnaie.
Dans ce rapport, nous expliquons en détail le fonctionnement de cette extension et proposons une analyse technique des mécanismes qui confèrent à cette menace un caractère particulièrement singulier. Cette extension fonctionne comme un crypto clipper ciblant le presse-papiers : elle surveille les opérations de copier-coller, identifie les adresses de portefeuilles à travers plusieurs chaînes de blocs et les remplace par des adresses contrôlées par le cybercriminel juste avant que la victime ne colle le contenu. La plupart des transactions sur la chaîne de blocs étant irréversibles, une seule exécution sans interruption peut entraîner des pertes financières irrémédiables.
Deux caractéristiques distinguent cette campagne des menaces habituelles liées aux clippers :
- Exploitation de la couche de confiance de Chromium. Le programme d’installation installe à votre insu une extension malveillante dans les navigateurs basés sur Chromium, tels que Google Chrome, Brave et Microsoft Edge, en modifiant les fichiers de paramètres protégés du navigateur. En règle générale, ces navigateurs stockent des données de vérification de sécurité (valeurs de hachage/HMAC) aux côtés des paramètres sensibles afin de détecter toute modification non autorisée. Le logiciel malveillant recalcule et met à jour ces valeurs de sécurité après avoir altéré les fichiers, ce qui induit le navigateur en erreur en lui faisant croire que l’extension malveillante a été installée en toute légitimité. L’extension peut ainsi contourner la procédure normale d’installation via la boutique en ligne des extensions et se charger en arrière-plan sans l’accord de l’utilisateur. Si, pour les versions récentes des navigateurs Chrome et Edge, la victime doit activer manuellement le mode développeur pour que l’extension se charge correctement, les utilisateurs disposant de versions obsolètes de navigateurs basés sur Chromium restent en revanche exposés à un risque élevé. De plus, même dans les versions les plus récentes, un cybercriminel peut toujours recourir à des techniques d’ingénierie sociale pour activer le mode développeur.
- Système de commande et de contrôle basé sur la chaîne de blocs. L’extension ne contient pas de domaine C2 codé en dur. Au lieu de cela, elle interroge un endpoint RPC de la chaîne de blocs publique, appelle une méthode de contrat intelligent en lecture seule, puis décode la réponse lors de l’exécution afin de révéler son serveur de commande et de contrôle (C2) actif, identifié au moment de l’analyse comme étant Zebregts[.]com. Cette technique, souvent appelée « EtherHiding », complique les efforts de mise hors service, car le cybercriminel peut faire tourner son infrastructure en mettant à jour la valeur d’un contrat intelligent plutôt qu’en redéployant le logiciel malveillant.
Les données télémétriques de McAfee indiquent une propagation de l’infection à l’échelle mondiale, avec une concentration marquée en Inde. L’étendue géographique de ces activités laisse supposer un ciblage opportuniste des utilisateurs de cryptomonnaies à des fins de consommation, plutôt qu’une opération spécifique à une région donnée.
Répartition géographique

L’analyse des données télémétriques indique que les infections sont réparties à l’échelle mondiale, avec une concentration nettement plus élevée observée en Inde par rapport aux autres régions.
Cette présence géographique étendue met en évidence la large portée de la campagne, ce qui laisse supposer un ciblage opportuniste plutôt qu’une attaque visant une région en particulier.
L’extension malveillante : « Google Notes »
Ce logiciel malveillant se fait passer pour une extension Google Notes en apparence inoffensive.

L’extension déployée se présente sous la forme d’une application de prise de notes minimaliste et d’apparence légitime, baptisée « Google Notes », dotée d’une icône épurée et d’une interface utilisateur fonctionnelle (et simpliste).
La stratégie est bien pensée : lorsqu’un utilisateur ouvre manuellement l’extension, il constate que celle-ci fonctionne conformément à ce qui est annoncé, ce qui dissipe ses soupçons. La logique malveillante de l’extension est implémentée dans des scripts de type « service worker » et des scripts de contenu qui s’exécutent en arrière-plan et qui fonctionnent entièrement hors de la vue de l’interface utilisateur.
Un premier signal d’alerte majeur apparaît dès l’installation de l’extension, qui demande des autorisations de sécurité et des droits d’accès disproportionnés par rapport à une application de prise de notes classique :
- Accès à toutes les URL, permettant l’injection de scripts dans chaque site consulté par l’utilisateur
- Accès à l’historique de navigation
- Accès en lecture et en écriture au presse-papiers
Mesures d’atténuation et recommandations
Pour les particuliers
- Avant de valider toute transaction en cryptomonnaie, vérifiez visuellement les six premiers et les six derniers caractères de l’adresse du destinataire en les comparant à la source — de préférence sur un appareil distinct. Cette simple habitude permet de faire échouer la grande majorité des attaques de clipper.
- Installez des extensions de navigateur exclusivement à partir du Chrome Web Store officiel, de la boutique d’extensions Edge ou d’une boutique équivalente. Une extension qui figure dans votre liste d’extensions installées sans que vous ayez souvenir de l’avoir installée doit être considérée comme suspecte.
- Vérifiez les autorisations accordées à chaque extension installée. Un outil de prise de notes n’a aucune raison valable d’accéder à l’ensemble des sites Web, à l’historique de navigation ou au presse-papiers.
- Évitez d’exécuter des fichiers exécutables non signés provenant de sources non fiables, en particulier celles proposant des versions gratuites ou piratées de logiciels payants — un vecteur de distribution courant pour ce type de programme d’installation.
- Assurez-vous que la protection des terminaux est à jour et activée ; les clients McAfee sont protégés contre cette campagne spécifique, comme expliqué ci-dessous.
Les solutions de sécurité McAfee contribuent à protéger les utilisateurs à plusieurs niveaux :
1. McAfee détecte cette menace sous le nom de CryptoStealer.NE et assure la sécurité de ses clients

2. Protection contre les téléchargements malveillants
Le comportement du programme d’installation — qui télécharge et exécute des charges virales à distance — est détecté et bloqué par McAfee avant que l’infection ne soit effective. Lors de nos tests, tous les domaines et URL malveillants ont été bloqués par McAfee.
3. Protection du réseau
Les connexions à des infrastructures malveillantes connues (serveurs C2) sont bloquées par McAfee, ce qui empêche la récupération des adresses de portefeuilles
4. Renseignements en temps réel sur les menaces
Cette menace ayant été identifiée dans les données télémétriques de McAfee, des mesures de protection peuvent être rapidement mises en place pour :
- Bloquer les variantes similaires
- Détecter les infrastructures associées
- Protéger les clients dans le monde entier
Fonctionnement de cette campagne malveillante
Ce que fait le logiciel malveillant
- Il installe une extension de navigateur à votre insu (chargement latéral d’une extension Web).
- Il surveille ce que vous copiez et collez (en particulier les adresses cryptographiques).
- Il s’exécute lorsque vous effectuez une transaction cryptographique.
- Il remplace discrètement l’adresse du portefeuille par celle du cybercriminel.
- Vos fonds sont transférés au cybercriminel au lieu d’être versés au destinataire prévu.
Les transactions en cryptomonnaie étant généralement irréversibles, les victimes risquent de perdre définitivement leurs fonds.

Principales capacités identifiées
1. Installation silencieuse d’une extension
Ce logiciel malveillant n’utilise pas la boutique officielle du navigateur. Au lieu de cela, il modifie directement les fichiers du navigateur pour donner l’impression que l’extension est installée (chargement latéral de l’extension de navigateur).
Cette méthode contourne les invites de sécurité habituelles et échappe à la vigilance de l’utilisateur.

2. Accès complet au navigateur


L’extension malveillante demande des autorisations excessives, telles que :
- Accès à tous les sites Web
- Consultation de l’historique de navigation
- Lecture et modification du contenu du presse-papiers
3. Interception d’adresses cryptographiques
L’extension intègre une logique permettant de détecter les adresses de portefeuilles pour plusieurs cryptomonnaies, notamment :

- Les adresses de portefeuille de secours indiquées dans le code ne sont pas utilisées pour toutes les transactions ; elles servent plutôt de mécanisme de secours lorsque la récupération dynamique d’adresses à partir du serveur contrôlé par le cybercriminel échoue.
- Dans des conditions normales de fonctionnement, l’extension récupère des adresses de remplacement auprès d’un serveur distant, ce qui permet une attribution dynamique des portefeuilles, éventuellement spécifique à chaque victime.
- Les adresses de secours permettent à l’attaque de rester fonctionnelle même si l’infrastructure de commande et de contrôle est temporairement indisponible ou bloquée.

- Cette fonction a pour rôle d’obtenir l’adresse de portefeuille de remplacement contrôlée par le cybercriminel qui correspond à l’adresse d’origine de la victime.
- Elle envoie l’adresse de portefeuille interceptée au serveur dorsal du cybercriminel et utilise la réponse pour remplacer dynamiquement l’adresse d’origine.
- Si la requête vers le serveur dorsal échoue, la fonction se rabat sur une adresse de portefeuille prédéfinie et codée en dur, de façon à éviter toute interruption de l’activité malveillante.
- 3J98t1Wxxxx est l’adresse qui a été copiée dans le presse-papiers.
4. Contournement de la détection et furtivité

- La configuration comprend une clé API codée en dur, qui est utilisée par l’extension pour authentifier la communication avec l’infrastructure contrôlée par le cybercriminel.
- Une URL RPC pointant vers un nœud de chaîne de blocs publique est utilisée pour déterminer de manière dynamique les renseignements relatifs au serveur dorsal, ce qui permet au cybercriminel de dissimuler des infrastructures critiques derrière des systèmes décentralisés.
- La présence d’une adresse et d’une méthode de contrat intelligent indique que le logiciel malveillant récupère son domaine de commande et contrôle (C2) de manière indirecte via des requêtes sur la chaîne de blocs, ce qui complique sa neutralisation et son suivi.
- La liste des domaines sur liste noire contient une liste de sites Web liés à l’inspection de la chaîne de blocs sur lesquels l’extension Web ne fonctionnera pas. Cette mesure vise à éviter d’alerter la victime lorsqu’elle tente de coller sa propre adresse pour consulter le solde de son portefeuille ou vérifier les transactions de celui-ci.


- L’analyse dynamique a révélé que le logiciel malveillant obtient son domaine de commande et de contrôle via un contrat intelligent de chaîne de blocs, qui renvoie le domaine devops-offensive[.]cc lors de l’exécution.
- La réponse provenant de la chaîne de blocs est décodée au moment de l’exécution, révélant ainsi le domaine C2 actif (devops-offensive.cc).
- Ce domaine n’est pas codé en dur, ce qui permet au cybercriminel de mettre à jour l’infrastructure sans modifier le logiciel malveillant.
- Le domaine résolu est mis en cache localement afin d’assurer la persistance et de réduire le nombre de requêtes réseau répétées.

Cette chaîne codée longue est décodée à l’aide de cette fonction pour obtenir le domaine final du cybercriminel.

Techniques de persistance et d’évasion
La stratégie de persistance et d’évasion de cette campagne est délibérée et comporte plusieurs niveaux. Le cybercriminel a clairement optimisé son système en fonction de deux critères : une faible visibilité pour l’utilisateur final et une grande résistance à la mise hors service et à l’analyse statique.
Persistance
- L’enregistrement de l’extension via la manipulation des fichiers Secure Preferences garantit que l’extension se chargera à chaque démarrage ultérieur du navigateur sans nécessiter de mécanisme de persistance Windows supplémentaire —ni clés Run dans le registre, ni tâches planifiées, ni services que les chasseurs de menaces sur terminaux inspectent généralement.
- Le mode développeur est activé par programmation lorsque cela s’avère nécessaire, ce qui permet aux extensions décompressées de rester en place sans déclencher le flux périodique d’« avertissement concernant des extensions décompressées » que Chromium affiche pour dissuader le chargement latéral d’extensions.
- Le domaine C2 mis en cache permet à l’extension de continuer à fonctionner avec un serveur dorsal dont le bon fonctionnement est avéré, même si le point de terminaison RPC de la chaîne de blocs est brièvement indisponible.
Évasion
- L’identité visible de l’extension — une simple application de prise de notes appelée « Google Notes » — constitue une couverture plausible en cas d’examen superficiel de la liste des extensions installées.
- Les valeurs HMAC recalculées satisfont aux critères de vérification de l’intégrité de Chromium, ce qui permet d’éviter l’affichage de la bannière d’avertissement « Extension installée à partir d’une source inconnue » qui alerterait l’utilisateur.
- Le programme d’installation s’autosupprime après s’être exécuté, éliminant ainsi la trace la plus évidente de la compromission initiale sur le disque.
- La résolution C2 via une chaîne de blocs publique signifie qu’aucun domaine C2 persistant n’est observable dans le paquet du logiciel malveillant lui-même ; les détections basées sur le réseau et conçues à partir d’indicateurs codés en dur ne se déclencheront pas tant que le domaine n’aura pas été résolu et contacté.
- Les variantes multilingues du programme d’installation (.NET et Golang) réduisent l’efficacité des signatures des artefacts de compilation et des caractéristiques binaires.
- Le remplacement dynamique des portefeuilles par adresse signifie que les adresses publiées des cybercriminels deviennent rapidement obsolètes et ne se transforment pas en entrées durables dans les listes noires — l’équipe de sécurité doit bloquer le service en arrière-plan lui-même, et non les adresses qu’il génère.
Logique de substitution des portefeuilles
La logique du clipper repose sur deux couches : une couche « contenu-script » qui surveille l’activité du presse-papiers et les champs de saisie DOM sur toutes les adresses d’origine visitées, et une couche d’arrière-plan qui communique avec le serveur dorsal du cybercriminel pour récupérer les adresses de remplacement.
Lorsque l’extension détecte un événement de copie, elle applique au contenu du presse-papiers un ensemble d’expressions régulières spécifiques aux cryptomonnaies. Si une correspondance est trouvée, l’adresse interceptée est transmise au serveur dorsal du cybercriminel via une requête authentifiée (l’authentification s’effectuant à l’aide de la clé API intégrée à la configuration). Le serveur dorsal répond en fournissant une adresse de remplacement spécifique à l’adresse d’origine envoyée. L’adresse de remplacement est alors réécrite dans le presse-papiers, écrasant ainsi l’adresse légitime avant que la victime n’ait le temps de la coller.
Des tests effectués sur un client dorsal reconstitué — créé en réimplémentant en Python le format de requête et la logique de décodage des réponses de l’extension — ont permis de mettre en évidence un profil comportemental révélateur :
- Bitcoin (BTC), Ethereum, Bitcoin Cash, Ripple et Dash : chaque adresse fournie est associée à une adresse unique contrôlée par le cybercriminel. Chaque fois que la même adresse originale est envoyée, la même adresse de remplacement est renvoyée, ce qui indique l’existence d’une correspondance déterministe un-à-un gérée côté serveur.
- Solana : toutes les adresses soumises se résument à une seule adresse du cybercriminel, ce qui suggère que la fonctionnalité de mise en correspondance par victime est implémentée de manière sélective selon la chaîne
Analyse des portefeuilles cryptographiques du cybercriminel
À partir des fragments de code de l’extension Web chargée de récupérer les adresses de remplacement, un script Python a été élaboré afin d’extraire par programmation les adresses de portefeuilles du cybercriminel. La charge virale a été conçue à partir du code du cybercriminel lui-même, et le fragment de code « get replacement address » en a été directement extrait. La logique utilisée par le cybercriminel pour décoder les données reçues du serveur C2 a également été reproduite fidèlement dans le script.
Le script a ensuite été exécuté à l’aide de quelques adresses de portefeuilles Bitcoin (BTC) de test. Les résultats ont montré que, pour chaque adresse Bitcoin fournie, une adresse Bitcoin unique était renvoyée en réponse, et que toutes les adresses renvoyées correspondaient à des portefeuilles BTC valides. Cela signifie que, pour chaque adresse BTC fournie, le cybercriminel génère dynamiquement un nouveau portefeuille lié à cette adresse spécifique. De plus, lorsque cette même adresse a été fournie à nouveau, la même adresse BTC a été renvoyée, ce qui confirme que chaque adresse BTC d’une victime est associée de manière déterministe à une adresse spécifique unique contrôlée par le cybercriminel. Si certains de ces portefeuilles appartenant au cybercriminel contenaient des fonds et d’autres étaient vides, le nombre total inconnu de ces portefeuilles rend difficile toute estimation fiable du montant total de cryptomonnaie qui a été volé.
Le même comportement a été observé pour Ethereum, pour lequel des adresses de portefeuilles différentes ont été renvoyées pour chaque entrée. Il est intéressant de noter que, lorsque le script a été testé avec des adresses Solana, une seule adresse a été renvoyée, quel que soit le nombre d’entrées différentes fournies. Cela semble indiquer que le cybercriminel a mis en place la fonctionnalité de mappage par adresse uniquement pour certaines cryptomonnaies, tandis que pour d’autres, il utilise un seul portefeuille de collecte statique. Comme l’adresse Solana est commune à toutes les victimes, une augmentation notable de son solde est observée. Par ailleurs, il s’est avéré que l’une des adresses Ethereum identifiées détenait des fonds pour un montant d’environ 1 902 USD.
En résumé, les cryptomonnaies pour lesquelles des adresses de portefeuilles uniques sont générées pour chaque victime sont notamment le Bitcoin, l’Ethereum, le Bitcoin Cash, le Ripple et le Dash.



Exécution du script avec quelques adresses tests de portefeuilles Bitcoin



Heureusement, pour Solana, nous n’obtenons qu’une seule adresse lorsque plusieurs adresses sont fournies. Cela indique que le cybercriminel n’a implémenté la fonctionnalité de mappage d’adresses que pour certaines cryptomonnaies spécifiques.


Analyse technique du fichier.net (programme d’installation de l’extension)


- Le logiciel malveillant intègre un fichier JSON de configuration complet directement dans le fichier binaire, ce qui lui évite de devoir récupérer les données de configuration initiales auprès de sources externes.
- Cette configuration intégrée comprend des renseignements essentiels tels que les clés API, l’URL du serveur dorsal, les extensions de portefeuille ciblées, ainsi que le manifeste complet de l’extension avec des autorisations étendues.

- Le programme d’installation récupère et valide une archive ZIP distante (google-services[.]cc/base[.]zip), qui sert de charge virale principale pour le déploiement de l’extension de navigateur malveillante, marquant ainsi le passage de l’infection initiale à la compromission au niveau du navigateur.


- Le programme d’installation passe en revue plusieurs navigateurs basés sur Chromium, notamment Chrome, Edge, Opera et Brave, afin d’identifier les profils utilisateur disponibles sur le système.
- À chaque profil détecté, le logiciel malveillant ferme de force le processus du navigateur afin de modifier en toute sécurité les fichiers de configuration sans subir d’interférence.
- Il injecte ensuite l’extension malveillante en modifiant directement les fichiers Secure Preferences et Preferences, ce qui permet à l’extension d’être chargée sans intervention de l’utilisateur.

- Le logiciel malveillant identifie les chemins d’installation des navigateurs en interrogeant les répertoires système standard, ce qui lui permet de localiser les dossiers de données utilisateur dans Chrome, Edge, Opera et Brave.
- Il répertorie systématiquement les profils de navigateur et recherche spécifiquement la présence du fichier Secure Preferences, qui stocke des données essentielles sur la configuration du navigateur et ses extensions.
- En ciblant des profils à l’aide du fichier Secure Preferences, le logiciel malveillant s’assure de ne modifier que des environnements de navigateur valides, ce qui accroît la fiabilité de l’injection d’extensions.


- Le logiciel malveillant lit et modifie le fichier Secure Preferences du navigateur, qui gère les extensions installées et leur niveau de confiance.
- Il injecte l’extension malveillante dans la configuration et tente de resigner les données modifiées, de façon à ce que les modifications apparaissent comme légitimes lors des contrôles d’intégrité du navigateur.
- La configuration mise à jour est ensuite réécrite sur le disque, ce qui garantit que l’extension se charge automatiquement et reste active même après le redémarrage du navigateur.


- Dans le cas de navigateurs tels que Brave et Opera, le logiciel malveillant injecte l’extension malveillante directement dans la configuration du navigateur en ajoutant des entrées dans la section extensions.settings (ou extensions.opsettings).
- Il met également à jour les champs liés à l’intégrité (protection.macs) afin que l’extension injectée soit considérée comme fiable par le navigateur.
- De plus, le logiciel malveillant tente d’activer le mode développeur par programmation, de façon à permettre aux extensions décompressées de s’exécuter avec moins de restrictions.

- Le logiciel malveillant tente de recalculer les signatures d’intégrité du navigateur en générant de nouvelles valeurs MAC (Message Authentication Code) pour le fichier Secure Preferences modifié.
- Il utilise des identifiants propres au système, tels que le SID de la machine, combinés à une valeur de départ afin de reproduire le mécanisme de vérification interne de Chrome.
- En recalculant ces contrôles d’intégrité (macs et super_mac), le logiciel malveillant tente de faire passer ses modifications non autorisées pour des modifications légitimes auprès du navigateur.

- Le logiciel malveillant intègre un mécanisme d’autosuppression conçu pour supprimer le fichier exécutable du programme d’installation une fois celui-ci exécuté avec succès.
- Il lance un processus d’invite de commande caché qui retarde brièvement l’exécution avant de supprimer le fichier d’origine du disque.
Conclusion
Cette campagne illustre clairement la direction que prend le vol de cryptomonnaies ciblant les particuliers. Le cybercriminel s’est appuyé sur la catégorie la plus ancienne et la plus simple de logiciel malveillant cryptographique — le clipper — et a discrètement renforcé trois de ses maillons les plus faibles. Les adresses statiques du cybercriminel ont été remplacées par un mappage spécifique à chaque victime côté serveur. Les domaines de commande et de contrôle, fragiles et codés en dur, ont été remplacés par une recherche basée sur la chaîne de blocs, que le cybercriminel peut modifier à l’aide d’une seule transaction. Enfin, un injecteur vulnérable a été remplacé par une extension Chromium intégrée à l’application à laquelle l’utilisateur fait le plus confiance, chargée sous la signature d’intégrité propre au navigateur.
McAfee continuera à surveiller cette campagne et l’infrastructure associée. Nos clients sont protégés par les mécanismes de détection existants et bénéficieront de mises à jour basées sur la télémétrie à mesure que de nouvelles variantes et des infrastructures modifiées seront identifiées.
Indicateurs de compromission (IoC)
| Type | Catégorie | Valeur |
| SHA-256 | Programme d’installation .NET (BaseZipInstaller) | 2735e12030c195fb5454e4736c51b55b59664b93cae9f4bd5317afcd9c2af0bf 053620962047f50a91c6e8d1a6519eccc41fab51473f033086b4d816abe8bcb0 |
| SHA-256 | Variante du programme d’installation compilée en Golang | 11be4c47ff049322de41743f62544cafd32d67e24ad653b7ebedf8ebd63e0962 1432393691b415d0cd4680d9cee73e60896fbe63300d9f0355c96e91817e4b1d |
| URL | Distribution de la charge virale | hxxps://google-services[.]cc/base[.]zip |
| Domaine | Commande et contrôle (géré via un contrat intelligent) | devops-offensive[.]cc Zebregts[.]com |
| Portefeuille BTC | Portefeuille cryptographique | 3JvDBvKbS6YYMKjV3R9e9Zfd67f467fNLy 1BbhVBxpniuZuAL1gGZnEMdQhmz9JGWpyT 3AcPNVh7NyESwX3ECymy3rkdH4Ke2c26Tj 1BVTrB47erypG3tevi1U9Fv6BbNUBEiuiX |
| Artefact | Cible de chargement latéral | Fichier Secure Preferences de Chromium (profils Chrome, Edge, Brave et Opera) |
| Fichiers d’extension | manifest.json crypto-patterns.js Interceptor.js content-script.j cache.js domain-resolver.js service-worker.js api-client.js | ed2599d6a8f30d5eaf14ad7f855aece0acdf7efa4a148eb18e4d9f0d8e2cd90c daf82c67e8e5df6bbd5370172ac9374aa7dce48af05496e8ec3dba7b602c619b 6eb2f07265dd95cacd39dfcf0705786b97f3e173cf4e9b3dfe7bad141c9a9dd5 a2ffdbedc5c9f5400a2b1cf5d35f5ec1df06a74d0345f1035bcf75d36ed73e01 eb84ba4a0cd95655a021865d4fec93ae3393f86cc9848810ed0b49035b1c5e2c 6aaba685669d779ef8be8f7f4231096cfafd0ef386f3897c5e2106c177724fc8 2599064901308a97540af29197ed0b38702bbee38d6dbbfa61cf9eb5878353f3 ab450927b37e1b68e2be68832c354ac600e86e2545a904d4ca0ea283f2600cc2 |