## Volatility3 : Récupération en mémoire d’un fichier TXT fermé
### Contexte
- Image RAM : `challenge_bonus.raw` (archive [[challenge_bonus.7z]])
- Environnement : Docker Desktop + PowerShell (Windows)
- Objectif : retrouver le contenu d’un fichier absent du disque, mais potentiellement présent en mémoire (dump RAM)
### Notes complémentaires
- Toujours monter le dossier courant dans Docker avec `-v "${PWD}:/workspace"` sous PowerShell (attention aux guillemets).
- Utiliser les options `--dump-dir /workspace/recovered` pour récupérer les fichiers dumpés dans un dossier accessible.
- `$MFT` est souvent la dernière chance pour récupérer des fichiers petits et résidants en mémoire.
- Si `dumpfiles` ne fonctionne pas, privilégier la lecture brute via `mftscan.ResidentData`.
## Étapes suivies pour le diagnostic
Installer Volatility 3 en conteneur Docker sous Windows (avec Docker Desktop préinstallé) :
```powershell
docker pull sk4la/volatility3
```
Exécuter un bash Ubuntu et installer `binutils`
```powershell
docker run -it --rm -v "${PWD}:/workspace" ubuntu bash
```
![[_img-memo-volatility-MFTScan.png]]
Quand le bash s'affiche, exécuter les commandes
```bash
apt update && apt install binutils -y
```
### Étapes clés de l’analyse
**Scanner les fichiers en mémoire** : Repérer `Important.txt` dans la liste.
```powershell
docker run -v "${PWD}:/workspace" sk4la/volatility3 -f /workspace/challenge_bonus.raw windows.filescan
```
On trouver un fichier nommé `Important.txt` avec l'offset `0x3fc398d0` (un emplacement précis dans la RAM).
![[_img-memo-volatility-MFTScan-1.png]]
**Essayer d’extraire le fichier** :
```powershell
docker run -v "${PWD}:/workspace" sk4la/volatility3 -f /workspace/challenge_bonus.raw windows.dumpfiles --name Important.txt --dump-dir /workspace/recovered --virtaddr 0x3fc398d0
```
Sans succès je tente également avec `--physaddr 0x3fc398d0` à la place de `--virtaddr 0x3fc398d0`
(Souvent?) impossible si le fichier n’est pas alloué ou s'il n'est pas résidant (ex: effacé, ouvert en mémoire uniquement).
**Explorer la hiérarchie des processus (pstree)** :
```powershell
docker run -v "${PWD}:/workspace" sk4la/volatility3 -f /workspace/challenge_bonus.raw windows.pstree |Select-String "not" -Context 5,5
```
Chercher un éditeur texte (ex : notepad.exe) lié au fichier.
Je découvre "StikyNot.exe", en me documentant c'est pour rédiger des post-it sur le bureau Windows, mais il ne gère pas de fichiers txt.
**Recherche textuelle dans la RAM** : La commande strings permet de parcourir le dump mémoire, mais elle n'est pas dispo sous Windows, donc j'utilise le bash Ubuntu précédemment ouvert :
La commande strings a été préalablement installée avec `binutils` :
```bash
strings challenge_bonus.raw | grep -i "important.txt"
```
On trouve `"C:\Windows\system32\NOTEPAD.EXE" C:\Users\SlimShady\Desktop\Important.txt`. Cela indique que Notepad a ouvert ce fichier, mais n’est plus actif (car absent du `pslist` et du `pstree`)
**Gratter autour des références Notepad et Important.txt**
- Chercher dans la RAM plusieurs lignes autour (ex : 200 lignes après) en `base64` ou en texte brut pour retrouver le contenu.
- Parfois du contenu apparaît, car notepad est encore en mémoire ou si le fichier est résidant.
- Ce n'est pas le cas ici...
**Le rôle de `$MFT` (Master File Table)** en RAM
- `$MFT` contient les métadonnées des fichiers NTFS, parfois le contenu *résidant* des petits fichiers.
- Cela peut aider à récupérer du contenu qui ne se trouve plus dans un fichier alloué.
**Scanner le `$MFT` avec Volatility 3**
```powershell
docker run -v "${PWD}:/workspace" sk4la/volatility3 -f /workspace/challenge_bonus.raw windows.mftscan.MFTScan |select-string "important.txt"
```
Vérifier que `Important.txt` est bien listé.
**Extraire les données résidentes du `$MFT`** avec ResidentData
```powershell
docker run -v "${PWD}:/workspace" sk4la/volatility3 -f /workspace/challenge_bonus.raw windows.mftscan.ResidentData | Select-String -Pattern "Important.txt" -Context 0,20
```
Récupérer le contenu texte directement depuis les entrées `$MFT` (flouté ci-dessous en bas à droite) :
![[_asset-memo-volatility-MFTScan.png]]