Vous êtes sur la page 1sur 14

Restauration logicielle de fichiers effacs sur un disque dur NTFS

Aspects techniques

Nicolas Paglieri
www.ni69.info
18 juin 2009

Introduction
La perte ou la suppression accidentelle de donnes numriques est un problme courant dans notre socit de
plus en plus rgie par linformatique. Cependant ce problme peut savrer catastrophique suivant
limportance de linformation disparue. Dans un environnement bas sur le systme de fichiers NTFS, quand un
fichier est supprim du disque (mme aprs le vidage de la corbeille sous Windows) il na en ralit pas
totalement disparu. Il existe en effet un moyen de restaurer linformation auparavant contenue dans le fichier,
sous certaines conditions qui seront explicites lors de cette tude.
Nous axerons ce dossier sur la restauration dun fichier effac sur un disque dur NTFS partir dexemples
concrets de donnes. Une tude exhaustive du fonctionnement du systme de fichiers NTFS est ici exclue.
Nous nous limiterons lanalyse des seules notions, caractristiques et seuls aspects techniques essentiels
latteinte de cet objectif.
Ce document sert de documentation un programme ralis en Delphi et disponible sur mon site internet.

1/14

Pr-requis techniques
Bien que les donnes stockes sur le disque le soient en pratique sous forme binaire, nous en adopterons une
reprsentation hexadcimale, bien plus lisible. Chaque octet (1 octet = 8 bits) sera ainsi symbolis par 2
caractres hexadcimaux. Il en sera galement propos une reprsentation dans lencodage ASCII. Un aperu
des donnes sera prsent chaque fois que cela sera jug ncessaire la comprhension des concepts
voqus. Les aperus de donnes se lisent ligne par ligne de gauche droite et de haut en bas. La colonne
Offset gauche reprsente ladresse du premier octet de chaque ligne. Le complment dadresse (octets
suivants) est situ au dessus de chaque colonne. La reprsentation ASCII de chaque ligne est affiche droite.

Offset

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

000000000

EB 52 90 4E 54 46 53 20 20 20 20 00 02 08 00 00

R.NTFS

000000010

00 00 00 00 00 F8 00 00 3F 00 FF 00 3F 00 00 00

.......?..?...

000000020

00 00 00 00 80 00 80 00 25 B9 DF 01 00 00 00 00

......%.....

000000030

00 00 0C 00 00 00 00 00 92 FB 1D 00 00 00 00 00

..............

ASCII
.....

Nous prendrons comme convention 1Ko = 1KB = 1024 octets. Les diffrents types de donnes employs sont :

Nom
Byte
Word
DWord
Int64

Mmoire occupe
1 octet
2 octets
4 octets
8 octets

Les nombres hexadcimaux, pour les diffrencier des nombres dcimaux, seront prcds du caractre $
lorsquil en sera fait mention en dehors des aperus de donnes, eux toujours reprsents en hexadcimal.
Indications sur la typographie : Les objets informatiques, tels les types de donnes, les noms spcifiques des
champs et paramtres, les noms et attributs de fichiers, les nombres hexadcimaux seront toujours prsents
selon la police dcriture Courier New . Tout le reste, tels les textes explicatifs, remarques, nombres
dcimaux, sera typographi avec la police dcriture courante Calibri.
Remarque importante sur lencodage des donnes little-endian : Loctet de poids le plus faible est stock en
premier. Ainsi par exemple le nombre hexadcimal $F512A83E (DWord) sera reprsent en mmoire par :
3E A8 12 F5

Toutes les dates sont stockes en mmoire sous la forme dun Int64, dnombrant le nombre de centaines de
er
nanosecondes coules depuis le 1 janvier 1601 selon la convention.

2/14

Gnralits sur le systme de fichiers NTFS


NTFS (NT File System) est un systme de fichiers, c'est--dire une structure de donnes rgissant lorganisation
interne des donnes sur un disque logique, autrement appel volume logique.
Chaque disque est divis en secteurs (dont la taille est gnralement
Un cluster runit un certain nombre de secteurs, variable suivant le matriel.

Taille du volume
moins de 512 Mo
entre 512 Mo et 1 Go
entre 1 Go et 2 Go
plus de 2 Go

Taille de cluster
512 octets
1 Ko
2 Ko
4 Ko

de

512

octets).

Nombre de secteurs
1
2
4
8

Deux moyens permettent de reprer un cluster sur le disque :


LCN (Logical Cluster Number) : Numro du cluster absolu par rapport au dbut du disque (LCN 0)
VCN (Virtual Cluster Number) : Numro du cluster relatif par rapport au cluster prcdemment lu

On peut schmatiser de manire simplifie un disque logique NTFS :

Secteur de Boot
Le premier secteur de tout disque logique correctement format (que le format de fichiers soit NTFS ou non)
est une zone dite Secteur de Boot, contenant des informations gnrales sur le disque. Cest une squence
damorage de taille fixe, situe au tout dbut du disque. Nous dtaillerons uniquement les informations tant
ncessaires pour la suite. Certaines notions relatives la MFT seront expliques dans la partie suivante.

3/14

Structure du secteur de Boot :


Nom

Type

_jmpcode

array[1..3] of Byte

Reprage

cOEMID

array[1..8] of Byte

wBytesPerSector

Word

bSectorsPerCluster

Byte

wSectorsReservedAtBegin

Word

Mbz1

Byte

Mbz2

Word

Reserved1

Word

bMediaDescriptor

Byte

Mbz3

Word

wSectorsPerTrack

Word

wSides

Word

dwSpecialHiddenSectors

DWord

Reserved2

DWord

Reserved3

DWord

TotalSectors

Int64

MftStartLcn

Int64

Mft2StartLcn

Int64

ClustersPerFileRecord

DWord

ClustersPerIndexBlock

DWord

VolumeSerialNumber

Int64

_loadercode

array[1..430] of Byte

wSignature

Word

Aperu du secteur de boot dun disque NTFS :


Offset
000000000
000000010
000000020
000000030
000000040
000000050
000000060
000000070
000000080
000000090
0000000A0
0000000B0
0000000C0
0000000D0
0000000E0
0000000F0
000000100
000000110
000000120
000000130
000000140
000000150
000000160
000000170
000000180
000000190
0000001A0
0000001B0
0000001C0
0000001D0
0000001E0
0000001F0

00
EB
00
00
00
F6
00
8E
10
08
0F
B7
16
74
03
00
0F
B4
66
66
1A
01
FF
C3
B4
EB
65
20
65
45
53
61
00

01
52
00
00
00
00
00
D8
E8
CD
B6
C9
24
04
06
66
85
42
58
F7
00
02
06
A0
01
F2
20
6D
73
6E
75
72
00

02
90
00
00
0C
00
00
E8
53
13
D1
66
00
FE
1C
50
0C
8A
66
F1
86
CD
10
F8
8B
C3
64
61
74
74
70
72
00

03
4E
00
00
00
00
00
16
00
73
80
F7
CD
06
00
06
00
16
58
FE
D6
13
00
01
F0
0D
69
6E
20
72
70
65
00

04
54
00
80
00
01
FA
00
68
05
E2
E1
13
14
66
53
E8
24
1F
C2
8A
0F
FF
E8
AC
0A
73
71
63
65
72
72
00

05
46
F8
00
00
00
33
B8
00
B9
3F
66
72
00
3B
66
B3
00
EB
8A
16
82
0E
09
3C
45
71
75
6F
7A
20
0D
00

06
53
00
80
00
00
C0
00
0D
FF
F7
A3
0F
C3
06
68
FF
16
2D
CA
24
19
0E
00
00
72
75
65
6D
20
70
0A
00

07
20
00
00
00
00
8E
0D
68
FF
E2
20
81
66
20
10
80
1F
66
66
00
00
00
A0
74
72
65
00
70
43
6F
00
00

08
20
3F
25
92
37
D0
8E
6A
8A
86
00
FB
60
00
00
3E
8B
33
8B
8A
8C
0F
FB
09
2E
00
0D
72
74
75
0D
83

09
20
00
B9
FB
6E
BC
C0
02
F1
CD
C3
55
1E
0F
01
14
F4
D2
D0
E8
C0
85
01
B4
20
0D
0A
65
72
72
0A
99

4/14

0A
20
FF
DF
1D
52
00
33
CB
66
C0
B4
AA
06
82
00
00
CD
66
66
C0
05
6F
E8
0E
6C
0A
4E
73
6C
20
00
A8

0B
00
00
01
00
48
7C
DB
8A
0F
ED
41
75
66
3A
80
00
13
0F
C1
E4
20
FF
03
BB
65
4E
54
73
2B
72
00
BE

0C
02
3F
00
00
A3
FB
C6
16
B6
06
BB
09
A1
00
3E
0F
66
B7
EA
06
00
07
00
07
63
54
4C
82
41
65
00
00

0D
08
00
00
00
52
B8
06
24
C6
41
AA
F6
10
1E
14
84
58
0E
10
0A
8E
1F
FB
00
74
4C
44
00
6C
64
00
00

0E
00
00
00
00
48
C0
0E
00
40
66
55
C1
00
66
00
61
5B
18
F7
CC
C0
66
EB
CD
75
44
52
0D
74
82
00
55

0F
00
00
00
00
6A
07
00
B4
66
0F
8A
01
66
6A
00
00
07
00
36
B8
66
61
FE
10
72
52
20
0A
2B
6D
00
AA

ASCII
R.NTFS
.....
.......?..?...
......%.....
..............
.......7nRHRHj
....3.|.
....3...
.S.h..hj..$.
..s.f.@f
.?.Af.
ff .AU
.$..r..Uu..
t....f`..f..f
....f;. ..:..fj
.fP.Sfh....>...
...>....a.
B.$....fX[.
fXfX.-f3f....
fff.6
...$...
....... .f
.......o..fa
... ...
.<.t.....
..Err. lectur
e disque...NTLDR
manque...NTLDR
est compress...
Entrez Ctrl+Alt+
Suppr pour redm
arrer...........
..........U

Le champ cOEMID permet de dire quil sagit bien l dun disque NTFS.
Le champ wBytesPerSector donne le nombre doctets par secteur. On retrouve la valeur $200 = 512, attendue.
Le champ bSectorsPerCluster donne le nombre de secteurs par cluster. Il y en a ici 8.
Les champs MftStartLcn et ClustersPerFileRecord seront expliqus dans la partie suivante.

MFT (Master File Table)


La MFT (Master File Table) est une spcificit du systme de fichiers NTFS. Il sagit concrtement dun tableau
denregistrements de taille fixe, dont chaque enregistrement reprsente un unique objet du disque, stockant
les informations le concernant, telles son nom, sa taille, ses attributs de scurit, son emplacement dans
larborescence, les donnes le constituant, ses diffrentes dates de cration et modification Les 16 premiers
enregistrements sont rservs des fichiers de mtadonnes spcifiques au systme de fichiers :
$MFT

$MFTMIRR

$LOGFILE

$VOLUME

$ATTRDEF

$BITMAP

$BOOT

$BADCLUS

$SECURE

$UPCASE

$EXTEND

Le champ MftStartLcn vu au paragraphe prcdent donne accs au LCN de la MFT. Pour obtenir son adresse
physique, il suffit de multiplier cette valeur par wBytesPerSector puis par bSectorsPerCluster.
On obtient ainsi ici : $C0000 $200 $8 = $C0000000
Le champ ClustersPerFileRecord est plus problmatique : cest une valeur hexadcimale signe. En effet
quand la taille dun cluster est suprieure la taille dun enregistrement (et cest trs souvent le cas), on ne
peut pas exploiter directement sa valeur. Nous poserons une nouvelle variable BytesPerFileRecord qui
contiendra le nombre doctets par enregistrement, plus simple utiliser.
Si ClustersPerFileRecord < $80, BytesPerFileRecord = ClustersPerFileRecord BytesPerCluster
Sinon, si ClustersPerFileRecord $80, BytesPerFileRecord = 1 lsh ($100 - ClustersPerFileRecord)
On a donc dans notre exemple BytesPerFileRecord = 1 lsh ($100 $F6) = $400 = 1024 octets

Premire approche du problme


Le processus de restauration sera donc le suivant : Il sagira de parcourir tous les enregistrements de la MFT
la recherche de lentre correspondant au fichier supprim que nous voulons restaurer, localiser grce
lenregistrement les donnes le constituant sur le disque, et enfin les crire dans un nouveau fichier.

5/14

Notion dEnregistrement
Tous les enregistrements de la MFT (y compris les 16 premiers malgr leur rle particulier) sont composs
dune structure identique : un entte, suivi dattributs conscutifs, et dun marqueur de fin ($FFFFFFF).
Voici la structure des enttes denregistrements :

Offset
000000000
000000010
000000020
000000030

00
46
01
00
76

Nom

Type

Identifier

array[1..4] of Byte

UsaOffset

Word

UsaCount

Word

LSN

Int64

SequenceNumber

Word

ReferenceCount

Word

AttributesOffset

Word

Flags

Word

BytesInUse

DWord

BytesAllocated

DWord

BaseFileRecord

Int64

NextAttributeID

Word

01
49
00
00
02

Padding

Word

RecordNumber

DWord

UsaNumber

Word

UsaArray

array of Word

02
4C
01
00
72

03
45
00
00
00

04
30
38
00
00

05
00
00
00
00

06
03
01
00
00

07
00
00
00
00

08
89
D8
06

09
2E
01
00

0A
51
00
00

Reprage

0B
25
00
00

0C
00
00
1E

0D
00
04
00

0E
00
00
00

0F
00
00
00

ASCII
FILE0....Q%....
....8..........
................
v.r.....

Le champ Identifier contient toujours FILE quand lenregistrement dcrit un fichier ou un rpertoire (si un
problme a t dtect par chkdsk dans lenregistrement, la valeur devient BAAD. Certains enregistrements
spcifiques au systme dexploitation se voient galement attribuer dautres valeurs comme INDX ).
Le champ Flags caractrise ltat de disponibilit et le genre du fichier dcrit par lenregistrement :

Valeur de Flags
$00
$01
$02
$03

Signification
Fichier supprim
Fichier disponible
Rpertoire supprim
Rpertoire disponible

6/14

Notion dAttribut
Chaque attribut est lui-mme constitu
Voici la structure dentte des attributs :

Offset
000000000

dun

entte

Nom

Type

AttributeType

DWord

Length

DWord

NonResident

Byte

NameLength

Byte

NameOffset
Flags

Word
Word

AttributeNumber

Word

et

dune

squence

de

donnes.

Reprage

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00

ASCII
....`...........

Il existe plusieurs types dattributs, reprs chacun par une valeur diffrente de AttributeType :

AttributeType

Nom

$10
$20
$30
$40
$50
$60
$70
$80
$90
$A0
$B0
$C0
$D0
$E0
$F0
$100

StandardInformation
AttributeList
FileName
ObjectId
SecurityDescriptor
VolumeName
VolumeInformation
Data
IndexRoot
IndexAllocation
Bitmap
ReparsePoint
EAInformation
EA
PropertySet
LoggedUtilityStream

Le champ Length donne la longueur de lattribut en octets, en incluant lentte de lattribut dans le dcompte.
Un attribut peut tre dit rsident (les donnes sont alors contenues directement dans lattribut), ou bien
non-rsident (les donnes sont trop longues pour tre contenues directement dans lattribut qui a une
longueur limite par la taille de lenregistrement, et sont ainsi places ailleurs sur le disque ; on dispose alors
uniquement de leur emplacement sur le disque sous forme dune liste chane nomme DataRuns qui sera
dtaille plus loin). Le champ NonResident renseigne sur ce caractre ($00 = rsident ; $01 = non-rsident).
Un attribut peut tre dit nomm ou non-nomm. Dans ce second cas la valeur du champ NameLength est $00.

7/14

Structure dattribut rsident

Offset
000000000
000000010
000000020
000000030
000000040
000000050

00
10
48
00
30
00
00

Nom

Type

[Entte Atttibut]

array[1..16] of Byte

ValueLength

DWord

ValueOffset

Word

Flags

Byte

01
00
00
1D
51
00
00

Padding

Byte

Value

array of Byte

02
00
00
8F
7B
00
00

03
00
00
9B
C5
00
00

04
60
18
6D
A9
00
00

05
00
00
68
DC
00
00

06
00
00
C9
C9
00
00

07
00
00
01
01
00
00

08
00
60
00
00
00
00

09
00
33
1D
20
00
00

0A
00
7A
8F
00
00
00

0B
00
56
9B
00
00
00

Reprage

0C
00
68
6D
00
17
00

0D
00
68
68
00
01
00

0E
00
C9
C9
00
00
00

0F
00
01
01
00
00
00

ASCII
....`...........
H.......`3zVhh.
...mh....mh.
0Q{.. ......
................
................

Le champ ValueLength donne la longueur du champ Value, ce dernier contenant lui les donnes en ellesmmes, dont le contenu varie selon le type dattribut considr.

Structure dattribut non rsident

Offset
000000000
000000010
000000020
000000030
000000040

00
80
00
40
42
31

Nom

Type

[Entte Atttibut]

array[1..16] of Byte

LowVCN

Int64

HighVCN

Int64

DataRunsOffset

Word

CompressionUnit

Byte

Padding

array[1..5] of Byte

AllocatedSize

Int64

DataSize

Int64

InitializedSize

Int64

CompressedSize

Int64

Name

array of Byte

DataRuns

array of Byte

01
00
00
00
4D
05

02
00
00
00
00
09

03
00
00
00
00
89

04
48
00
00
00
00

05
00
00
00
00
00

06
00
00
00
00
01

07
00
00
00
00
00

08
01
04
00
42

09
00
00
50
4D

0A
00
00
00
00

Reprage

0B
00
00
00
00

0C
00
00
00
00

0D
00
00
00
00

0E
00
00
00
00

0F
00
00
00
00

ASCII
...H...........
................
@........P......
BM......BM......
1......

CompressedSize nest prsent que si les donnes sont compresses, c'est--dire si le champ CompressionUnit

a une valeur diffrente de $00 (ce nest pas le cas dans lexemple).
Name nest prsent que si lattribut est nomm, tat connu par lentte (ce nest pas le cas dans lexemple).
HighVCN ne nous sera utile que lorsque nous aurons besoin de connatre la taille de la MFT (dtails plus loin).
DataSize donne la longueur totale des donnes constituant le fichier.
Nous analyserons par la suite uniquement les attributs de type StandardInformation (rsident),
FileName (rsident), et Data (rsident ou non rsident) partir dun exemple denregistrement de fichier.

8/14

Exemples dAttributs
Attribut StandardInformation
Cet attribut est toujours rsident quel que soit lenregistrement. Structure du champ Value correspondant :

Offset
000000000
000000010
000000020
000000030
000000040

00
60
00
00
00
00

Nom

Type

CreationTime

Int64

ChangeTime

Int64

LastWriteTime

Int64

LastAccessTime

Int64

FileAttributes

DWord

Alignment

array[1..3] of DWord

QuotaID

DWord

SecurityID

DWord

QuotaCharge

Int64

USN

Int64

01
33
1D
20
00
00

02
7A
8F
00
00
00

03
56
9B
00
00
00

04
68
6D
00
17
00

05
68
68
00
01
00

06
C9
C9
00
00
00

07
01
01
00
00
00

08
00
30
00
00

09
1D
51
00
00

0A
8F
7B
00
00

Reprage

0B
9B
C5
00
00

0C
6D
A9
00
00

0D
68
DC
00
00

0E
C9
C9
00
00

0F
01
01
00
00

ASCII
`3zVhh....mh.
...mh.0Q{.
. ..............
................
........

Le Champ CreationTime renseigne sur la date de cration du fichier, ChangeTime sur celle de dernire
modification, et LastAccessTime sur celle du dernier accs.

Attribut FileName
Cet attribut est toujours rsident quel que soit lenregistrement. Il peut tre prsent plusieurs fois dans un
mme enregistrement (le nom du fichier peut ainsi tre stock dans des espaces de nommage diffrents voir
plus loin). Voici la structure du champ Value correspondant :

Offset
000000000
000000010
000000020
000000030
000000040
000000050

Nom

Type

DirectoryFileReferenceNumber

Int64

CreationTime

Int64

00
C2
00
00
00
0B
2E

Reprage

ChangeTime

Int64

LastWriteTime

Int64

LastAccessTime

Int64

AllocatedSize

Int64

DataSize

Int64

FileAttributes

DWord

AlignmentOrReserved

DWord

NameLength

Byte

NameType

Byte

Name

array of Word

01
16
31
31
00
03
00

02
00
8C
8C
00
55
65

03
00
2C
2C
00
00
00

04
00
96
96
00
6E
78

05
00
DC
DC
00
00
00

06
0D
C9
C9
00
65
65

07
00
01
01
00
00
00

08
00
00
00
20
72

09
31
31
00
20
00

9/14

0A
8C
8C
00
00
61

0B
2C
2C
00
00
00

0C
96
96
00
00
73

0D
DC
DC
00
00
00

0E
C9
C9
00
00
65

0F
01
01
00
00
00

ASCII
........1,.
.1,..1,.
.1,.........
........ ......
..U.n.e.r.a.s.e.
..e.x.e.

Les quatre premiers octets du champ DirectoryFileReferenceNumber correspondent au numro de


lenregistrement du rpertoire parent dans la MFT par rapport au premier enregistrement auquel est associ le
numro 0 (ici, ce numro est ainsi $16C2 = 5826). Les champs CreationTime, ChangeTime, LastWriteTime,
LastAccessTime, AllocatedSize et DataSize ne fournissent pas des informations correctes car elles ne sont
mises jour que lors du changement du nom du fichier, non lors dun changement dans son contenu (se
rfrer aux champs de mme nom dans les attributs StandardInformation et Data).
NameLength reprsente la longueur du nom de fichiers. NameType reprsente lespace de nommage.
NameType
$00
$01
$02
$03

Espace de Nommage
POSIX
WIN32
DOS
WIN32 & DOS

Le champ Name contient pour finir le nom de fichier au format Unicode.

Attribut Data
Cet attribut est selon les cas soit rsident, soit non-rsident non-nomm. Tout dpend de la quantit de
donnes constituant le fichier stocker en mmoire. Dans le cas o lattribut est rsident, le contenu du champ
Value est exactement le contenu du fichier. Dans le cas contraire, le champ Value est occup par une liste
chane (DataRuns) dcrivant les emplacements du disque o trouver les donnes.

Notion de DataRuns
Les DataRuns sont des listes chanes dcrivant lemplacement de donnes sur le disque. Les attributs non
rsidents sont stocks dans des Runs (intervalles de clusters). Chaque Run est reprsent par ladresse de son
premier cluster, ainsi que sa longueur totale en clusters. Le premier octet de chaque Run renseigne sur la taille
des deux champs qui le suivent : Longueur et Position. Le champ Position (ici $326A13) donne ladresse du
dbut des donnes (relativement ladresse du Run prcdent, ici relativement au LCN 0 car il sagit du
premier Run), et le champ Longueur (ici $1C7) indique la quantit de clusters lire partir de cet emplacement.
Les DataRuns peuvent ainsi dcrire lemplacement de plusieurs blocs de donnes, mme disjoints, sur le
disque. Loctet nul ($00) indique la fin de la chane. Les blocs de donnes ainsi lus et mis bout bout, puis
tronqus la taille totale du fichier donne par le champ DataSize (car on lit les donnes par clusters et la
taille dun fichier nen reprsente pas toujours un multiple) permettent de reconstituer le contenu du fichier.

Ce systme permet de reprsenter la fois des fichiers normaux, mais aussi des fichiers compresss,
fragments, ou creux.

10/14

Notion de Fixup
Le systme de fichiers NTFS est dot dun procd de dtection derreurs dans les clusters du disque,
permettant une protection de lintgrit des donnes. Lentte de chaque enregistrement contient un lment
de type Word nomm UsaNumber (Update Sequence Number), et une chane dlments Word nomme
UsaArray (Update Sequence Array). La longueur totale des deux champs UsaNumber et UsaArray mis bout
bout (en nombre de Word) est donne par UsaCount. Voir la partie Notion dEnregistrement pour plus de dtails
sur les positions des champs.
Lors de lcriture de donnes dans un enregistrement, les deux derniers octets de chaque secteur composant
lenregistrement sont copis les uns la suite des autres dans la chane UsaArray, puis sont remplacs par la
valeur de UsaNumber. A chaque nouvelle criture, UsaNumber est incrment de un.
Lors de la lecture des enregistrements directement partir du disque, il est donc ncessaire de tenir compte de
cette particularit afin de lire des donnes correctes. Il faut donc, aprs avoir lu lintgralit de
lenregistrement, vrifier que les deux derniers octets de chaque secteur sont bien identiques la valeur de
UsaNumber, puis replacer les lments de UsaArray leur place initiale (dernier Word de chaque secteur).
Lopration sappelle un Fixup, et doit tre ralise avant chaque tude de donnes dun enregistrement, sans
quoi les donnes seraient impropres lanalyse.
Voici un aperu des donnes initialement prsentes sur le disque, puis des donnes une fois le Fixup ralis.
Sont reprsents lentte de lenregistrement ainsi que les deux derniers octets de chaque secteur. On
considre ici que lenregistrement, de 1024 octets, comporte deux secteurs de 512 octets (cas le plus courant).
Le champ UsaNumber est surlign en . Le champ UsaArray est surlign en .
Avant FixUp (donnes protges) :
Offset
000000000
000000010
000000020
000000030

00
46
01
00
76

01
49
00
00
02

02
4C
01
00
72

03
45
00
00
00

04
30
38
00
00

05
00
00
00
00

06
03
01
00
00

07
00
00
00
00

08
89
D8
06

09
2E
01
00

0A
51
00
00

0B
25
00
00

0C
00
00
1E

0D
00
04
00

0E
00
00
00

0F
00
00
00

ASCII
FILE0....Q%....
....8..........
................
v.r.....

[Fin du Secteur n1 :] 76 02

v.r.

0000001F0

0000003F0

[Fin du Secteur n2 :] 76 02

v.r.

Aprs FixUp (donnes correctes) :


Offset
000000000
000000010
000000020
000000030

00
46
01
00
76

01
49
00
00
02

02
4C
01
00
72

03
45
00
00
00

04
30
38
00
00

05
00
00
00
00

06
03
01
00
00

07
00
00
00
00

08
89
D8
06

09
2E
01
00

0F
00
00
00

ASCII
FILE0....Q%....
....8..........
................
v.r.....

0000001F0

[Fin du Secteur n1 :] 72 00

v.r.

0000003F0

[Fin du Secteur n2 :] 00 00

v.r.

11/14

0A
51
00
00

0B
25
00
00

0C
00
00
1E

0D
00
04
00

0E
00
00
00

Aperu dun enregistrement de fichier rsident


Enregistrement de 1024 octets sur deux secteurs de 512 octets. Lentte et les diffrents attributs sont colors.

Offset
0C09B0800
0C09B0810
0C09B0820
0C09B0830
0C09B0840
0C09B0850
0C09B0860
0C09B0870
0C09B0880
0C09B0890
0C09B08A0
0C09B08B0
0C09B08C0
0C09B08D0
0C09B08E0
0C09B08F0
0C09B0900
0C09B0910
0C09B0920
0C09B0930
0C09B0940
0C09B0950
0C09B0960
0C09B0970
0C09B0980
0C09B0990
0C09B09A0
0C09B09B0
0C09B09C0
0C09B09D0
0C09B09E0
0C09B09F0
0C09B0A00
0C09B0A10
0C09B0A20
0C09B0A30
0C09B0A40
0C09B0A50
0C09B0A60
0C09B0A70
0C09B0A80
0C09B0A90
0C09B0AA0
0C09B0AB0
0C09B0AC0
0C09B0AD0
0C09B0AE0
0C09B0AF0
0C09B0B00
0C09B0B10
0C09B0B20
0C09B0B30
0C09B0B40
0C09B0B50
0C09B0B60
0C09B0B70
0C09B0B80
0C09B0B90
0C09B0BA0
0C09B0BB0
0C09B0BC0
0C09B0BD0
0C09B0BE0
0C09B0BF0

00
46
0C
00
02
00
40
80
20
00
00
00
50
20
C0
25
0C
31
30
7A
C0
20
28
20
6D
46
43
74
00
C1
80
25
20
69
FF
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

01
49
00
00
00
00
E7
5E
20
00
00
00
23
71
A2
00
02
00
00
00
A2
71
00
20
00
00
00
00
00
BB
00
00
63
63
FF
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

02
4C
02
00
20
00
4B
68
00
00
00
00
00
EC
D9
00
45
2E
00
00
D9
EC
00
00
70
69
6F
69
00
74
00
00
6F
68
FF
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

03
45
00
00
66
00
BA
43
00
00
00
00
00
26
3F
00
00
00
00
00
3F
26
00
00
00
00
00
63
00
11
00
00
6E
69
FF
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

04
30
38
00
00
00
FB
FC
00
65
00
00
00
FC
FC
00
58
54
98
18
FC
FC
00
00
6C
63
75
69
00
C4
40
18
74
65
82
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

05
00
00
00
00
00
EC
EC
00
01
00
00
00
EC
EC
00
00
00
00
00
EC
EC
00
00
00
00
00
20
00
4A
00
00
65
72
79
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

06
03
01
00
00
00
C9
C9
00
00
00
05
01
C9
C9
00
45
58
00
01
C9
C9
00
00
65
68
72
6C
06
DE
00
00
6E
20
47
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

07
00
00
00
00
00
01
01
00
00
00
00
00
01
01
00
00
00
00
00
01
01
00
00
00
00
00
65
00
11
00
00
75
74
11
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

08
90
18
07
10
48
20
C0
00
00
30
5A
C0
20
28
20
4D
54
00
50
20
C0
25
1C
20
69
74
40
10
B9
00
56
20
65
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

09
D1
02
00
00
00
71
A2
00
00
00
00
A2
71
00
20
00
00
00
23
71
A2
00
01
00
00
00
00
00
45
00
6F
64
78
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

12/14

0A
6A
00
00
00
00
EC
D9
00
00
00
00
D9
EC
00
00
50
69
00
00
EC
D9
00
45
64
65
2E
00
00
08
18
69
65
74
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

0B
25
00
00
00
00
26
3F
00
00
00
00
3F
26
00
00
00
00
00
00
26
3F
00
00
00
00
00
00
00
00
00
63
20
65
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

0C
00
00
C2
60
18
FC
FC
00
00
78
18
FC
FC
00
00
4C
63
00
00
FC
FC
00
78
65
72
74
28
18
27
00
69
63
2E
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

0D
00
04
26
00
00
EC
EC
00
00
00
00
EC
EC
00
00
00
00
00
00
EC
EC
00
00
00
00
00
00
00
A3
00
20
65
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

0E
00
00
00
00
00
C9
C9
00
00
00
01
C9
C9
00
00
7E
68
04
01
C9
C9
00
65
20
20
78
00
00
72
01
6C
02
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
02

0F
00
00
00
00
00
01
01
00
00
00
00
01
01
00
00
00
00
00
00
01
01
00
00
00
00
00
00
00
D6
00
65
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

ASCII
FILE0....j%....
....8...........
............&..
.. f........`...
........H.......
@K. q&.
^hC.?.
..............
....e...........
........0...x...
........Z.......
P#......?.
q&. q&.
?.(.......
%....... ......
..E.X.E.M.P.L.~.
1...T.X.T.i.c.h.
0..............
z.......P#......
?. q&.
q&.?.
(.......%.......
........E.x.e.
m.p.l.e. .d.e. .
F.i.c.h.i.e.r. .
C.o.u.r.t...t.x.
t.ici le@...(...
................
t.J.E..'r
...@...........
%.......Voici le
contenu de ce..
ichier texte....
yG.........
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................

Aperu dun enregistrement de fichier non rsident


Enregistrement de 1024 octets sur deux secteurs de 512 octets. Lentte et les diffrents attributs sont colors.

Offset
0C0C5E000
0C0C5E010
0C0C5E020
0C0C5E030
0C0C5E040
0C0C5E050
0C0C5E060
0C0C5E070
0C0C5E080
0C0C5E090
0C0C5E0A0
0C0C5E0B0
0C0C5E0C0
0C0C5E0D0
0C0C5E0E0
0C0C5E0F0
0C0C5E100
0C0C5E110
0C0C5E120
0C0C5E130
0C0C5E140
0C0C5E150
0C0C5E160
0C0C5E170
0C0C5E180
0C0C5E190
0C0C5E1A0
0C0C5E1B0
0C0C5E1C0
0C0C5E1D0
0C0C5E1E0
0C0C5E1F0
0C0C5E200
0C0C5E210
0C0C5E220
0C0C5E230
0C0C5E240
0C0C5E250
0C0C5E260
0C0C5E270
0C0C5E280
0C0C5E290
0C0C5E2A0
0C0C5E2B0
0C0C5E2C0
0C0C5E2D0
0C0C5E2E0
0C0C5E2F0
0C0C5E300
0C0C5E310
0C0C5E320
0C0C5E330
0C0C5E340
0C0C5E350
0C0C5E360
0C0C5E370
0C0C5E380
0C0C5E390
0C0C5E3A0
0C0C5E3B0
0C0C5E3C0
0C0C5E3D0
0C0C5E3E0
0C0C5E3F0

00
46
04
00
02
00
60
00
20
00
00
00
98
60
60
00
0C
31
30
78
60
60
00
20
6D
46
4C
80
00
40
93
31
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

01
49
00
00
00
00
9F
7D
20
00
00
00
24
9F
9F
00
02
00
00
00
9F
9F
00
20
00
00
00
00
00
00
05
01
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

02
4C
02
00
00
00
4D
4C
00
00
00
00
00
4D
4D
00
45
2E
00
00
4D
4D
00
00
70
69
6F
00
00
00
00
2B
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

03
45
00
00
00
00
D5
A8
00
00
00
00
00
D5
D5
00
00
00
00
00
D5
D5
00
00
00
00
00
00
00
00
00
88
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

04
30
38
00
00
00
FF
FF
00
65
00
00
00
FF
FF
00
58
54
90
18
FF
FF
00
00
6C
63
6E
48
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

05
00
00
00
00
00
EC
EC
00
01
00
00
00
EC
EC
00
00
00
00
00
EC
EC
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

06
03
01
00
00
00
C9
C9
00
00
00
03
06
C9
C9
00
45
58
00
01
C9
C9
00
00
65
68
67
00
00
00
00
01
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

07
00
00
00
00
00
01
01
00
00
00
00
00
01
01
00
00
00
00
00
01
01
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

08
25
F0
05
10
48
00
90
00
00
30
5A
60
60
00
20
4D
54
00
98
60
60
00
1B
20
69
2E
01
00
00
93
FF
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

09
EA
01
00
00
00
7D
26
00
00
00
00
9F
9F
00
20
00
00
00
24
9F
9F
00
01
00
00
00
00
00
10
05
FF
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

13/14

0A
74
00
00
00
00
4C
4F
00
00
00
00
4D
4D
00
00
50
69
00
00
4D
4D
00
45
64
65
74
00
00
00
00
FF
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

0B
25
00
00
00
00
A8
D5
00
00
00
00
D5
D5
00
00
00
00
00
00
D5
D5
00
00
00
00
00
00
00
00
00
FF
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

0C
00
00
78
60
18
FF
FF
00
00
78
18
FF
FF
00
00
4C
63
00
00
FF
FF
00
78
65
72
78
00
00
00
00
82
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

0D
00
04
31
00
00
EC
EC
00
00
00
00
EC
EC
00
00
00
00
00
00
EC
EC
00
00
00
00
00
00
00
00
00
79
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

0E
00
00
00
00
00
C9
C9
00
00
00
01
C9
C9
00
00
7E
68
02
06
C9
C9
00
65
20
20
74
04
00
00
00
47
02
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
02

0F
00
00
00
00
00
01
01
00
00
00
00
01
01
00
00
00
00
00
00
01
01
00
00
00
00
00
00
00
00
00
11
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

ASCII
FILE0...%t%....
....8..........
............x1..
............`...
........H.......
`M..}L.
.}L..&O.
..............
....e...........
........0...x...
........Z.......
$......`M.
`M.`M.
`M.........
........ ......
..E.X.E.M.P.L.~.
1...T.X.T.i.c.h.
0...............
x.......$......
`M.`M.
`M.`M.
................
........E.x.e.
m.p.l.e. .d.e. .
F.i.c.h.i.e.r. .
L.o.n.g...t.x.t.
...H...........
................
@...............
..............
1.+....yG.
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................

Rcupration effective des donnes


Tous les concepts gnraux tant dsormais noncs, il ne reste plus qu prsenter la procdure de
rcupration dun fichier effac, qui nest quune juxtaposition de lutilisation des principes vus auparavant.
Il faut tout dabord localiser la MFT laide du champ correspondant son adresse dans le secteur de Boot.
Le premier enregistrement de la MFT ($MFT) a une structure commune tous les autres enregistrements. Nous
devons localiser son attribut Data qui est non rsident, plus prcisment la valeur du champ HighVCN qui
renseigne sur la taille totale (en clusters) de la MFT. Il suffit de le multiplier par BytesPerCluster et de diviser
cette taille par la taille dun enregistrement BytesPerFileRecord pour obtenir le nombre denregistrements.
Le parcours des enregistrements de fait ensuite de manire linaire. Tous les enregistrements doivent tre
scanns les uns aprs les autres la recherche dune valeur $00 dans le champ flag de lentte
denregistrement. Si cette valeur est trouve, on lit les attributs contenus dans lenregistrement de proche en
proche, en rcuprant au passage les informations du fichier (nom, taille, dates, donnes).
Pour restaurer un fichier trouv, il suffit denregistrer les donnes lues partir des indications de lattribut Data
dans un autre fichier cr pour loccasion. La rcupration est ainsi termine.

Limites de la mthode & Recommandations


Il est trs important de prendre conscience que ce processus ne permet aucunement dtre certain de
pouvoir effectuer la restauration, et ne permet pas non plus de garantir lintgrit des donnes rcupres.
Les enregistrements de fichiers effacs tant marqus comme libres par le systme de fichiers, ils sont
susceptibles tout moment dtre recouverts par les enregistrements dautres fichiers nouvellement crs.
savoir que le remplissage des enregistrements libres se fait linairement depuis le dbut de la MFT ; donc si
un enregistrement [A] se libre au tout dbut du disque, il sera recouvert plus vite quun enregistrement [B] se
librant la fin de la MFT. En effet, il y a statistiquement plus denregistrements libres entre le dbut de la MFT
et lenregistrement [B] quentre le dbut de la MFT et lenregistrement [A].
De manire gnrale, ncrivez jamais quoi que ce soit sur le disque contenant des donnes importantes que
vous venez juste de supprimer et que vous comptez rcuprer. Mme linstallation dun logiciel de
rcupration de donnes pourrait corrompre les donnes effaces du disque. Si les donnes vous sont trs
prcieuses, dconnectez le disque dur de votre ordinateur et branchez-le sur un autre ordinateur o a t
install un logiciel de rcupration ; ou bien utilisez un logiciel ne ncessitant pas dinstallation et pouvant
sexcuter partir dun disque amovible, dune cl USB, dun CD, dune disquette ou dun emplacement rseau.
Ne sauvegardez pas les donnes rcupres par un logiciel de restauration directement sur le disque contenant
encore des donnes effaces que vous dsirez rcuprer. Lcriture de fichiers sur le disque peut interfrer
avec le processus de restauration et recouvrir des enregistrements de la MFT ou des zones du disque
contenant des donnes. Il est prfrable de sauvegarder les donnes rcupres sur un autre disque dur, une
cl USB, une disquette ou bien un emplacement rseau.
Les oprations de dfragmentation des disques diminuent considrablement les possibilits de restauration de
fichiers effacs, de par les mouvements de donnes sur le disque et les possibles recouvrements en rsultant.

14/14

Vous aimerez peut-être aussi