นับตั้งแต่คนแรกเขียน 5318008 บนเครื่องคิดเลขพวกเนิร์ดได้ซ่อนหมายเลขลับไว้ในพีซีของคุณและใช้เพื่อเจรจาการจับมือกันอย่างลับๆระหว่างแอปพลิเคชันและไฟล์ วันนี้เรามาดูตัวอย่างความบันเทิงเพิ่มเติมกันอย่างรวดเร็ว
Magic Numbers คืออะไร?
ภาษาโปรแกรมส่วนใหญ่ใช้ประเภทจำนวนเต็ม 32 บิตเพื่อแสดงข้อมูลบางประเภทที่อยู่เบื้องหลัง - ตัวเลขจะถูกเก็บไว้ใน RAM หรือใช้โดย CPU เป็น 32 ตัวและศูนย์ แต่ในซอร์สโค้ดจะเขียนเป็นอย่างใดอย่างหนึ่ง รูปแบบทศนิยมปกติหรือเป็นรูปแบบเลขฐานสิบหกซึ่งใช้ตัวเลข 0 ถึง 9 และตัวอักษร A ถึง F
เมื่อระบบปฏิบัติการหรือแอปพลิเคชันต้องการกำหนดประเภทของไฟล์ก็สามารถมองไปที่จุดเริ่มต้นของไฟล์เพื่อหาเครื่องหมายพิเศษที่แสดงถึงประเภทของไฟล์ ตัวอย่างเช่นไฟล์ PDF อาจเริ่มต้นด้วยค่าฐานสิบหก 0x255044462D312E33 ซึ่งเท่ากับ“% PDF-1.3” ในรูปแบบ ASCII หรือไฟล์ ZIP เริ่มต้นด้วย 0x504B ซึ่งเท่ากับ“ PK” ซึ่งมาจากยูทิลิตี้ PKZip ดั้งเดิม เมื่อดูที่ "ลายเซ็น" นี้จะสามารถระบุประเภทไฟล์ได้อย่างง่ายดายแม้ไม่มีข้อมูลเมตาอื่น ๆ
"ไฟล์" ยูทิลิตี้ Linux สามารถใช้จากเทอร์มินัลเพื่อกำหนดประเภทของไฟล์ - อันที่จริงแล้ว อ่านตัวเลขมหัศจรรย์จากไฟล์ เรียกว่า“ เวทมนตร์”
เมื่อแอปพลิเคชันต้องการเรียกใช้ฟังก์ชันแอปพลิเคชันสามารถส่งผ่านค่าไปยังฟังก์ชันนั้นโดยใช้ประเภทมาตรฐานเช่นจำนวนเต็มซึ่งสามารถแสดงในซอร์สโค้ดในรูปแบบเลขฐานสิบหก โดยเฉพาะอย่างยิ่งสำหรับค่าคงที่ซึ่งเป็นตัวระบุที่กำหนดด้วยชื่อที่มนุษย์อ่านได้เช่น AUTOSAVE_INTERVAL แต่จะจับคู่กับค่าจำนวนเต็มจริง (หรือประเภทอื่น) ดังนั้นแทนที่จะให้โปรแกรมเมอร์พิมพ์ค่าเช่น 60 ทุกครั้งที่เรียกใช้ฟังก์ชันในซอร์สโค้ดพวกเขาสามารถใช้ค่าคงที่ AUTOSAVE_INTERVAL เพื่อให้อ่านง่ายขึ้น (ค่าคงที่มักจะจำได้ง่ายเพราะเขียนด้วยตัวพิมพ์ใหญ่ทั้งหมด)
ตัวอย่างทั้งหมดนี้อาจอยู่ภายใต้ข้อกำหนด เลขวิเศษ เนื่องจากอาจต้องใช้เลขฐานสิบหกที่เฉพาะเจาะจงเพื่อให้ฟังก์ชันหรือประเภทไฟล์ทำงานได้อย่างถูกต้อง ... หากค่าไม่ถูกต้องก็จะใช้ไม่ได้ และเมื่อโปรแกรมเมอร์ต้องการความสนุกสนานเล็กน้อยพวกเขาอาจกำหนดค่าเหล่านี้โดยใช้เลขฐานสิบหกที่สะกดคำในภาษาอังกฤษหรือที่เรียกว่า hexspeak .
สนุกกับ Magic Numbers: ตัวอย่างที่โดดเด่นบางประการ
หากลองดูอย่างรวดเร็ว ลงในซอร์สโค้ด Linux คุณจะเห็นว่าการเรียกระบบ _reboot () บน Linux ต้องการตัวแปร "magic" ในการส่งผ่านซึ่งเท่ากับเลขฐานสิบหก 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) ที่ใช้โดยการบีบอัด pack200 ของ Java
- 0xCAFEBABE (Cafe babe) ที่ Java ใช้เป็นตัวระบุสำหรับไฟล์คลาสที่คอมไพล์
- 0x0D15EA5E (โรค) ที่ Nintendo ใช้บน Gamecube และ Wii เพื่อระบุว่ามีการบู๊ตปกติเกิดขึ้น
- 0x1BADB002 (การบูตไม่ดี 1 รายการ) ที่ใช้โดยไฟล์ มัลติบูต สเปคเป็นเลขวิเศษ
- 0xDEADDEAD - ใช้โดย Windows เพื่อระบุไฟล์ เกิดข้อผิดพลาดในการแก้ไขข้อบกพร่องด้วยตนเอง หรือที่เรียกว่า Blue Screen of Death
สิ่งเหล่านี้ไม่ใช่เพียงตัวอย่างเดียวเท่านั้น แต่เป็นเพียงตัวอย่างสั้น ๆ ที่ดูน่าสนุก รู้อะไรอีกไหม? บอกเราในความคิดเห็น
ดูตัวอย่างด้วยตัวคุณเอง
คุณสามารถดูตัวอย่างเพิ่มเติมได้โดยเปิดตัวแก้ไขฐานสิบหกจากนั้นเปิดไฟล์ประเภทใดก็ได้ มีโปรแกรมแก้ไข hex ฟรีแวร์มากมายสำหรับ Windows, OS X หรือ Linux - เพียงแค่ ตรวจสอบให้แน่ใจว่าคุณระมัดระวังในการติดตั้งฟรีแวร์ เพื่อไม่ให้ติด crapware หรือสปายแวร์
ตัวอย่างเพิ่มเติมอิมเมจการกู้คืนสำหรับโทรศัพท์ Android เช่น ClockworkMod เริ่มต้นด้วย“ ANDROID!” หากอ่านในรูปแบบ ASCII
บันทึก: อย่าเปลี่ยนอะไรในขณะที่คุณมองไปรอบ ๆ ตัวแก้ไข Hex สามารถทำลายสิ่งต่างๆได้!