24Aug

Magic Numbers: tajne kody, które programista ukrywa na swoim komputerze

click fraud protection

Odkąd pierwsza osoba wypisała 5318008 na kalkulatorze, nerdy ukrywały tajne numery wewnątrz komputera i używały ich do negocjowania tajnych uścisków dłoni pomiędzy aplikacjami i plikami. Dzisiaj rzucimy okiem na niektóre z bardziej zabawnych przykładów.

Czym są numery magiczne?

Większość języków programowania używa 32-bitowego typu całkowitego do reprezentowania pewnych typów danych za kulisami - wewnętrznie liczba jest przechowywana w pamięci RAM lub używana przez CPU jako 32 zer i jedynek, ale w kodzie źródłowym byłaby zapisana wzwykły format dziesiętny lub w formacie heksadecymalnym, który używa cyfr od 0 do 9 i liter od A do F.

Gdy system operacyjny lub aplikacja chce określić typ pliku, może spojrzeć na początek plikudla specjalnego znacznika, który oznacza typ pliku. Na przykład plik PDF może zaczynać się od wartości szesnastkowej 0x255044462D312E33, która jest równa "% PDF-1.3" w formacie ASCII, lub plik ZIP zaczyna się od 0x504B, co równa się "PK", która pochodzi z oryginalnego narzędzia PKZip. Patrząc na ten "podpis", typ pliku można łatwo zidentyfikować, nawet bez żadnych innych metadanych.

instagram viewer

Skompilowane pliki klasy Java zaczynają się od CAFEBABE

"Plik" Linuxa może być użyty z terminala do określenia typu pliku - w rzeczywistości odczytuje magiczne liczby z pliku o nazwie "magia".

Gdy aplikacja chceaby wywołać funkcję, może przekazywać wartości do tej funkcji przy użyciu standardowych typów, takich jak liczba całkowita, które mogą być wyrażone w kodzie źródłowym w formacie szesnastkowym. Dotyczy to w szczególności stałych, które są identyfikatorami zdefiniowanymi za pomocą nazw czytelnych dla człowieka, takich jak AUTOSAVE_INTERVAL, ale mapują one do rzeczywistych wartości całkowitych( lub innego typu).Zamiast więc programista wypisuje wartość taką jak 60 za każdym razem, gdy wywoła funkcję w kodzie źródłowym, mogliby użyć stałej AUTOSAVE_INTERVAL dla lepszej czytelności.(Stałe są zwykle łatwo rozpoznawane, ponieważ są napisane dużymi literami).

Wszystkie te przykłady mogą należeć do terminu Magiczne liczby, ponieważ mogą wymagać określonej liczby szesnastkowej, aby funkcja lub typ pliku działały poprawnie. .. jeśli wartość nie jest prawidłowa, nie będzie działać.A kiedy programista chce się trochę zabawić, może zdefiniować te wartości za pomocą liczb szesnastkowych, które opisują coś po angielsku, znanego też jako hexspeak.

Zabawa z magicznymi liczbami: niektóre godne uwagi przykłady

Każdy AppleScript kończy się FADEDEAD

Jeśli zajrzysz do kodu źródłowego Linuksa, zobaczysz, że wywołanie systemowe _reboot() w systemie Linux wymaga podania "magicznej" zmiennejto jest liczba szesnastkowa 0xfee1dead. Jeśli coś próbowało wywołać tę funkcję, nie przekazując najpierw tej wartości magicznej, po prostu zwróci błąd.

Identyfikator GUID( globalnie unikalny identyfikator) dla partycji rozruchowej systemu BIOS w schemacie partycjonowania GPT to 21686148-6449-6E6F-744E-656564454649, który tworzy ciąg znaków ASCII "Hah! IdontNeedEFI", co jest aluzją do faktu, że GPT byłby normalnieużywane w komputerach, które zastąpiły BIOS z UEFI, ale niekoniecznie muszą.

Firma Microsoft ukryła słynnie 0x0B00B135 w swojej wirtualnej maszynie Hyper-V obsługującej kod źródłowy przesłany do systemu Linux, następnie zmieniła wartość na 0xB16B00B5 i ostatecznie zmieniła ją na dziesiętną, zanim została całkowicie usunięta z kodu źródłowego.

Więcej zabawnych przykładów to:

  • 0xbaaaaaad - używany w dzienniku awarii systemu iOS, aby wskazać, że dziennik jest stackshotem całego systemu.
  • 0xbad22222 - używany przez rejestrowanie awarii systemu iOS, aby wskazać, że aplikacja VoIP została zabita przez iOS, ponieważ źle się zachowywała.
  • 0x8badf00d -( Złe jedzenie) używane przez dzienniki awarii systemu iOS, aby wskazać, że aplikacja wykonała zbyt długo i została zabita przez przekroczenie limitu czasu watchdoga.
  • 0xdeadfa11 -( Dead Fall) używany przez rejestrowanie awarii systemu iOS po wymuszeniu zamknięcia aplikacji przez użytkownika.
  • 0xDEADD00D - używany przez system Android do sygnalizowania przerwania maszyny wirtualnej.
  • 0xDEAD10CC( Dead Lock) używane przez logowanie awarii systemu iOS, gdy aplikacja blokuje zasób w tle.
  • 0xBAADF00D( Bad Food) używane przez funkcję LocalAlloc w systemie Windows do debugowania.
  • 0xCAFED00D( Cafe dude) używany w kompresji Java pack200.
  • 0xCAFEBABE( Cafe Babe) używana przez Javę jako identyfikator skompilowanych plików klas
  • 0x0D15EA5E( Disease) używana przez Nintendo na Gamecube i Wii do wskazania normalnego startu.
  • 0x1BADB002( 1 niepoprawny rozruch) używany przez specyfikację multiboota jako magiczna liczba
  • 0xDEADDEAD - używany przez system Windows do sygnalizowania awarię debugowania zainicjowanego ręcznie, znanego również jako niebieski ekran śmierci.

Oczywiście nie są to jedyne, ale tylko krótka lista przykładów, które wydawały się zabawne. Wiesz więcej? Powiedz nam w komentarzach.

Zobacz przykłady dla siebie

Możesz zobaczyć więcej przykładów, otwierając edytor heksadecymalny, a następnie otwierając dowolną liczbę typów plików. Istnieje wiele darmowych edytorów szesnastkowych dostępnych dla systemów Windows, OS X lub Linux - po prostu upewnij się, że instalujesz oprogramowanie freeware, aby nie zarazić się crapware lub spyware.

Jako dodatkowy przykład, obrazy odzyskiwania dla telefonów z Androidem, takie jak ClockworkMod, rozpoczynają się od "ANDROID!", Jeśli są czytane w formacie ASCII.

Uwaga: nie zmienia niczego podczas przeglądania. Redaktorzy heksadecy mogą łamać rzeczy!