Создаем на флешке 3 различных файла:
- FILE01.TXT – размер 10 000 байт;
- FILE02.TXT – размер 1 000 байт;
- FILE03.TXT – размер 54 000 байт;
Заполнитель у файлов один – последовательность “0123456789”. Нетрудно заметить, что размеры, что файлы занимают на диске равны соответственно 32 Кб, 32 Кб, 64 Кб. Это связано с тем, что размер кластера у нас 32 Кб (см. Глава 1, пункт 2). Таким образом для второго файла потери дискового пространства составляют целых 31 Кб! Не очень-то оптимально.
Ладно, идём дальше. В WinHex открываем таблицу FAT. Что видим?
Дескриптор накопителя (жесткий диск, хоть и флешка);
- Дескриптор накопителя;
- Заполнитель;
- Файл занимает целый кластер;
- Файл занимает 2 кластера;
- Файл занимает один кластер;
Обратите внимание на байты по смещению 0406h. Так как анализируем FAT16, то каждая запись занимает у нас 2 байта. Обращаем внимание на запись 3 (04 00), обратный порядок байт приводит нас к 00 04. Что значит 4-ую запись FAT, это байты 0408h и 0409h, там мы видим FFh FFh, значит это замыкающий кластер в цепочке.
Надеюсь, всё стало понятно. Вспоминаем предыдущую статью и понимаем, что содержимое таблиц FAT – это номер СЛЕДУЮЩЕГО кластера в цепочке.
Итак, идём дальше. Теперь разберёмся с содержимым каталога.
Начинаем анализировать, как описывают наши файлы эти байты:
Смещение, байт | Длина, байт | Назначение |
00h | 8 |
Имя файла, дополненное справа пробелами (20h) до длины 8 символов;
|
08h | 3 |
Тип (расширение) файла, дополненное справа пробелами до 3-х символов; |
0Bh | 1 |
Атрибуты файла по битам:
|
0Ch | 1 |
Резерв
|
0Dh | 1 |
Сотые доли секунды создания файла
|
0Eh | 2 |
Время создания файла
|
10h | 2 |
Дата создания файла
|
12h | 2 |
Дата последнего обращения к файлу
|
14h | 2 |
Старшее слово первого кластера файла
|
16h | 2 |
Время последнего изменения, создания:
|
18h | 2 |
Дата последнего изменения, создания:
|
1Ah | 2 |
Младшее слово первого кластера файла
|
1Ch | 4 |
Размер файла в байтах
|
Открываем Root-каталог:
Итак, смотрим наш файл:
- Имя файла, закодированное ASCII-кодами (см. справа) – FILE02
- Расширение файла – TXT
- Атрибуты файла: 20h = 00100000b, переводим в атрибуты: выставлен бит с номером 5, считая от конца: это значит, что файл “Архивный”.
- 54A3h = 101010010100011b, делим эту колбасу на битовые группы: 1010b 100101b 00011b = 10 37 03 в переводе на десятичные числа, что означает время 10:36:06 (секунды считаются парами); Далее идёт дата: 4252h = 100001001010010b, делим на битовые группы: 100001b 0010b 10010b = 33 2 18, переводим в дату: 18.02.2013 (1980г.+33). Получили дату создания файла.
- Время и дата закодированы аналогично;
- См. выше.;
- 0002h – первый кластер файла;
- 03E8h – размер файла в байтах = 1000 байт;
Кстати, первый символ имени может иметь специальное значение:
- 00h – элемент каталога никогда не используется;
- 05h – первый символ имени имеет код E5h;
- 2Eh – псевдоним каталога (точка);
- E5h – элемент удален;
Что нам делать с №7? Сперва узнаем, какие кластера занимает этот файл. Открываем таблицу FAT и ищем 2-ой кластер там. Пропускаем 6 байт (каждый кластер – 2 байта) и видим там FFFFh, что означает конец цепочки. Значит файл уместился там полностью. Теперь ищем файл на диске. Размер кластера у нас 32 Кб (это мы вычислили ранее). Так же берём во внимание тот факт, что корневой каталог у нас может включать в себя максимум 512 элементов, на запись каждого из которых (включая атрибуты и даты-время) уходит ровно 32 байта, вы видите это из скриншота. 32 * 512 = 16384. Прибавим это значение к смещению адреса начала корневого каталога 0003C000h, исходя из скрина и получим: 0040000h. Вот с этого смещения и начнётся область данных флешки. Открываем это смещение:
Вот и содержимое файла.
Теперь маленькая фишка. “Удалим” файл вручную. Поставим в имени файла первым символом код E5h. Нетрудно заметить, что после сохранения изменений (Ctrl+S) файл исчезнет из содержимого каталога в проводнике. Обновим содержимое в WinHEX – Tools->Disk Tools->Take New Volume Snapshot (получить новый снимок) и увидим, что файл реально помечен удаленным.
Восстановить такой файл – проще простого. Данные остаются незатронутыми. Важно понимать, что удалив файл таким образом, мы организовали “потерянные кластеры”, это когда в FAT кластер помечен, как “занятый”, а никакому файлу он не принадлежит. При штатном удалении файла – система пробегает по всем кластерам в таблицах FAT и присваивает им значения 0000h. Нетрудно в этом убедиться.
Comments: