NTFS найти и прочитать $ MFT из RAW - PullRequest
0 голосов
/ 05 февраля 2020

В настоящее время я пытаюсь программно проанализировать MFT моего жесткого диска из его необработанных данных, чтобы перечислить все файлы с указанным расширением c (за очень короткое время).

I ' Я следую этому руководству, чтобы руководствоваться мной: Взгляд программистов на извлечение необработанных данных файловой системы .

Я успешно открыл \\.\PhysicalDrive0 с помощью CreateFileA, и я обнаружил первый сектор мой Windows раздел, где я нашел BPB.

Моя проблема в том, что я не могу правильно найти MFT.

MFT Logical Cluster number

Как вы можете видеть выше (необработанные данные первого сектора моего Windows раздела) , номер логического кластера MFT равен 0x56a6.

Затем я вычислил число секторов на кластеры, которое составляет 0x20 (0x20 * 512 = 0x4000 bytes).

. Таким образом, логически MFT имеет смещение 0x4000 * 0x56a6, равное 0x15a98000.

И когда я искать это смещение и получить первые 512 байт. Я не вижу ожидаемых данных, которые должны начните с FILE (я просто вижу несколько случайных байтов).

Я также пытался искать не первый сектор раздела, а один из жесткого диска, и он тоже не работает (я думаю, это нормально).

Я предполагаю, что что-то упустил, но я не знаю, что.

Я надеюсь, что я достаточно ясно, если вам нужно больше деталей и информации, я предоставлю их.

Спасибо.

1 Ответ

0 голосов
/ 06 февраля 2020

Согласно определению структуры NTFS_BOOT_SECTOR в документе, смещение uchSecPerClust составляет 3 + 4 + 4 + sizeof(WORD) = 0x0D. (Игнорировать выравнивание байтов)

Или вы можете использовать DeviceIoControl с управляющим кодом IOCTL_DISK_GET_DRIVE_GEOMETRY для заполнения структуры DISK_GEOMETRY информацией о приводе:

https://docs.microsoft.com/en-us/windows/win32/devio/calling-deviceiocontrol

Другой полезный контрольный код: FSCTL_ENUM_USN_DATA

...