24Aug
מאז האדם הראשון כתב 5318008 על המחשבון, nerds כבר מסתיר מספרים סודיים בתוך המחשב, ושימוש בהם כדי לשאת ולתת לחיצות ידיים חשאיות בין יישומים וקבצים.היום אנחנו לוקחים מבט מהיר על כמה דוגמאות יותר מבדרים.
מה הם מספרי הקסם?
רוב שפות התכנות משתמשות בסוג שלם של 32 סיביות כדי לייצג סוגים מסוימים של נתונים שמאחורי הקלעים - פנימי המספר נשמר ב- RAM או בשימוש על-ידי המעבד כ -32 ואפס, אך בקוד המקור הוא ייכתב ב-או פורמט עשרוני רגיל, או בפורמט הקסדצימלי, אשר משתמש במספרים 0 עד 9 ואת האותיות A עד F.
כאשר מערכת ההפעלה או יישום רוצה לקבוע את סוג הקובץ, זה יכול להסתכל על תחילת הקובץעבור סמן מיוחד המסמן את סוג הקובץ.לדוגמה, קובץ PDF עשוי להתחיל עם ערך hex 0x255044462D312E33, השווה ל- "% PDF-1.3" בתבנית ASCII, או קובץ ZIP מתחיל עם 0x504B, השווה ל- "PK", היורד ממכשיר ה- PKZip המקורי.על ידי הסתכלות על "חתימה" זו, ניתן לזהות בקלות את סוג הקובץ גם ללא מטא נתונים אחרים.
כלי השירות לינוקס "קובץ" ניתן להשתמש מהמסוף כדי לקבוע את סוג הקובץ - למעשה, הוא קורא את מספרי הקסם מתוך קובץ שנקרא "קסם".
כאשר יישום רוצהכדי לקרוא פונקציה, זה יכול להעביר ערכים לפונקציה זו באמצעות סוגים סטנדרטיים כמו שלם, אשר יכול לבוא לידי ביטוי בקוד המקור בפורמט הקסדצימלי.זה נכון במיוחד עבור קבועים, שהם מזהים מוגדרים עם שמות קריא כמו אדם AUTOSAVE_INTERVAL, אבל הם מפה לערכים שלמים( או סוג אחר) בפועל.אז במקום מתכנת להקליד את הערך כמו 60 בכל פעם שהם קוראים את הפונקציה בקוד המקור, הם יכולים להשתמש קבוע AUTOSAVE_INTERVAL לקריאה טובה יותר.(הקבועים הם בדרך כלל מוכרים בקלות כי הם כתובים בכל אותיות גדולות).
כל הדוגמאות הללו יכולות ליפול תחת המונח Magic Numbers, מכיוון שהן עשויות לחייב מספר הקסדצימלי מסוים כדי שפונקציה או סוג קובץ יפעלו כראוי. .. אם הערך אינו נכון, הוא לא יעבוד.וכאשר מתכנת רוצה להיות קצת כיף, הם עשויים להגדיר ערכים אלה באמצעות מספרים הקסדצימליים כי לאיית משהו באנגלית, הידוע גם בשם hexspeak.
כיף עם מספרים קסומים: כמה דוגמאות ראויות לציון
אם תעיין בקוד המקור של לינוקס, תראה ששיחת המערכת _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 לקרוס רישום כדי לציין כי יומן הוא stackshot של המערכת כולה.
- 0xbad22222 - בשימוש על ידי iOS לקרוס רישום כדי לציין כי יישום ה- VoIP נהרג על ידי iOS כי זה misbehaved.
- 0x8badf00d -( אכלו מזון רע) בשימוש על ידי יומני התרסקות iOS כדי לציין כי יישום לקח זמן רב מדי לעשות משהו ונהרג על ידי פסק זמן השמירה.
- 0xdeadfa11 -( Dead Fall) המשמשת את מערכת ההפעלה של iOS לקרוס כאשר אפליקציה משוחררת על ידי משתמש.
- 0xDEADD00D - המשמש את Android להצביע על הפלה של VM.
- 0xDEAD10CC( נעל המלח) בשימוש על ידי קריסת iOS לרשום כאשר יישום נועל משאב ברקע.
- 0xBAADF00D( מזון רע) המשמש את הפונקציה LocalAlloc ב- Windows לצורך איתור באגים.
- 0xCAFED00D( אחי קפה) בשימוש על ידי דחיסה pack200 של Java.
- 0xCAFEBABE( בייבי קפה) המשמש את ג 'אווה כמזהה עבור קבצים בכיתה הידור
- 0x0D15EA5E( מחלות) המשמשים את Nintendo על Gamecube ו- Wii כדי לציין אתחול רגיל קרה.
- 0x1BADB002( 1 אתחול רע) המשמש את מפרט multiboot כמספר קסום
- 0xDEADDEAD - בשימוש על ידי Windows כדי לציין באופן ידני את התרסקות debug יזם, הידוע גם בשם מסך כחול של מוות.
אלה לא היחידים שם בחוץ, כמובן, אבל רק רשימה קצרה של דוגמאות שנראו כיף.לדעת יותר?ספר לנו את ההערות.
לראות דוגמאות עבור עצמך
אתה יכול לראות דוגמאות נוספות על ידי פתיחת עורך hex ולאחר מכן פתיחת כל מספר סוגי קבצים.יש הרבה עורכי hex freeware זמין עבור Windows, OS X, או Linux - רק לוודא שאתה זהיר בעת התקנת freeware לא לקבל נגוע crapware או תוכנות ריגול.
כדוגמה נוספת, תמונות התאוששות עבור טלפונים דמוי אדם כמו ClockworkMod להתחיל עם "ANDROID!" אם לקרוא בפורמט ASCII.
הערה: לא הולך לשנות משהו בזמן שאתה מסתכל מסביב.עורכי Hex יכול לשבור דברים!