„NTFS: Machen Sie Ihre Festplatte sicherer und effizienter!“ Ausführliche Erklärung des NTFS-Dateisystems,

NTFS (New Technology File System) ist ein modernes Dateisystem und eines der am häufigsten verwendeten Dateisysteme im Windows-Betriebssystem. Es handelt sich um ein effizientes, zuverlässiges und sicheres Dateisystem, das Funktionen wie Massenspeicher, Dateiverschlüsselung, Komprimierung und Berechtigungskontrolle unterstützt. In diesem Artikel werden die Struktur des NTFS-Dateisystems, die $Boot-Datei, die $MFT-Metadatei, Dateidatensätze, die Analyse von Attributheadern und Attributkörpern, die Berechnung der MFT-Offsetadresse und die Idee des Durchlaufens der Partitionsdateiliste ausführlich vorgestellt.

 

Erstens die Struktur des NTFS-Dateisystems

 

Das NTFS-Dateisystem besteht aus drei Hauptteilen: dem Bootsektor, Dateidatensätzen und Metadateien. Der Bootsektor enthält den Bootcode und die Partitionstabelle, der Dateidatensatz speichert die Daten und Metadaten der Datei und die Metadatei speichert die Metadaten des Dateisystems.

Bootsektor: Der Bootsektor des NTFS-Dateisystems enthält den Bootcode und die Partitionstabelle. Der Startcode ist der Programmcode, der zum Starten des Betriebssystems verwendet wird, und die Partitionstabelle zeichnet die Informationen der Partition auf, einschließlich Startposition, Größe und Typ der Partition.

Dateidatensatz: Der Dateidatensatz im NTFS-Dateisystem wird zum Speichern der Daten und Metadaten der Datei verwendet. Jeder Dateidatensatz enthält Dateiattributinformationen, Dateinamen, Dateidaten usw. Die Größe des Dateieintrags ist fest, normalerweise 1 KB oder 4 KB.

Metadatei: Die Metadatei im NTFS-Dateisystem wird zum Speichern der Metadaten des Dateisystems verwendet. Zu den Metadaten gehören Dateisysteminformationen, Dateidatensatzinformationen, Speicherplatzzuweisung usw. Metadateien umfassen normalerweise $MFT (Dateidatensatztabelle), $Bitmap (Bitmap), $LogFile (Protokolldatei) usw.

Zweitens: $Boot-Datei

Die $Boot-Datei ist eine spezielle Datei im NTFS-Dateisystem, die einige grundlegende Informationen des Dateisystems enthält, wie z. B. Dateisystemversion, Clustergröße, Partitionsgröße usw. Die Größe der $Boot-Datei beträgt 512 Byte und ihre Struktur ist wie folgt:

![NTFS_Boot_File_Structure](https://i.imgur.com/5YJjZJy.png)

Unter anderem wird der Jump-Befehl verwendet, um zum Startcode zu springen, die OEM-ID wird verwendet, um das Dateisystem zu identifizieren, Bytes pro Sektor gibt die Anzahl der Bytes pro Sektor an, Sektoren pro Cluster gibt die Anzahl der in jedem Cluster enthaltenen Sektoren an, „Reservierte Sektoren“ gibt die Anzahl der reservierten Sektoren an, „Mediendeskriptor“ gibt den Typ des Datenträgermediums an, „Sektoren pro Spur“ gibt die Anzahl der Sektoren pro Spur an, „Anzahl der Köpfe“ gibt die Anzahl der Köpfe an, „Verborgene Sektoren“ gibt die Anzahl der verborgenen Sektoren an und „Gesamtsektoren“. gibt die Anzahl der Partitionen an. Die Gesamtzahl der Sektoren, MFT-Startcluster gibt die Startclusternummer der $MFT-Metadatei an, MFT-Spiegelstartcluster gibt die Startclusternummer der $MFT-Spiegeldatei an, Cluster pro MFT-Datensatz gibt die Anzahl der Cluster an die von jedem $MFT-Datensatz belegt werden, „Cluster pro Indexblock“ geben die Anzahl der von jedem Indexblock belegten Cluster an, „Volume-Seriennummer“ gibt die Volume-Seriennummer an und die Prüfsumme wird zur Überprüfung der $Boot-Datei verwendet.

3. $MFT-Metadatei

 

Die $MFT-Metadatei ist eine spezielle Datei im NTFS-Dateisystem, die Informationen über alle Dateieinträge im Dateisystem speichert. Die Größe der $MFT-Metadatei beträgt normalerweise 1024 Cluster, wobei jeder Cluster die Größe des in der $Boot-Datei definierten Clusters hat. Die Struktur der $MFT-Metadatei ist wie folgt:

![NTFS_MFT_File_Structure](https://i.imgur.com/2zL7tq7.png)

Unter anderem enthält der Dateikopf einige grundlegende Informationen der Datei, wie z. B. Dateinamen, Dateiattribute usw. Der Dateidatensatz enthält Dateiattributinformationen, Dateinamen, Dateidaten usw. Die Größe jedes Dateieintrags ist fest, normalerweise 1 KB oder 4 KB. Jeder Dateidatensatz verfügt über eine eindeutige Kennung, die als Dateidatensatznummer (FRN) bezeichnet wird. Der erste Dateieintrag in der $MFT-Metadatei ist $MFT selbst, der die Dateieintragsnummer 0 hat.

4. Dokumentation

Dateidatensätze im NTFS-Dateisystem werden zum Speichern von Dateidaten und Metadaten verwendet. Jeder Dateidatensatz enthält Dateiattributinformationen, Dateinamen, Dateidaten usw. Die Größe des Dateieintrags ist fest, normalerweise 1 KB oder 4 KB. Die Akteneinträge sind wie folgt aufgebaut:

![NTFS_File_Record_Structure](https://i.imgur.com/5ZKqL6j.png)

Unter anderem enthält der Dateikopf einige grundlegende Informationen der Datei, wie z. B. Dateinamen, Dateiattribute usw. Der Dateidatensatz enthält Dateiattributinformationen, Dateinamen, Dateidaten usw. Jeder Dateidatensatz hat eine eindeutige Kennung, die Dateidatensatznummer (FRN) genannt wird.

Fünftens: Berechnung der MFT-Offset-Adresse

 

Im NTFS-Dateisystem verfügt jeder Dateidatensatz über eine eindeutige Kennung, die Dateidatensatznummer (Dateidatensatznummer, kurz FRN) genannt. Um auf einen Dateidatensatz zuzugreifen, müssen Sie die Offset-Adresse des Dateidatensatzes in der $MFT-Metadatei finden. Die Formel zur Berechnung der Offset-Adresse lautet wie folgt:

$MFTOffset = MFTStartCluster * ClusterSize + FRN * RecordSize

Unter diesen ist MFTStartCluster die Startclusternummer der $MFT-Metadatei, ClusterSize ist die Größe des Clusters, FRN ist die Dateidatensatznummer und RecordSize ist die Größe des Dateidatensatzes.

6. Analyse des Attributheaders des Attributs

Ein Dateidatensatz im NTFS-Dateisystem enthält mehrere Attribute, und jedes Attribut verfügt über einen Attributkopf und einen Attributkörper. Der Attributheader enthält einige grundlegende Informationen des Attributs, wie z. B. Attributtyp, Attributlänge, Attributflag usw. Der Aufbau des Attributheaders ist wie folgt:

![NTFS_Attribute_Header_Structure](https://i.imgur.com/2Uq6J1Q.png)

Unter diesen gibt Type den Typ des Attributs an, Länge gibt die Länge des Attributs an, Non-Resident gibt an, ob das Attribut ein nicht residentes Attribut ist, NameLength gibt die Länge des Attributnamens an und NameOffset gibt den Offset des Attributnamens an , Flags gibt das Flag des Attributs an und AttributeID gibt die Kennung des Attributs an.

7. Attributkörperanalyse von Attributen

Ein Dateidatensatz im NTFS-Dateisystem enthält mehrere Attribute, und jedes Attribut verfügt über einen Attributkopf und einen Attributkörper. Der Attributkörper enthält den spezifischen Inhalt des Attributs, z. B. Dateidaten, Dateinamen und Dateiattribute. Die Struktur des Attributkörpers variiert je nach Attributtyp. Im Folgenden werden zur Einführung gängige Attributtypen als Beispiele verwendet.

1. $STANDARD_INFORMATION-Eigenschaft

Das Attribut $STANDARD_INFORMATION enthält einige grundlegende Informationen über die Datei, wie z. B. Erstellungszeit, Änderungszeit, Zugriffszeit, Dateiattribute usw. Die Struktur der Eigenschaft $STANDARD_INFORMATION ist wie folgt:

![NTFS_STANDARD_INFORMATION_Attribute_Structure](https://i.imgur.com/6wQK9gE.png)

Unter diesen stellt CreationTime den Erstellungszeitpunkt der Datei dar, LastAccessTime den letzten Zugriffszeitpunkt der Datei, LastWriteTime den letzten Änderungszeitpunkt der Datei und FileAttributes das Attribut der Datei, z. B. schreibgeschützt, versteckt, System , usw.

2. $FILE_NAME-Attribut

Das Attribut $FILE_NAME enthält Informationen wie Name, Größe, Erstellungszeit, Änderungszeit und Zugriffszeit der Datei. Die Struktur der Eigenschaft $FILE_NAME ist wie folgt:

![NTFS_FILE_NAME_Attribute_Structure](https://i.imgur.com/7hjyJ3Y.png)

Unter diesen gibt ParentDirectory den FRN des übergeordneten Verzeichnisses an, in dem sich die Datei befindet, CreationTime gibt den Erstellungszeitpunkt der Datei an, LastAccessTime gibt den Zeitpunkt des letzten Zugriffs auf die Datei an, LastWriteTime gibt den Zeitpunkt der letzten Änderung der Datei an und FileSize gibt die Größe an der Datei, und Flags gibt das Flag der Datei an, z. B. schreibgeschützt, versteckt, System usw., FileNameLength gibt die Länge des Dateinamens an und FileName gibt den Dateinamen an.

3. $DATA-Attribut

Die Eigenschaft $DATA enthält die Daten für die Datei. Die Struktur der $DATA-Eigenschaft ist wie folgt:

![NTFS_DATA_Attribute_Structure](https://i.imgur.com/5mXyL9G.png)

Unter diesen gibt Non-Resident an, ob die Daten ein nicht-residentes Attribut sind, DataRuns gibt die Ausführungsliste der Daten an und Data gibt den Inhalt der Daten an.

4. $INDEX_ROOT-Eigenschaft

Die Eigenschaft $INDEX_ROOT enthält Indexinformationen für Verzeichnisse. Die Struktur der Eigenschaft $INDEX_ROOT ist wie folgt:

![NTFS_INDEX_ROOT_Attribute_Structure](https://i.imgur.com/6WjJ9Km.png)

Unter diesen gibt Type den Typ des Index an, CollationRule gibt die Sortierregel an, BytesPerIndexRecord gibt die Größe jedes Indexdatensatzes an, ClustersPerIndexRecord gibt die Anzahl der von jedem Indexdatensatz belegten Cluster an, IndexEntriesOffset gibt den Offset des Indexdatensatzes an und IndexEntriesLength gibt die Länge an des Indexdatensatzes, IndexEntries Stellt den Inhalt eines Indexdatensatzes dar.

Acht, die Idee, die Liste der Partitionsdateien zu durchlaufen

Um alle Dateien im NTFS-Dateisystem zu durchlaufen, müssen Sie zuerst die Startclusternummer und -größe der $MFT-Metadatei ermitteln, dann den Inhalt der $MFT-Metadatei lesen, jeden Dateidatensatz analysieren und die Attributinformationen der Datei abrufen. Dateiname, Dateidaten usw. Die spezifischen Durchquerungsideen lauten wie folgt:

1. Lesen Sie die $Boot-Datei, um die Clustergröße und die Startclusternummer der $MFT-Metadatei zu erhalten.

2. Berechnen Sie die Größe der $MFT-Metadatei und lesen Sie den Inhalt der $MFT-Metadatei.

3. Analysieren Sie jeden Dateidatensatz in der $MFT-Metadatei, um Dateiattributinformationen, Dateinamen, Dateidaten usw. zu erhalten.

4. Wenn es sich bei der Datei um ein Verzeichnis handelt, durchsuchen Sie alle Dateien im Verzeichnis.

5. Wenn die Datei nicht resident ist, lesen Sie die DataRuns-Liste, ermitteln Sie den Speicherort und die Größe der Daten und lesen Sie die Daten.

6. Wenn es sich bei der Datei um ein Indexattribut handelt, lesen Sie die IndexEntries-Liste, ermitteln Sie die Position und Größe des Indexdatensatzes, analysieren Sie den Indexdatensatz und ermitteln Sie die Attributinformationen, den Dateinamen und die Dateidaten der Datei.

7. Wiederholen Sie die Schritte 3–6, bis die gesamte Partition durchlaufen ist.

Zusammenfassen

In diesem Artikel wird die Struktur des NTFS-Dateisystems, der $Boot-Datei, der $MFT-Metadatei, der Dateidatensätze, des Attributheaders und der Attributkörperanalyse im Detail vorgestellt.

Acho que você gosta

Origin blog.csdn.net/weixin_74021557/article/details/131200120
Recomendado
Clasificación