โฮมเพจ » ทำอย่างไร » Magic Numbers รหัสลับที่โปรแกรมเมอร์ซ่อนไว้ในพีซีของคุณ

    Magic Numbers รหัสลับที่โปรแกรมเมอร์ซ่อนไว้ในพีซีของคุณ

    นับตั้งแต่คนแรกที่เขียน 5318008 บนเครื่องคิดเลข nerds ได้ซ่อนตัวเลขลับไว้ในพีซีของคุณและใช้เพื่อเจรจาจับมือลับระหว่างแอปพลิเคชันและไฟล์ วันนี้เรามาดูตัวอย่างความบันเทิงที่รวดเร็วยิ่งขึ้น.

    เบอร์เมจิกคืออะไร?

    ภาษาการเขียนโปรแกรมส่วนใหญ่ใช้ชนิดจำนวนเต็ม 32- บิตเพื่อแสดงข้อมูลบางประเภทที่อยู่เบื้องหลัง - ภายในตัวเลขนั้นถูกเก็บไว้ใน RAM หรือใช้โดย CPU เป็น 32 ตัวและศูนย์ แต่ในซอร์สโค้ดมันจะเขียนออกมาทั้ง รูปแบบทศนิยมปกติหรือเป็นรูปแบบเลขฐานสิบหกซึ่งใช้ตัวเลข 0 ถึง 9 และตัวอักษร A ถึง F.

    เมื่อระบบปฏิบัติการหรือแอปพลิเคชันต้องการกำหนดประเภทของไฟล์ระบบสามารถค้นหาจุดเริ่มต้นของไฟล์เพื่อหาเครื่องหมายพิเศษที่ระบุประเภทของไฟล์ ตัวอย่างเช่นไฟล์ PDF อาจเริ่มต้นด้วยค่าฐานสิบหก 0x255044462D312E33 ซึ่งเท่ากับ“% PDF-1.3” ในรูปแบบ ASCII หรือไฟล์ ZIP ขึ้นต้นด้วย 0x504B ซึ่งเท่ากับ“ PK” ซึ่งสืบทอดมาจากยูทิลิตี้ PKZip ดั้งเดิม โดยการดูที่“ ลายเซ็นต์นี้” ไฟล์ประเภทนั้นสามารถระบุได้ง่ายแม้ไม่มีเมทาดาทาอื่น ๆ.

    ไฟล์ Java Class ที่คอมไพล์เริ่มต้นด้วย CAFEBABE

    "ไฟล์" ยูทิลิตี้ของ Linux สามารถใช้จากเทอร์มินัลเพื่อกำหนดประเภทของไฟล์ - ในความเป็นจริงมันอ่านหมายเลขเวทย์มนตร์จากไฟล์ที่เรียกว่า "เวท"

    เมื่อแอปพลิเคชันต้องการเรียกใช้ฟังก์ชันสามารถส่งค่าไปยังฟังก์ชันนั้นโดยใช้ชนิดมาตรฐานเช่นจำนวนเต็มซึ่งสามารถแสดงในซอร์สโค้ดในรูปแบบเลขฐานสิบหก นี่คือความจริงโดยเฉพาะอย่างยิ่งสำหรับค่าคงที่ซึ่งเป็นตัวระบุที่กำหนดด้วยชื่อที่มนุษย์สามารถอ่านได้เช่น AUTOSAVE_INTERVAL แต่จะจับคู่กับค่าจำนวนเต็มจริง (หรือประเภทอื่น ๆ ) ดังนั้นแทนที่จะให้โปรแกรมเมอร์พิมพ์ค่าเช่น 60 ทุกครั้งที่เรียกฟังก์ชันในซอร์สโค้ดพวกเขาสามารถใช้ค่าคงที่ AUTOSAVE_INTERVAL เพื่อให้อ่านง่ายขึ้น (ค่าคงที่มักจะจดจำได้ง่ายเพราะเขียนด้วยตัวพิมพ์ใหญ่ทั้งหมด).

    ตัวอย่างทั้งหมดเหล่านี้สามารถอยู่ภายใต้คำว่า Magic Numbers เนื่องจากอาจต้องใช้เลขฐานสิบหกเฉพาะเพื่อให้ฟังก์ชันหรือประเภทไฟล์ทำงานอย่างถูกต้อง ... หากค่าไม่ถูกต้องจะไม่ทำงาน และเมื่อโปรแกรมเมอร์ต้องการให้สนุกพวกเขาอาจกำหนดค่าเหล่านี้โดยใช้เลขฐานสิบหกที่สะกดสิ่งในภาษาอังกฤษหรือที่เรียกว่า hexspeak.

    สนุกกับตัวเลขเวทย์: ตัวอย่างเด่น ๆ

    AppleScript ทุกอันลงท้ายด้วย FADEDEAD

    หากคุณมองเข้าไปในซอร์สโค้ด Linux อย่างรวดเร็วคุณจะเห็นว่าการเรียกระบบ _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 เพื่อระบุว่าบันทึกเป็นภาพรวมของระบบทั้งหมด.
    • 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 ในเกมคิวบ์และ Wii เพื่อระบุว่ามีการบูตปกติเกิดขึ้น.
    • 0x1BADB002 (1 บูตไม่ดี) ที่ใช้โดยข้อมูลจำเพาะมัลติบูตเป็นหมายเลขมายากล
    • 0xDEADDEAD - ใช้โดย Windows เพื่อระบุข้อผิดพลาดในการดีบักที่เริ่มต้นด้วยตนเองหรือที่เรียกว่า Blue Screen of Death.

    แน่นอนว่าสิ่งเหล่านี้ไม่ใช่สิ่งเดียวที่อยู่ในนั้น แต่เป็นเพียงตัวอย่างสั้น ๆ ที่ดูสนุก รู้อะไรอีกบ้าง? บอกเราในความคิดเห็น.

    ดูตัวอย่างด้วยตัวคุณเอง

    คุณสามารถดูตัวอย่างเพิ่มเติมได้โดยเปิดตัวแก้ไข hex แล้วเปิดชนิดไฟล์จำนวนเท่าใดก็ได้ มีโปรแกรมแก้ไข hex ฟรีแวร์มากมายสำหรับ Windows, OS X หรือ Linux - เพียงตรวจสอบให้แน่ใจว่าคุณระมัดระวังในการติดตั้งฟรีแวร์เพื่อไม่ให้ติดไวรัส crapware หรือสปายแวร์.

    เป็นตัวอย่างเพิ่มเติมรูปภาพกู้คืนสำหรับโทรศัพท์ Android เช่น ClockworkMod เริ่มต้นด้วย“ ANDROID!” ถ้าอ่านในรูปแบบ ASCII.

    บันทึก: อย่าเปลี่ยนอะไรในขณะที่คุณมองไปรอบ ๆ ผู้แก้ไขฐานสิบหกสามารถทำลายสิ่งต่าง ๆ ได้!