NTFS. проблема с чтением из MFT-области
От: ws37sr2  
Дата: 04.02.09 07:46
Оценка:
Возникла такая проблема.
При чтении из MFT-области каждый 511 и 512 байты не верны.
     0: 4649 4c45 3000 0300 110d 7d3b 0000 0000    FILE0.....};....
        ...
   496: 1a21 0113 2231 1f2c c702 2101 07fe 0400    .!.."1.,..!.....
   512: 4f0f 310f 34c6 e831 20ef 2de5 4121 33da    O.1.4..1 .-.A!3.
        ...
  1008: 0000 0000 0000 0000 0000 0000 0000 0400    ................


А на самом деле должен был быть получен такой результат.
     0: 4649 4c45 3000 0300 110d 7d3b 0000 0000    FILE0.....};....
        ...
   496: 1a21 0113 2231 1f2c c702 2101 07fe 2111    .!.."1.,..!.....
   512: 4f0f 310f 34c6 e831 20ef 2de5 4121 33da    O.1.4..1 .-.A!3.
        ...
  1008: 0000 0000 0000 0000 0000 0000 0000 0000    ................


Если читаю из кластеров не относящихся к MFT-области то эти быйты не портятся.
     0: ee3f e70d 573b 8986 24e6 bdf0 c57b c858    .?..W;..$....{.X
        ...
   496: c918 a24c fa0b 20f5 b3a8 e9d1 b90b 7042    ...L.. .......pB
   512: 5086 4fc1 60e6 81c6 8d10 fa0b 2a16 9c32    P.O.`.......*..2
        ...
  1008: 7021 3702 22c0 f1d0 038b e105 67a7 0426    p!7.".......g..&


Читаю следующим образом.
       HANDLE hDrive = CreateFile(TEXT("\\\\.\\PHYSICALDRIVE0"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    LARGE_INTEGER n64Pos;
    n64Pos.QuadPart = NTFSPartition->startMftLCN + 10809155584;
    SetFilePointerEx(hDrive, n64Pos, NULL, FILE_BEGIN);

    DWORD dwBytesRead;
    BYTE *buf= new BYTE[1024];
    ReadFile(hDrive, buf, 1024, &dwBytesRead, NULL);


Сначала подумал, что это винда мне специально портит эти байты. Побробовал прочитать тот же сектор из под линукса — Эффект оказался тем же самым.
Может кто-нибудь уже сталкивался с этой проблемой. Помогите пожалуйста. Уже не знаю что делать.
Re: NTFS. проблема с чтением из MFT-области
От: Bitman72  
Дата: 04.02.09 09:13
Оценка:
Здравствуйте, ws37sr2, Вы писали:

W>При чтении из MFT-области каждый 511 и 512 байты не верны.

читайте про Fixup в MFT

Сергей.
Re: NTFS. проблема с чтением из MFT-области
От: Аноним  
Дата: 28.03.09 13:59
Оценка:
Здравствуйте, ws37sr2, Вы писали:

W>Возникла такая проблема.

W>При чтении из MFT-области каждый 511 и 512 байты не верны.
W>
W>     0: 4649 4c45 3000 0300 110d 7d3b 0000 0000    FILE0.....};....
W>        ...
W>   496: 1a21 0113 2231 1f2c c702 2101 07fe 0400    .!.."1.,..!.....
W>   512: 4f0f 310f 34c6 e831 20ef 2de5 4121 33da    O.1.4..1 .-.A!3.
W>        ...
W>  1008: 0000 0000 0000 0000 0000 0000 0000 0400    ................
W>


W>А на самом деле должен был быть получен такой результат.

W>
W>     0: 4649 4c45 3000 0300 110d 7d3b 0000 0000    FILE0.....};....
W>        ...
W>   496: 1a21 0113 2231 1f2c c702 2101 07fe 2111    .!.."1.,..!.....
W>   512: 4f0f 310f 34c6 e831 20ef 2de5 4121 33da    O.1.4..1 .-.A!3.
W>        ...
W>  1008: 0000 0000 0000 0000 0000 0000 0000 0000    ................
W>


W>Если читаю из кластеров не относящихся к MFT-области то эти быйты не портятся.

W>
W>     0: ee3f e70d 573b 8986 24e6 bdf0 c57b c858    .?..W;..$....{.X
W>        ...
W>   496: c918 a24c fa0b 20f5 b3a8 e9d1 b90b 7042    ...L.. .......pB
W>   512: 5086 4fc1 60e6 81c6 8d10 fa0b 2a16 9c32    P.O.`.......*..2
W>        ...
W>  1008: 7021 3702 22c0 f1d0 038b e105 67a7 0426    p!7.".......g..&

W>


W>Читаю следующим образом.

W>
W>       HANDLE hDrive = CreateFile(TEXT("\\\\.\\PHYSICALDRIVE0"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
W>    LARGE_INTEGER n64Pos;
W>    n64Pos.QuadPart = NTFSPartition->startMftLCN + 10809155584;
W>    SetFilePointerEx(hDrive, n64Pos, NULL, FILE_BEGIN);

W>    DWORD dwBytesRead;
W>    BYTE *buf= new BYTE[1024];
W>    ReadFile(hDrive, buf, 1024, &dwBytesRead, NULL);
W>


W>Сначала подумал, что это винда мне специально портит эти байты. Побробовал прочитать тот же сектор из под линукса — Эффект оказался тем же самым.

W>Может кто-нибудь уже сталкивался с этой проблемой. Помогите пожалуйста. Уже не знаю что делать.

NTFS использует маркеры в конце каждого сектора. Сами байты хранятся внутри записи. Подробнее можно почитать Brian Carrier "File systems forensic analysis". Там кстати очень хорошо написано про NTFS, советую купить эту книгу, есть ее русская редакция "Криминалистический анализ файловых систем".
Re[2]: NTFS. проблема с чтением из MFT-области
От: byleas  
Дата: 06.04.09 21:10
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>NTFS использует маркеры в конце каждого сектора. Сами байты хранятся внутри записи. Подробнее можно почитать Brian Carrier "File systems forensic analysis". Там кстати очень хорошо написано про NTFS, советую купить эту книгу, есть ее русская редакция "Криминалистический анализ файловых систем".

Честно сказать, ничего полезнее linux-ntfs и Гари Неббета не видел. А сабж показался каким-то научно-популярным материалом, в котором ничего ценного с практической точки зрения, одни общие мысли и описания, коих и так хватало в инете.
Re[3]: NTFS. проблема с чтением из MFT-области
От: MShura  
Дата: 07.04.09 07:03
Оценка:
B>Честно сказать, ничего полезнее linux-ntfs и Гари Неббета не видел.

Самое полезное — первоисточник. В сорсах. Если искать то найдется.
Re[4]: NTFS. проблема с чтением из MFT-области
От: byleas  
Дата: 07.04.09 19:04
Оценка:
Здравствуйте, MShura, Вы писали:

MS>Самое полезное — первоисточник. В сорсах.

Это понятно, я имел ввиду литературу. Хотя сорцы тоже в какой-то мере являются художественным произведением
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.