2010-10-01 2 views
3

Например, Portable Executable имеет несколько, включая знаменитый «MZ» в начале, а также «PE \ 0 \ 0» в начале заголовка PE. Формат файла Rar имеет «Rar!» заголовок в начале, а некоторые другие имеют похожие «магические значения» в файле.Почему форматы файлов имеют магические числа?

Какую цель служат такие магические ценности?

ответ

7

Поскольку пользователи меняют расширение файла или другие программы крадут расширение файла, оно позволяет приложению отменить обработку файла в неизвестном формате, а не пытаться изо всех сил, а затем проиграть.

+0

Если он все равно потерпит неудачу, то зачем ему нужно обнаруживать номер плохой магии? Предположительно другие части файла wopuldn't имеют смысл, если это был другой формат файла. –

+3

@Billy - с некоторыми форматами файлов вы не можете сказать, являются ли данные «плохими». Например, без магического числа было бы довольно сложно программно определить, был ли файл растровым. – Seth

+1

Также вы не сможете отличить поврежденный файл в известном формате от (возможно) допустимого файла в неизвестном формате. –

1

Чтобы быстро определить тип файла или его позиции.

1

Ваш вопрос не должен быть «почему форматы файлов имеют магическое число», а скорее «в чем преимущества форматов файлов, имеющих магическое число»!

Предложения:

  • Программы, восстановить файлы на чтение диска свободное пространство может распознавать типы файлов
  • Ваш UNIX знает, является ли исполняемый файл, который будет интерпретироваться (она-бах) или двоичный
  • Когда вы теряете расширения, такие программы, как file, могут обнаружить, что ваши файлы
  • Дизайнер форматов файлов считает, что всегда безопаснее, когда приложения могут легко убедиться, что они читают файл с хорошим форматом.
  • Поскольку у вас есть заголовок, это не стоит много, чтобы положить его в начало заголовка.
6

концепция магических чисел возвращается к unix и предшествует использованию расширений файлов. Первоначальная идея оболочки заключалась в том, что все «исполняемые» будут выглядеть одинаково - неважно, как был создан файл или какая программа должна использоваться для его оценки. Оболочка будет смотреть содержимое файла и определять соответствующий файл. Microsoft подошла и выбрала другой подход, и появилась эпоха продлений файлов. Затем, чтобы сделать «приятнее» для пользователей, Microsoft выбрала «скрывать» эти расширения и эпоху троянских файлов, которые выглядят так, как будто они одного типа, но на самом деле имеют разное расширение и обрабатываются другим файлом.

1

Если два приложения хранят данные по-разному, но сконструированы таким образом, что файл для одного может также быть допустимым (но бессмысленным) файлом для другого, могут произойти очень плохие вещи. Программа может подумать, что она успешно загрузила файл (не подозревая, что данные бессмысленны), а затем напишет обратно файл, который был бы семантически идентичным, но который больше не будет осмысленно читаемым приложением, которое его написало (или что-либо еще в этом отношении).

Использование магических чисел не полностью предотвращает это, но может помочь хотя бы несколько.

Кстати, попытка угадать формат данных часто очень опасна. Предположим, например, что у вас есть список возможных дат в формате nn-nn-nn. Если вы не знаете, в каком формате находятся даты, может быть достаточно информации, чтобы довольно хорошо угадать формат (например, если одна из записей составляет 12-31-99, а затем отсутствующая информация, напротив, даты, вероятно, равны -dd-yy), но если все даты будут в течение первых 12 дней месяца, данные могут быть легко истолкованы. Предположим, однако, данным предшествовало что-то, говорящее «MM-DD-YY». Тогда риски неправильного толкования могут быть уменьшены.

Смежные вопросы