C.XORer le payload et ajouter une routine de deXor du payload dans le loader

1.Théorie

Le XOR (eXclusive OR ou OU exclusif) est une opération logique binaire qui compare deux bits.

La rĂšgle d'or

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⊕BA⊕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ˊMessage⊕Cleˊ=Chiffreˊ

  • DĂ©chiffrement : Chiffreˊ⊕Cleˊ=MessageChiffreˊ⊕Cleˊ=Message

Exemple concret sur un octet :

  • Octet original : 0101 0101 (0x55)

  • ClĂ© : 1010 1010 (0xAA)

  • 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 :

  1. Obfuscation (Hors-ligne) : On prend le shellcode propre et on le XOR avec une clé. On obtient le payload obfusqué.

  2. Intégration : On insÚre ce payload "brouillé" dans notre code C.

  3. Allocation & Copie : Le loader alloue une zone RW et y copie le payload brouillé.

  4. 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 :

  1. Allocation : PAGE_READWRITE (RW)

  2. Copie : Payload brouillé -> Mémoire.

  3. Déchiffrement : Boucle de XOR (Besoin du droit W).

  4. Protection : PAGE_EXECUTE_READ (RX) (Retrait du droit W).

  5. Exécution : CreateThread.

6. Le code

Last updated