24Aug
İlk kişi 5318008'i bir hesap makinesinde yazdığından beri, nerdler PC'nizin içine gizli numaralar gizliyor ve bunları uygulamalar ve dosyalar arasındaki gizli el sıkışmaları için müzakere etmek için kullanıyor. Bugün, daha enteresan örneklerden bazılarına hızlıca göz atalım.
Sihirli Numaralar Nedir?
Çoğu programlama dili, sahnenin arkasındaki belirli veri tiplerini temsil etmek için 32 bitlik bir tam sayı türünü kullanır - dahili olarak sayı RAM'de saklanır veya CPU tarafından 32 ve sıfırlar olarak kullanılır, ancak kaynak kodunda yazılırnormal ondalık biçiminde veya 0'dan 9'a kadar olan sayıları ve A'dan F'ye kadar olan harfleri kullanan onaltılık biçim olarak kullanılabilir.
İşletim sistemi veya uygulama bir dosyanın türünü belirlemek istediğinde, dosyanın başına bakabilirdosyanın türünü belirten özel bir işaretleyici için.Örneğin, bir PDF dosyası, ASCII formatında "% PDF-1.3" e eşit olan onaltılık değer 0x255044462D312E33 ile başlayabilir veya bir ZIP dosyası, orijinal PKZip yardımcı programından gelen "PK" ye eşit 0x504B ile başlar. Bu "imzaya" bakarak, herhangi bir meta veri olmadan bile dosya türü kolaylıkla tanımlanabilir.
ile başlar Linux yardımcı programı "dosya", bir dosyanın türünü belirlemek için terminalden kullanılabilir - aslında, sihirli numaraları "sihir" adlı bir dosyadan okur
Bir uygulama istediğindebir işlevi çağırmak için onaltılık biçimde kaynak kodda ifade edilebilen tamsayı gibi standart türler kullanarak bu işleve değerler iletebilir. Bu, AUTOSAVE_INTERVAL gibi okunabilir isimlerle tanımlanan tanımlayıcılar olan sabitler için özellikle geçerlidir, ancak gerçek tam sayı( veya başka tür) değerlerine eşlenir. Bu nedenle, bir programcı, işlevini kaynak kodunda her çağırdıklarında 60 gibi bir değer yazarak yerine, daha iyi okunabilirlik için AUTOSAVE_INTERVAL sabitini kullanabilir.(Sabitler genellikle kolay tanınır çünkü hepsi büyük harfle yazılır).
Bu örneklerin hepsi bir işlev veya dosya türünün düzgün çalışması için belirli bir onaltılık sayıya ihtiyaç duyabileceği için Sihirli Numaralar terimine girebilir. .. eğer değer doğru değilse işe yaramaz. Ve bir programcı biraz eğlenmek istediğinde, bu değerleri, aksi halde hexspeak olarak bilinen İngilizce'de bir şeyler heceleyen onaltılık sayıları kullanarak tanımlayabilirler.
Sihirli Sayılarla Eğlenceli: Bazı Önemli Örnekler
ile bitiyor. Linux kaynak koduna hızlı bir göz atarsanız, Linux'ta _reboot() sistem çağrısının bir "sihirli" değişken geçirilmesini gerektirdiğini görürsünüzBu, 0xfee1dead onaltılı sayıya eşittir. Bir şey, o sihirli değere geçmeden önce bu işlevi çağırmaya çalışırsa, yalnızca bir hata döndürür.
GPT bölümleme şemasındaki bir BIOS önyükleme bölümünün GUID'si( genel olarak benzersiz tanımlayıcı), "Hah! IdontNeedEFI" ASCII dizesini oluşturan 21686148-6449-6E6F-744E-656564454649 olup, GPT'nin normalde olacağı anlamına gelmektedirBIOS'u UEFI ile değiştiren bilgisayarlarda kullanılır, ancak mutlaka olması gerekmez.
Microsoft, 0x0B00B135 sayısını 0x0B00B135 değerini Hyper-V sanal makinesinde Linux'a gönderilen kaynak kodunu destekleyerek gizledi, daha sonra değeri 0xB16B00B5 olarak değiştirdi ve kaynak kodu tamamen kaldırılmadan önce ondalık olarak değiştirdi.
Daha eğlenceli örnekler şunlardır:
- 0xbaaaaaad - Bir günlüğün tüm sistemin birikimi olduğunu göstermek için iOS çökme günlüğü tarafından kullanılır.
- 0xbad22222 - iOS çökme günlüğü tarafından, hatalı çalıştığı için bir VoIP uygulamasının iOS tarafından öldürülmüş olduğunu göstermesi için kullanılır.
- 0x8badf00d -( Ate Bad Food), bir uygulamanın bir şeyler yapmak için çok uzun süre kaldığını ve watchdog zaman aşımı tarafından öldürüldüğünü belirtmek için iOS çökme günlükleri tarafından kullanılır.
- 0xdeadfa11 -( Öldük Düşme), bir kullanıcı bir kullanıcı tarafından zorla bırakıldığında iOS kilitlenme günlüğü tarafından kullanılır.
- 0xDEADD00D - Android tarafından bir VM iptali belirtmek için kullanılır.
- 0xDEAD10CC( Dead Lock), bir uygulama bir kaynağı arka planda kilitlediğinde iOS çökme günlüğü tarafından kullanılır.
- 0xBAADF00D( Kötü Yiyecek), Windows'da LocalAlloc işlevi tarafından hata ayıklama için kullanılır.
- Java'nın pack200 sıkıştırması tarafından kullanılan 0xCAFED00D( Cafe dude).
- 0xCAFEBABE( Cafe babe), derlenmiş sınıf dosyaları için tanımlayıcı olarak Java tarafından kullanılır
- 0x0D15EA5E( Hastalık) Nintendo tarafından Gamecube ve Wii'de normal bir önyükleme yapıldığını belirtmek için kullanılır.
- 0b1badb002( 1 hatalı önyükleme), çoklu önyükleme belirtiminde sihirli sayı olarak kullanılır
- 0xDEADDEAD - Windows tarafından, elle başlatılan hata ayıklama çökmesini belirtmek için kullanılır; aksi takdirde Ölümün Mavi Ekranı olarak bilinir.
Elbette bunlar sadece orada değil, sadece eğlenceli görünen örneklerin kısa bir listesi. Daha fazlasını biliyor musun? Yorumlarda bize söyle.
Kendinize Örnekler Görme
Bir hex editör açıp daha sonra herhangi bir sayıda dosya türünü açarak daha fazla örnek görebilirsiniz. Windows, OS X veya Linux için ücretsiz çok sayıda hex editörü vardır - sadece crapware veya casus yazılım bulaşmamasına dikkat etmeniz için ücretsiz yazılım yüklediğinizden emin olun.
Eklenen bir örnek olarak, ClockworkMod gibi Android telefonlar için kurtarma görüntüleri ASCII formatında okunursa "ANDROID!" Ile başlar.
Not: etrafına bakarken hiçbir şeyi değiştirmeyin. Onaltılı editörler şeyleri kırabilir!