Материал просмотрен 3,911 раз(а)

Создаем на флешке 3 различных файла:

  • FILE01.TXT – размер 10 000 байт;
  • FILE02.TXT – размер 1 000 байт;
  • FILE03.TXT – размер 54 000 байт;

Заполнитель у файлов один – последовательность “0123456789”. Нетрудно заметить, что размеры, что файлы занимают на диске равны соответственно 32 Кб, 32 Кб, 64 Кб. Это связано с тем, что размер кластера у нас 32 Кб (см. Глава 1, пункт 2). Таким образом для второго файла потери дискового пространства составляют целых 31 Кб! Не очень-то оптимально.

Ладно, идём дальше. В WinHex открываем таблицу FAT. Что видим?

Дескриптор накопителя (жесткий диск, хоть и флешка);

  1. Дескриптор накопителя;
  2. Заполнитель;
  3. Файл занимает целый кластер;
  4. Файл занимает 2 кластера;
  5. Файл занимает один кластер;

Обратите внимание на байты по смещению 0406h. Так как анализируем FAT16, то каждая запись занимает у нас 2 байта. Обращаем внимание на запись 3 (04 00), обратный порядок байт приводит нас к 00 04. Что значит 4-ую запись FAT, это байты 0408h и 0409h, там мы видим FFh FFh, значит это замыкающий кластер в цепочке.

Надеюсь, всё стало понятно. Вспоминаем предыдущую статью и понимаем, что содержимое таблиц FAT – это номер СЛЕДУЮЩЕГО кластера в цепочке.

 

Итак, идём дальше. Теперь разберёмся с содержимым каталога.

Начинаем анализировать, как описывают наши файлы эти байты:

Смещение, байт Длина, байт Назначение
00h 8
Имя файла, дополненное справа пробелами (20h) до длины 8 символов;
08h 3

Тип (расширение) файла, дополненное справа пробелами до 3-х символов;

0Bh 1

Атрибуты файла по битам:

  • 0 – R – только чтение;
  • 1 – H – скрытый;
  • 2 – S – системный;
  • 3 – метка тома (Vol.Label)
  • 4 – признак каталога;
  • 5 – A – архивный;
0Ch 1
Резерв
0Dh 1
Сотые доли секунды создания файла
0Eh 2
Время создания файла
10h 2
Дата создания файла
12h 2
Дата последнего обращения к файлу
14h 2
Старшее слово первого кластера файла
16h 2

Время последнего изменения, создания:

  • Биты 0-4 – пары секунд: 0-29;
  • Биты 5-10 – минуты (0-59)
  • Биты 11-15 – часы (0-23)
18h 2

Дата последнего изменения, создания:

  • Биты 0-4 – день (0-31)
  • Биты 5-8 – месяц (1-12)
  • Биты 9-15 – год, начиная с 1980 (0-119)
1Ah 2
Младшее слово первого кластера файла
1Ch 4
Размер файла в байтах

Открываем Root-каталог:

Итак, смотрим наш файл:

 

  1. Имя файла, закодированное ASCII-кодами (см. справа) – FILE02
  2. Расширение файла – TXT
  3. Атрибуты файла: 20h = 00100000b, переводим в атрибуты: выставлен бит с номером 5, считая от конца: это значит, что файл “Архивный”.
  4. 54A3h = 101010010100011b, делим эту колбасу на битовые группы: 1010b 100101b 00011b = 10 37 03 в переводе на десятичные числа, что означает время 10:36:06 (секунды считаются парами); Далее идёт дата: 4252h = 100001001010010b, делим на битовые группы: 100001b 0010b 10010b = 33 2 18, переводим в дату: 18.02.2013 (1980г.+33). Получили дату создания файла.
  5. Время и дата закодированы аналогично;
  6. См. выше.;
  7. 0002h – первый кластер файла;
  8. 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. Нетрудно в этом убедиться.