Le XOR (eXclusive OR ou OU exclusif) est une opération logique binaire qui compare deux bits.
Le résultat est 1 (VRAI) uniquement si les deux bits sont différents. Si les bits sont identiques, le résultat est 0 (FAUX).
Table de vĂ©ritĂ© : | Bit A | Bit B | RĂ©sultat (AâB) | | :--- | :--- | :--- | | 0 | 0 | 0 | | 0 | 1 | 1 | | 1 | 0 | 1 | | 1 | 1 | 0 |
2. La Propriété Magique : La Réversibilité
Le XOR est l'opĂ©ration prĂ©fĂ©rĂ©e des dĂ©veloppeurs de loaders car elle est symĂ©trique. Appliquer deux fois la mĂȘme clĂ© revient Ă retrouver la valeur d'origine.
Chiffrement : MessageâCleË=ChiffreË
DĂ©chiffrement : ChiffreËâCleË=Message
Exemple concret sur un octet :
Octet original : 0101 0101 (0x55)
XOR Résultat : 1111 1111 (0xFF) <-- C'est ce qui est stocké sur le disque.
XOR Ă nouveau : 1111 1111 â 1010 1010 = 0101 0101 (0x55) <-- Le code original est de retour.
3. Pourquoi utiliser le XOR dans un Loader ?
A. Ăvasion de l'Analyse Statique (Signature)
Les antivirus (AV) scannent les fichiers .exe sur le disque à la recherche de séquences d'octets connues (signatures).
Sans XOR : Le shellcode est visible. L'AV crie : "Alerte, je reconnais calc.exe !"
Avec XOR : Les octets sont transformés. L'AV voit des données aléatoires qui ne correspondent à aucune menace connue.
B. Ăvasion de l'Analyse Dynamique (MĂ©moire)
MĂȘme si le fichier est autorisĂ© Ă s'exĂ©cuter, l'AV scanne la RAM. Si le shellcode reste chiffrĂ© dans la zone RW (Read/Write) et n'est dĂ©chiffrĂ© qu'une microseconde avant d'ĂȘtre exĂ©cutĂ©, la fenĂȘtre de dĂ©tection est minuscule.
4. Le Cycle de Vie du Payload Obfusqué
Le processus se déroule en 4 étapes clés :
Obfuscation (Hors-ligne) : On prend le shellcode propre et on le XOR avec une clé. On obtient le payload obfusqué.
Intégration : On insÚre ce payload "brouillé" dans notre code C.
Allocation & Copie : Le loader alloue une zone RW et y copie le payload brouillé.
Routine de deXor (Déchiffrement) : Une boucle parcourt la zone mémoire et applique la clé XOR sur chaque octet pour restaurer le code original directement en mémoire.
5. Points d'attention (OpSec)
Le choix de la clé : Si la clé est trop simple (ex: 0x00), le payload ne change pas. Si elle est trop commune (ex: 0xFF), certains scanners peuvent la deviner.
L'emplacement du deXor : La boucle de déchiffrement doit se faire dans la zone mémoire RW avant de passer en RX. On ne peut pas déchiffrer dans une zone RX car on n'a plus le droit d'écriture !
Résumé des permissions mémoire lors du XOR :
Allocation : PAGE_READWRITE (RW)
Copie : Payload brouillé -> Mémoire.
Déchiffrement : Boucle de XOR (Besoin du droit W).
Protection : PAGE_EXECUTE_READ (RX) (Retrait du droit W).
Exécution : CreateThread.
Last updated