Cyber Security Academy · Leçon

Rechercher avec des chaînes et de l’hexadécimal

Faire correspondre les artefacts de logiciels malveillants.

Leçon 3 sur 413 étapes

Rechercher avec des chaînes et de l’hexadécimal est une leçon Cyber Security Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Cyber Security Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Cyber Security Academy comprend 4 leçons au total.

Du spécimen à la rule

La recherche commence par un échantillon. Vous en extrayez les artefacts distinctifs, déterminez lesquels sont durables, puis les encodez dans une rule qui détecte la famille sans signaler les fichiers légitimes.

Le processus est le suivant : trier l'échantillon, extraire les chaînes et les caractéristiques structurelles, séparer le signal du bruit, rédiger la rule, puis la tester sur la famille comme sur un corpus sain avant le déploiement.

Extraction de chaînes candidates

Commencez par l'utilitaire strings pour répertorier les séquences imprimables, en capturant à la fois le texte ASCII et UTF-16 (large). Les logiciels malveillants Windows stockent souvent leurs chaînes au format large.

Examinez la sortie à la recherche d'URL C2, de noms de mutex, de chemins de registre, de messages d'erreur personnalisés, de chemins PDB et de textes étonnamment spécifiques. Ignorez les chaînes génériques de l'environnement d'exécution et du compilateur.

strings -a sample.bin > ascii.txt
strings -e l sample.bin > wide.txt   # UTF-16LE
grep -iE 'http|mutex|\\\\pipe\\\\|\.pdb' ascii.txt wide.txt

Choix de chaînes durables

Toutes les chaînes ne doivent pas figurer dans une rule. Privilégiez les artefacts que l'auteur ne peut pas modifier sans effort :

  • Noms de mutex et de canaux nommés codés en dur, propres à la famille
  • Marqueurs de protocole ou clés de configuration personnalisés
  • Messages inhabituels de débogage ou d'arrêt
  • Chemins PDB intégrés révélant l'environnement de compilation

Évitez le code passe-partout des bibliothèques, les noms d'API courants et les chaînes de version partagées par les logiciels légitimes, car ils génèrent des faux positifs.

strings:
  $mutex = "Global\\Zx7yQ_lock" wide
  $cfgkey = "x0r_cfg_begin" ascii
  $pdb = "C:\\build\\loader\\release\\loader.pdb"

Contournement d'une obfuscation simple

De nombreuses familles appliquent un XOR ou encodent légèrement leurs chaînes d'une autre manière. Si les chaînes en clair sont rares, recherchez leur forme encodée ou la routine de décodage.

Vous pouvez calculer les octets encodés en XOR d'un texte en clair connu et les faire correspondre, ou utiliser le modificateur xor de YARA pour faire automatiquement correspondre une chaîne avec n'importe quelle clé XOR sur un octet.

strings:
  // matches "http://" under any single-byte XOR key
  $u = "http://" xor
  // or a fixed key range
  $k = "config" xor(0x01-0xff)

Recherche avec des motifs hexadécimaux

Lorsque les chaînes sont obfusquées mais que le code ne l'est pas, faites correspondre des motifs d'octets issus de la logique propre au logiciel malveillant : une routine de déchiffrement, une boucle de dépaquetage ou une constante unique.

Désassemblez l'échantillon, trouvez une séquence d'instructions distinctive et traduisez les codes d'opération en une chaîne hexadécimale. Remplacez par des jokers les octets variables (adresses, valeurs immédiates) afin que le motif résiste à une recompilation.

strings:
  // XOR decrypt loop with wildcarded counter/address
  $decrypt = { 8A ?? 34 ?? 88 ?? 4? 4? 75 ?? }

Jokers et sauts en pratique

L'art de la recherche hexadécimale consiste à choisir les éléments à remplacer par des jokers. Un motif trop rigide cesse de fonctionner après une recompilation ; un motif trop permissif correspond à tout.

  • Remplacez par des jokers les décalages relatifs et les valeurs immédiates que le compilateur modifie
  • Conservez les codes d'opération, car l'algorithme reste stable
  • Utilisez des sauts [n-m] lorsque la longueur des instructions varie

Visez un motif suffisamment long pour être unique (souvent au moins 8 octets significatifs), mais flexible là où c'est nécessaire.

strings:
  $stub = { 55 8B EC 83 EC [1-4] E8 ?? ?? ?? ?? 33 C0 }

Indicateurs structurels et PE

Les caractéristiques statiques au-delà des octets bruts permettent de créer des conditions robustes et peu bruitées. Avec le module pe, vous pouvez faire correspondre :

  • imphash — hachage de la table d'imports, souvent stable entre les compilations d'une famille
  • noms de sections — les packers personnalisés ajoutent des sections révélatrices
  • imports spécifiques — VirtualAllocEx + WriteProcessMemory + CreateRemoteThread indiquent une injection
import "pe"
condition:
  pe.imphash() == "4e3a9f..." or
  for any s in pe.sections : ( s.name == ".x0rsec" )

L'entropy comme signal

Les régions compressées ou chiffrées ont une entropy élevée. Le module math la mesure, ce qui permet de signaler les échantillons dont la section de charge utile semble chiffrée, caractéristique des outils de empaquetage.

L'entropy seule est bruyante (les installateurs compressés ont eux aussi une entropy élevée) ; combinez-la donc avec d'autres indicateurs plutôt que de déclencher une alerte sur elle seule.

import "math"
condition:
  math.entropy(0, filesize) >= 7.2 and $loader_stub

Combinaison d'indicateurs

Les rules les plus robustes exigent plusieurs indicateurs indépendants, afin qu'aucune coïncidence isolée ne déclenche une correspondance. Combinez une chaîne, un motif de code et une caractéristique structurelle.

Cette condition en couches résiste à la fois aux faux positifs (toutes les parties doivent concorder) et à l'évasion (l'auteur doit modifier plusieurs caractéristiques simultanément).

condition:
  uint16(0) == 0x5A4D and
  filesize < 800KB and
  $mutex and
  $decrypt and
  pe.imports("kernel32.dll", "CreateRemoteThread")

Nommage, métadonnées et gestion des versions

Une rule de recherche n'est utile que si d'autres personnes peuvent lui faire confiance et la maintenir. Donnez à chaque rule un nom clair avec espace de noms et des meta complets.

  • Enregistrez les hachages des échantillons à partir desquels la rule a été créée
  • Indiquez la famille, l'auteur, la date et une référence
  • Augmentez le champ version lorsque vous affinez la logique

Lorsque la rule se déclenche des mois plus tard, ces métadonnées indiquent à la personne chargée de la réponse ce qu'elle signifie et dans quelle mesure lui faire confiance, transformant une recherche ponctuelle en une détection durable et partageable.

meta:
  family = "X0rLoader"
  author = "ir-team"
  date = "2026-06-04"
  hash = "9f1c...e2"
  version = "2"

Testez avant de faire confiance

Validez toujours une nouvelle rule sur deux corpus :

  • Vrais positifs — chaque échantillon connu de la famille doit correspondre
  • Logiciels légitimes — un vaste ensemble propre (binaires système, applications courantes) doit ne produire aucune correspondance (NOT)

Un seul faux positif sur une DLL Windows peut placer en quarantaine des fichiers critiques dans tout un parc. Exécutez la rule, comptez les résultats, examinez les absences et les détections, puis affinez-la avant un déploiement généralisé.

yara -r family.yar /malware_corpus/   # expect all to hit
yara -r family.yar /clean_corpus/     # expect zero hits

Vérification rapide

Choisissez l'indicateur le plus résilient.

Récapitulatif

La recherche YARA pratique, de bout en bout :

  • Extraire les chaînes ASCII et larges ; conserver les artefacts durables (mutex, clés de configuration, chemins PDB)
  • Contourner l'obfuscation légère avec le modificateur xor ou des motifs encodés
  • Faire correspondre des motifs d'octets de code (routines de déchiffrement/dépaquetage) lorsque les chaînes sont masquées
  • Remplacer par des jokers les octets volatils, conserver les codes d'opération fixes et utiliser des sauts pour les longueurs variables
  • Utiliser l'imphash PE, les sections et les imports ainsi que l'entropy comme signaux structurels
  • Combiner plusieurs indicateurs pour résister aux faux positifs et à l'évasion
  • Toujours tester sur des corpus de la famille et de logiciels légitimes avant le déploiement

Ensuite : exécuter ces rules sur l'ensemble du parc.

Gratuit pour commencer

Apprends Cyber Security Academy avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
76
Leçons
303

Questions Fréquemment Posées

La leçon « Rechercher avec des chaînes et de l’hexadécimal » est-elle gratuite ?

Oui — le texte complet de « Rechercher avec des chaînes et de l’hexadécimal » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Cyber Security Academy, passe à CoddyKit PRO. Le cours Cyber Security Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Rechercher avec des chaînes et de l’hexadécimal » ?

Faire correspondre les artefacts de logiciels malveillants. Tu pratiques Cyber Security Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Cyber Security Academy ?

Aucune expérience préalable n'est requise. Cyber Security Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Rechercher avec des chaînes et de l’hexadécimal » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Cyber Security Academy ?

Oui. Chaque leçon Cyber Security Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. À quoi sert YARA
  2. Syntaxe des règles YARA
  3. Rechercher avec des chaînes et de l’hexadécimal
  4. Mettre les analyses à l’échelle et les automatiser
← Retour à Cyber Security Academy