Магические числа: секретные коды, которые программисты скрывают на вашем ПК

Оглавление:

Магические числа: секретные коды, которые программисты скрывают на вашем ПК
Магические числа: секретные коды, которые программисты скрывают на вашем ПК

Видео: Магические числа: секретные коды, которые программисты скрывают на вашем ПК

Видео: Магические числа: секретные коды, которые программисты скрывают на вашем ПК
Видео: Круче, чем Kodachi, Tails и Kali? Увы… Обзор анонимной Whonix OS - YouTube 2024, Май
Anonim
С тех пор, как первый человек написал 5318008 на калькуляторе, ботаники скрывали секретные номера внутри вашего ПК и использовали их для обсуждения секретных рукопожатий между приложениями и файлами. Сегодня мы быстро рассмотрим некоторые более интересные примеры.
С тех пор, как первый человек написал 5318008 на калькуляторе, ботаники скрывали секретные номера внутри вашего ПК и использовали их для обсуждения секретных рукопожатий между приложениями и файлами. Сегодня мы быстро рассмотрим некоторые более интересные примеры.

Что такое магические числа?

Большинство языков программирования используют 32-разрядный целочисленный тип для представления определенных типов данных за кулисами - внутренне число хранится в ОЗУ или используется ЦП как 32 единицы и нули, но в исходном коде оно будет выписано либо в регулярный десятичный формат или как шестнадцатеричный формат, который использует числа от 0 до 9 и буквы от A до F.

Когда операционная система или приложение хочет определить тип файла, он может посмотреть на начало файла для специального маркера, который обозначает тип файла. Например, файл PDF может начинаться с шестнадцатеричного значения 0x255044462D312E33, что равно «% PDF-1.3» в формате ASCII, или ZIP-файл начинается с 0x504B, что равно «PK», которое происходит от исходной утилиты PKZip. Рассматривая эту «подпись», тип файла можно легко идентифицировать даже без каких-либо других метаданных.

Утилита Linux «файл» может использоваться из терминала для определения типа файла - на самом деле он читает магические числа из файла, называемого «магия».
Утилита Linux «файл» может использоваться из терминала для определения типа файла - на самом деле он читает магические числа из файла, называемого «магия».

Когда приложение хочет вызвать функцию, оно может передавать значения этой функции с использованием стандартных типов, таких как integer, которые могут быть выражены в исходном коде в шестнадцатеричном формате. Это особенно верно для констант, которые являются идентификаторами, определяемыми с помощью человекочитаемых имен, таких как AUTOSAVE_INTERVAL, но они сопоставляются с фактическими значениями целого (или другого типа). Поэтому вместо того, чтобы программист вводил значение, равное 60, каждый раз, когда они вызывали функцию в исходном коде, они могли использовать константу AUTOSAVE_INTERVAL для лучшей читаемости. (Константы обычно легко распознаются, потому что они написаны всеми прописными буквами).

Все эти примеры могут подпадать под термин «Магические числа», поскольку для корректной работы функции или типа файла может потребоваться определенное шестнадцатеричное число … если значение неверно, оно не будет работать. И когда программист хочет немного повеселиться, они могут определять эти значения, используя шестнадцатеричные числа, которые описывают что-то на английском языке, иначе известное как hexspeak.

Fun With Magic Numbers: некоторые примечательные примеры

Если вы быстро взглянете на исходный код Linux, вы увидите, что системный вызов reboot () в Linux требует передачи «магической» переменной, которая равна шестнадцатеричному числу 0xfee1dead. Если что-то попыталось вызвать эту функцию, не пройдя сначала в этом волшебном значении, оно просто вернет ошибку.
Если вы быстро взглянете на исходный код Linux, вы увидите, что системный вызов reboot () в Linux требует передачи «магической» переменной, которая равна шестнадцатеричному числу 0xfee1dead. Если что-то попыталось вызвать эту функцию, не пройдя сначала в этом волшебном значении, оно просто вернет ошибку.

GUID (глобальный уникальный идентификатор) для загрузочного раздела BIOS в схеме разделения GPT составляет 21686148-6449-6E6F-744E-656564454649, который формирует строку ASCII «Hah! IdontNeedEFI», намек на то, что GPT обычно используется на компьютерах, которые заменили BIOS UEFI, но это необязательно.

Microsoft лихо скрывала 0x0B00B135 в своей виртуальной машине Hyper-V, поддерживая исходный код, представленный в Linux, после чего они изменили значение на 0xB16B00B5 и, наконец, переключили его на десятичный, прежде чем он был полностью удален из исходного кода.

Более забавные примеры включают:

  • 0xbaaaaaad - используется для регистрации сбоев iOS, чтобы указать, что журнал является стеком для всей системы.
  • 0xbad22222 - используется журналом сбоев iOS, чтобы указать, что приложение VoIP было убито iOS, потому что оно плохо себя ведет.
  • 0x8badf00d - (Ate Bad Food), используемый журналами сбоев iOS, чтобы указать, что приложение заняло слишком много времени, чтобы что-то сделать, и был убит тайм-аутом сторожевого таймера.
  • 0xdeadfa11 - (Dead Fall), используемый регистрацией сбоев iOS, когда приложение принудительно завершает работу пользователя.
  • 0xDEADD00D - используется Android для указания прерывания VM.
  • 0xDEAD10CC (Dead Lock), используемый регистрацией сбоев iOS, когда приложение блокирует ресурс в фоновом режиме.
  • 0xBAADF00D (Плохая еда), используемая функцией LocalAlloc в Windows для отладки.
  • 0xCAFED00D (Cafe dude), используемый сжатием Java pack200.
  • 0xCAFEBABE (Cafe babe), используемый Java как идентификатор скомпилированных файлов классов
  • 0x0D15EA5E (Disease), используемый Nintendo на Gamecube и Wii, чтобы указать, что нормальная загрузка произошла.
  • 0x1BADB002 (1 плохая загрузка), используемая спецификацией multiboot как магическое число
  • 0xDEADDEAD - используется Windows для указания ручного инициированного отладочного сбоя, иначе известного как синий экран смерти.

Конечно, это не единственные, но только короткий список примеров, которые казались забавными. Знаешь больше? Напишите нам в комментариях.

Просмотр примеров для себя

Вы можете увидеть больше примеров, открыв шестнадцатеричный редактор, а затем открыв любое количество типов файлов. Для Windows, OS X или Linux доступно множество бесплатных шестнадцатеричных редакторов - просто убедитесь, что вы осторожны при установке бесплатного ПО, чтобы не заразиться программными или шпионскими программами.

В качестве дополнительного примера изображения восстановления для телефонов Android, такие как ClockworkMod, начинаются с «ANDROID!», Если они читаются в формате ASCII.

Image
Image

Замечания: ничего не меняйте, пока вы смотрите вокруг. Редакторы Hex могут сломать вещи!

Рекомендуемые: