
Инструмент для исследования, извлечения данных, восстановления и судебной экспертизы файловых систем FAT

Этот инструмент предназначен для манипуляции файловыми системами FAT с целью их исследования, извлечения данных, восстановления и криминалистического анализа. В настоящее время он поддерживает FAT12, FAT16 и FAT32.
Вы можете собрать fatcat следующим образом:
mkdir build
cd build
cmake ..
make
А затем установить:
make install
Fatcat принимает образ в качестве аргумента:
fatcat disk.img [options]
ПРИМЕЧАНИЕ: в зависимости от вашей сборки, возможно, потребуется указать опции перед disk.img, т.е. fatcat [options] disk.img
Вы можете указать смещение в файле с помощью -O, это может быть полезно, если на блочном устройстве есть несколько разделов, например:
fatcat disk.img -O 1048576 [options]
Это укажет fatcat начать с 1048576-го байта. Обратитесь к учебному пособию по разделам.
Вы можете исследовать раздел FAT с помощью опции -l следующим образом:
$ fatcat disk.img -l /
Listing path /
Cluster: 2
d 24/10/2013 12:06:00 some_directory/ c=4661
d 24/10/2013 12:06:02 other_directory/ c=4662
f 24/10/2013 12:06:40 picture.jpg c=4672 s=532480 (520K)
f 24/10/2013 12:06:06 hello.txt c=4671 s=13 (13B)
Вы также можете указать путь, например -l /some/directory.
С помощью -L вы можете указать номер кластера вместо пути, это может быть полезно иногда.
Если добавить -d, вы также увидите удаленные файлы.
В листинге префикс f или d указывает, относится ли строка к файлу или каталогу.
c= указывает номер кластера, s= указывает размер в байтах (он должен совпадать с красивым размером сразу после).
Буква h в конце указывает, что файл предположительно скрыт.
Буква d в конце указывает, что файл был удален.
Вы можете прочитать файл с помощью -r, файл будет выведен на стандартный вывод:
$ fatcat disk.img -r /hello.txt
Hello world!
$ fatcat disk.img -r /picture.jpg > save.jpg
С помощью -R вы можете указать номер кластера вместо пути, но информация о размере файла будет потеряна, и файл будет округлен до количества кластеров, в которые он помещается, если только вы не укажете опцию -s для указания размера файла для чтения.
Вы можете использовать -x для извлечения каталогов файловой системы FAT в каталог:
fatcat disk.img -x output/
Если вы хотите извлечь из определенного кластера, укажите его с помощью -c.
Если при извлечении указать -d, удаленные файлы также будут извлечены.
Как объяснялось выше, удаленные файлы можно найти в листинге, указав -d:
$ fatcat disk.img -l / -d
f 24/10/2013 12:13:24 delete_me.txt c=5764 s=16 (16B) d
Вы можете исследовать и найти файл или интересный удаленный каталог.
Чтобы восстановить удаленный файл, просто используйте -r для его чтения. Обратите внимание, что полученный файл будет читаться непрерывно из оригинальной FAT-системы и может быть поврежден.
Чтобы восстановить удаленный каталог, запомните его номер кластера и извлеките его, как показано выше:
# If your deleted directory cluster is 71829
fatcat disk.img -x output/ -c 71829
См. также: учебное пособие по восстановлению удаленных файлов
Предположим, на вашем диске есть поврежденные сектора, возможно, вы захотите выполнить восстановление.
Первый совет — сделать копию ваших данных с помощью ddrescue и сохранить ваш диск на другой носитель или в исправный файл.
Когда сектора повреждены, их байты будут заменены на 0 в образе ddrescue.
Первый подход — попробовать исследовать ваш образ с помощью -l, как указано выше, и проверить -i, чтобы узнать, распознает ли fatcat диск как FAT-систему.
Затем вы можете попробовать взглянуть на -2, чтобы проверить, различаются ли таблицы размещения файлов, и выглядят ли они сливаемыми. Скорее всего, они будут сливаемыми; в этом случае вы можете попробовать -m для слияния FAT-таблиц, не забудьте предварительно сделать резервную копию (см. ниже).
Когда ваша файловая система повреждена, появляются файлы и потерянные файлы и каталоги, которые мы называем «сиротами», потому что к ним нельзя получить доступ из обычной системы.
fatcat предоставляет опцию для поиска таких узлов; он выполнит автоматический анализ вашей системы и исследование выделенных секторов вашей файловой системы. Это делается с помощью -o.
Вы получите список каталогов и файлов, например:
There is 2 orphaned elements:
Directory clusters 4592 to 4592: 2 elements, 49B
File clusters 4611 to 4611: ~512B
Затем вы можете напрямую использовать -L и -R, чтобы просмотреть эти файлы и каталоги:
$ fatcat disk.img -L 4592
Listing cluster 4592
Cluster: 4592
d 23/10/2013 17:45:06 ./ c=4592
d 23/10/2013 17:45:06 ../ c=0
f 23/10/2013 17:45:22 poor_orphan.txt c=4601 s=49 (49B)
Обратите внимание, что файлы-сироты имеют неизвестный размер; это означает, что при их чтении вы получите файл, размер которого кратен размеру кластера.
См. также: учебное пособие по файлам-сиротам
Вы можете использовать fatcat для взлома вашей FAT-файловой системы
Флаг -i предоставит вам много информации о файловой системе:
fatcat disk.img -i
Это даст вам данные заголовков, такие как размеры секторов, местоположения FAT, метка диска и т.д. Также будет прочитана FAT-таблица для оценки использования диска.
Вы также можете получить информацию о конкретном кластере с помощью -@:
fatcat disk.img -@ 1384
Это даст вам адрес кластера (смещение кластера в файловой системе) и значение следующего кластера в двух FAT-таблицах.
Вы можете использовать -b для резервного копирования ваших FAT-таблиц:
fatcat disk.img -b backup.fats
И использовать -p для их записи обратно:
fatcat disk.img -p backup.fats
Вы можете записывать в FAT-таблицы с помощью -w и -v:
fatcat disk.img -w 123 -v 124
Это запишет 124 в качестве значения следующего кластера для 123.
Вы также можете выбрать таблицу с помощью -t: 0 — обе таблицы, 1 — первая, 2 — вторая.
Вы можете просмотреть различия между двумя FAT с помощью -2:
# Watching the diff
$ fatcat disk.img -2
Comparing the FATs
FATs are exactly equals
# Writing 123 in the 500th cluster only in FAT1
$ fatcat disk.img -w 500 -v 123 -t 1
Writing next cluster of 500 from 0 to 123
Writing on FAT1
# Watching the diff
$ fatcat disk.img -2
Comparing the FATs
[000001f4] 1:0000007b 2:00000000
FATs differs
It seems mergeable
Вы можете объединить две FAT с помощью -m. Для каждой различающейся записи в таблице, если одна равна нулю, а другая нет, будет выбрана ненулевая:
$ fatcat disk.img -m
Begining the merge...
Merging cluster 500
Merge complete, 1 clusters merged
См. также: учебное пособие по исправлению FAT
Fatcat может исправлять каталоги с нарушенной цепочкой FAT.
Для этого используйте -f. Будет обойдено все дерево файловой системы, и каталоги, которые не выделены в FAT, но которые fatcat может прочитать, будут исправлены в FAT.
Вы можете получить информацию о записи с помощью -e:
fatcat disk.img -e /hello.txt
Это отобразит адрес записи (не самого файла), ссылку на кластер и размер файла (если это не каталог).
Вы можете добавить флаг -c [cluster] для изменения кластера записи и флаг -s [size] для изменения размера записи.
См. также: учебное пособие по забавным экспериментам с FAT
Вы можете использовать -k для поиска ссылки на кластер.
Вы можете стереть данные нераспределенных секторов, используя нули с помощью -z или случайные данные с помощью -S.
Например, удаленные файлы после этого станут нечитаемыми.
Это под лицензией MIT