$I30, czyli pliki, których (już) nie ma

Informacja o plikach, które znajdują się na NTFS umieszczona jest w $Mft. Dodatkowo jednak utrzymywane są indeksy, które pozwalają na bardziej efektywne listowanie plików w katalogach. Rekordy w $Mft (te dotyczące katalogów) mają dwa atrybuty:

Czasami (jeśli zawartość katalogu jest na tyle mała), jest tylko atrybut $INDEX_ROOT. Czasami w (nieużywanej) części indeksu znajduje się informacja o plikach, które kiedyś były w katalogu. Informacja ta jest dość skromna, bo i indeksowanych informacji jest stosunkowo niewiele. Pozwala jednak stwierdzić, że jakiś plik istniał (w danym katalogu), oraz określić mniej więcej, kiedy istniał. Trochę dokładniejsze wytłumaczenie jest tutaj.

...i kilka słów więcej

Jeśli chodzi o dokumentację do NTFS, to dość dobra jest dostępna w ramach projektu linux-nfts. Nie udało mi się co prawda w oparciu o nią napisać skrypt, do odczytu indeksów, ale jest wystarczająco dobra, by poszczególne elementy indeksu zinterpretować.

Jeden z poszukiwanych plików (yhxdrg.bat) wykorzystywanych przez moje tamagotchi zostawił po sobie właśnie taki ślad. To, że plik istniał, już wiedziałem z rejestru. Z pozostałości w indeksie dowiedziałem się, że data jego utworzenia to 2008-05-17 19:47:16, a rozmiar to 200 bajtów (czyli tak jak przypuszczałem, cały się zmieścił w $Mft). Ot, taka ciekawostka.

Jak zinterpretować informacje z indeksu? To stosunkowo proste, gdy znajdzie się początek nazwy pliku (nazwy są zapisane w UTF-16), na dwóch poprzedzających bajtach zapisane są:

Dalej idąc “od tyłu”:

Wszystkie daty są zapisane jako timestamp w formacie FILETIME. Osobiście lubię korzystać z HEX Editor z MiteC, który te wartości automatycznie interpretuje.

Oryginał tego wpisu dostępny jest pod adresem $I30, czyli pliki, których (już) nie ma

Autor: Paweł Goleń