Solution de Cyrhades pour Analyse mémoire 3/5 - Où est le pansement ?

forensics windows mémoire

5 juin 2025

Récupérer les informations des Threads pour le processus 936.

vol -f /mnt/c/Users/cyrha/Desktop/demo/hackropole/memoire.dmp windows.threads 2>/dev/null | awk '$1 == "Offset" || $2 == 936'

Offset           PID     TID     StartAddress    StartPath                       Win32StartAddress Win32StartPath                CreateTime                      ExitTime
0xa50a26103080.0 936     940     0x7ffd16e9cc70  \Windows\System32\ntdll.dll     0x7ff717e652e0  \Windows\System32\svchost.exe   2025-04-01 22:10:44.000000 UTC  1600-09-07 05:53:23.000000 UTC
0xa50a26147040   936     500     0x7ffd16e9cc70  \Windows\System32\ntdll.dll     0x7ffd16e9d110  \Windows\System32\ntdll.dll     2025-04-01 22:10:44.000000 UTC  1600-09-07 05:53:23.000000 UTC
0xa50a2619c080   936     620     0xb88513975c60  -       0x7ffd16e9d110  \Windows\System32\ntdll.dll     2025-04-01 22:10:44.000000 UTC  1600-09-07 05:53:23.000000 UTC
0xa50a26224080   936     872     0x7ffd16e9cc70  \Windows\System32\ntdll.dll     0x7ffd16979c60  \Windows\System32\combase.dll   2025-04-01 22:10:44.000000 UTC  1600-09-07 05:53:23.000000 UTC
0xa50a26211080   936     472     0x7ffd16e9cc70  \Windows\System32\ntdll.dll     0x7ffd11b88f00  \Windows\System32\dab.dll       2025-04-01 22:10:44.000000 UTC  1600-09-07 05:53:23.000000 UTC
0xa50a2620b080   936     1028    0x7ffd16e9cc70  \Windows\System32\ntdll.dll     0x7ffd122bdeb0  \Windows\System32\PsmServiceExtHost.dll 2025-04-01 22:10:44.000000 UTC  1600-09-07 05:53:23.000000 UTC
0xa50a209d0080   936     1416    0x7ffd16e9cc70  \Windows\System32\ntdll.dll     0x7ffd16e9d110  \Windows\System32\ntdll.dll     2025-04-01 22:10:45.000000 UTC  1600-09-07 05:53:13.000000 UTC
0xa50a1f94f080   936     4500    0x7ffd16e9cc70  \Windows\System32\ntdll.dll     0x7ffd16e9d110  \Windows\System32\ntdll.dll     2025-04-01 22:10:52.000000 UTC  1600-09-07 05:53:12.000000 UTC
0xa50a2978b080   936     7148    0x7ffd16e9cc70  \Windows\System32\ntdll.dll     0x7ffd16e9d110  \Windows\System32\ntdll.dll     2025-04-01 22:11:01.000000 UTC  1600-09-07 05:53:28.000000 UTC
0xa50a29dc2080   936     7484    0x7ffd16e9cc70  \Windows\System32\ntdll.dll     0x7ffd16e9d110  \Windows\System32\ntdll.dll     2025-04-01 22:15:01.000000 UTC  1600-09-07 05:53:29.000000 UTC
0xa50a1f8f3040   936     1296    0x7ffd16e9cc70  \Windows\System32\ntdll.dll     0x7ffd16e9d110  \Windows\System32\ntdll.dll     2025-04-01 22:17:50.000000 UTC  1600-09-07 05:53:12.000000 UTC

Le TID 940 à une adresse commencant par 0x7ff717 tout les autres TID commencent par 0x7ffd16

On peut imaginer que 0x7ffd16 est certainement la liaison des DLLs systèmes partagées. et que 0x7ff717 est propablement l’emplacment où se trouvent les fonctions de l’exécutable.

Donc j’ai commencé à effectuer quelques recherche car 0x7ff717e652e0 ne semble pas correspondre à virtual_address : En lisant sur wikipedia, ça m’a éclairé un peu mais ça ne m’a pas permis de comprendre ce que je cherchais exactement.

Durant mes différentes recherches,e je suis tombé sur : “PhysicalStart doit être aligné sur une limite de 4 Kio et ne doit pas être supérieur à 0xffffffffffffff000.”

J’ai donc demandé à ChatGPT à quoi correspondait “0xffffffffffffff000”

 Que signifie 0xFFFFFFFFFFFFF000 ?
📌 En binaire :
0xfffffffffffff000 = 1111...1111 000000000000
                     (52 bits à 1) (12 bits à 0)
Il s'agit donc d'un masque 64 bits où les 12 bits de poids faible sont à 0, et les autres à 1.

Les systèmes modernes utilisent des pages mémoire de 4 Ko, soit 4096 octets = 2^12.

Aligner une adresse sur une page
aligned_address = address & 0xfffffffffffff000;

Je me fais un p’tit script PHP pour obtenir l’adresse:

<?php 
printf("0x%016x", 0x7ff717e652e0 & 0xfffffffffffff000);

<thread_id> est l’identifiant du Thread (TID) malveillant et <virtual_address> est l’adresse virtuelle (dans le contexte du processus malveillant) du début de la page mémoire (PTE) modifiée.