Magic Numbers Programlayıcıların PC'nizde Sakladığı Gizli Kodlar
İlk hesap makinesinde 5318008 yazdığından beri, inekler PC'nizin içindeki gizli numaraları saklıyor ve bunları uygulamalar ve dosyalar arasındaki gizli anlaşmaları müzakere etmek için kullanıyorlardı. Bugün daha eğlenceli örneklerden bazılarına hızlıca göz atıyoruz.
Sihirli sayılar nedir?
Çoğu programlama dili, sahne arkasındaki belirli veri türlerini temsil etmek için 32 bit tam sayı türünü kullanır - dahili sayı RAM'de saklanır veya CPU tarafından 32 olanlar ve sıfır olarak kullanılır, ancak kaynak kodunda yazılır. 0 ile 9 arasındaki sayıları ve A ile F arasındaki harfleri kullanan normal ondalık format ya da onaltılık format.
İşletim sistemi veya uygulama bir dosyanın türünü belirlemek istediğinde, dosyanın türünü belirten özel bir işaretleyici için dosyanın başına bakabilir. Örneğin, bir PDF dosyası ASCII biçimindeki “% PDF-1.3” değerine eşdeğer olan 0x255044462D312E33 hex değeriyle başlayabilir veya bir ZIP dosyası, orijinal PKZip yardımcı programından gelen “PK” ye eşit olan bir ZIP dosyası 0x504B ile başlar. Bu “imza” ya bakarak, bir dosya türü başka bir meta veri olmadan bile kolayca tanımlanabilir.
Derlenmiş Java Sınıfı dosyaları CAFEBABE ile başlarLinux yardımcı programı “dosya”, bir dosya türünü belirlemek için terminalden kullanılabilir - aslında, sihirli sayıları “sihirli” adlı bir dosyadan okur.
Bir uygulama bir işlevi çağırmak istediğinde, kaynak kodda onaltılık biçimde ifade edilebilen tamsayı gibi standart türler kullanarak bu işleve değerleri iletebilir. Bu özellikle, AUTOSAVE_INTERVAL gibi insan tarafından okunabilen isimlerle tanımlanan tanımlayıcılar için geçerlidir, ancak bunlar gerçek tamsayı (veya diğer tip) değerlerle eşlenir. Bu nedenle, bir kodlayıcı işlevi kaynak kodda her çağırdığında 60 gibi bir değer yazmak yerine, daha iyi okunabilirlik için AUTOSAVE_INTERVAL sabitini kullanabilirler. (Sabitler genel olarak kolayca tanınırlar çünkü tüm büyük harflerle yazılmıştır).
Bu örneklerin tümü Magic Numbers terimi altında olabilir, çünkü bir işlev veya dosya türünün düzgün çalışması için belirli bir onaltılık sayıya gereksinim duyabilirler… değer doğru değilse işe yaramaz. Bir programcı biraz eğlenmek istediğinde, bu değerleri İngilizce'de bir şey ifade eden onaltılık sayılar kullanarak, aksi takdirde hexspeak olarak bilinen tanımlayabilirler..
Sihirli Rakamlarla Eğlenceli: Bazı Önemli Örnekler
Her AppleScript FADEDEAD ile bitiyorLinux kaynak koduna hızlıca bakarsanız, Linux'taki _reboot () sistem çağrısının, onaltılık sayıdaki 0xfee1dead değerine eşit bir "sihirli" değişken gerektirdiğini görürsünüz. Bir şey ilk önce o sihirli değere geçmeden bu işlevi çağırmaya çalıştıysa, sadece bir hata döndürürdü..
GPT bölümleme şemasındaki BIOS önyükleme bölümü için GUID (genel olarak benzersiz tanımlayıcı) 21686148-6449-6E6F-744E-656564454649'dur ve ASCII dizesini “Hah! IdontNeedEFI” olan ASCII dizesini oluşturur. BIOS'u UEFI ile değiştiren bilgisayarlarda, ancak mutlaka olması gerekmez.
Microsoft, Linux’a gönderilen Hyper-V sanal makineyi destekleyen kaynak koduna ünlü 0x0B00B135’i sakladı, sonra değeri 0xB16B00B5 olarak değiştirdiler ve sonunda kaynak koddan tamamen kaldırılmadan önce onu ondalık olarak değiştirdiler..
Daha eğlenceli örnekler:
- 0xbaaaaaad - Bir günlüğün tüm sistemin yığınlarından biri olduğunu göstermek için iOS kilitlenme günlüğü tarafından kullanılır.
- 0xbad22222 - Bir VoIP uygulamasının hatalı çalıştırıldığı için iOS tarafından öldürüldüğünü belirtmek için iOS kilitlenme günlüğü tarafından kullanılır.
- 0x8badf00d - Bir uygulamanın bir şey yapması çok uzun sürdüğünü ve bekçi zaman aşımı tarafından öldürüldüğünü belirtmek için iOS kilitlenme günlükleri tarafından kullanılan (Kötü Yiyen Yiyecek).
- 0xdeadfa11 - (Dead Fall), bir uygulama kullanıcı tarafından zorla bırakıldığında iOS kilitlenme günlüğü tarafından kullanılır.
- 0xDEADD00D - Android tarafından VM iptalini belirtmek için kullanılır.
- Bir uygulama arka planda bir kaynağı kilitlediğinde, iOS kilitlenme günlüğü tarafından kullanılan 0xDEAD10CC (Dead Lock).
- Windows'ta LocalAlloc işlevi tarafından hata ayıklama amacıyla kullanılan 0xBAADF00D (Kötü Gıda).
- Java'nın pack200 sıkıştırması tarafından kullanılan 0xCAFED00D (Cafe dude).
- Java tarafından derlenmiş sınıf dosyalarının tanımlayıcısı olarak kullanılan 0xCAFEBABE (Cafe babe)
- Nintendo tarafından Gamecube ve Wii'de kullanılan normal bir önyükleme olduğunu göstermek için kullanılan 0x0D15EA5E (Hastalık).
- Çoklu önyükleme belirtimi tarafından sihirli sayı olarak kullanılan 0x1BADB002 (1 hatalı önyükleme)
- 0xDEADDEAD - Windows tarafından, aksi takdirde Ölümün Mavi Ekranı olarak bilinen, elle başlatılan bir hata ayıklama kazasını belirtmek için kullanılır.
Elbette bunlar sadece onlar değil, ama eğlenceli görünen kısa bir örnek listesi. Daha fazlasını biliyor musun? Yorumlarda bize bildirin.
Kendinize Örnekler Görmek
Bir hex editörü açarak ve daha sonra istediğiniz sayıda dosya türünü açarak daha fazla örnek görebilirsiniz. Windows, OS X veya Linux için pek çok ücretsiz hex editörü bulunmaktadır - ücretsiz yazılım yüklerken crapware veya casus yazılım bulaştırmamaya dikkat edin..
Ek bir örnek olarak, ClockworkMod gibi Android telefonlar için kurtarma görüntüleri ASCII biçiminde okunursa “ANDROID!” İle başlar..
Not: etrafa bakarken hiçbir şeyi değiştirmeyin. Hex editörleri işleri kırabilir!