3 คะแนน โดย GN⁺ 2024-05-09 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

พบโค้ดใหม่ใน NES Tetris

  • แฮ็กเกอร์ค้นพบวิธีรีโปรแกรม NES Tetris จากภายในเกม
  • วิธีนี้อาจช่วยผู้เล่นสายทำคะแนนสูงที่ต้องการหลีกเลี่ยงการแครชตอนจบเกมได้

วิธีรันโค้ด

  • อาศัย "kill screen" ของ NES Tetris เพื่อจัดการหน่วยความจำด้วยวิธีที่ซับซ้อน ทำให้สามารถเขียนพฤติกรรมใหม่ลงใน Tetris เวอร์ชันที่รันบนฮาร์ดแวร์และตลับเกมแบบไม่ดัดแปลงได้
  • ก่อนหน้านี้เคยมีการค้นพบกลิตช์ "arbitrary code execution" คล้ายกันในเกมอย่าง Super Mario World, Paper Mario และ The Legend of Zelda: Ocarina of Time
  • วิธีพื้นฐานในการนำโค้ดจากภายนอกเข้าสู่ NES Tetris ถูกตั้งทฤษฎีไว้แบบเปิดเผยต่อสาธารณะมาตั้งแต่อย่างน้อยปี 2021
  • วิธีนี้อธิบายอย่างละเอียดว่าจะทำให้ Tetris เริ่มอ่านตารางคะแนนสูงสุดเป็นคำสั่ง machine code ได้อย่างไร

ความสนุกผ่านพอร์ตคอนโทรลเลอร์

  • อาการแครชของ NES Tetris เกิดขึ้นเมื่อส่วนประมวลผลคะแนนของเกมใช้เวลานานเกินไปในการคำนวณคะแนนใหม่ระหว่างแต่ละเฟรม
  • เมื่อเกิดความล่าช้านี้ โค้ดควบคุมบางส่วนจะถูกขัดจังหวะโดยรูทีนเขียนเฟรมใหม่ ทำให้กระโดดไปยังส่วนของ RAM ที่ไม่ได้ตั้งใจและไปค้นหาคำสั่งถัดไปที่นั่น
  • ด้วยวิธีที่ Tetris ประมวลผลอินพุตที่เป็นไปได้เมื่อรันบนเครื่อง Famicom เวอร์ชันญี่ปุ่น ผู้เล่นจึงสามารถควบคุมการกระโดดนี้ได้

เขียนโค้ดในตารางคะแนนสูงสุด

  • สำหรับวิธีควบคุมการกระโดดของ Displaced Gamers ผู้เล่นต้องกด "ขึ้น" บนคอนโทรลเลอร์ตัวที่สาม และกดขวา ซ้าย และลงบนคอนโทรลเลอร์ตัวที่สี่ค้างไว้
  • การทำเช่นนี้จะส่งโค้ดกระโดดไปยังพื้นที่ RAM ที่ใช้เก็บชื่อและคะแนนของรายการคะแนนสูงสุดในเกม ทำให้ผู้เล่นมีพื้นที่ RAM ขนาดใหญ่ขึ้นที่ควบคุมได้โดยตรง
  • การใส่ "(G" ลงในส่วนเป้าหมายของตารางคะแนนสูงสุดสามารถบังคับให้เกมกระโดดไปยังอีกส่วนหนึ่งของตารางคะแนนสูงสุดได้
  • จากตรงนั้น ชื่อและคะแนนจะเริ่มถูกอ่านตามลำดับเป็น opcode สำหรับ CPU ของ NES
  • อย่างไรก็ตาม สัญลักษณ์ที่ใช้ได้ในพื้นที่กรอกชื่อมีเพียง 43 แบบ และตัวเลขที่สามารถเป็นส่วนหนึ่งของคะแนนสูงสุดมีเพียง 10 ตัว ดังนั้นจึงสามารถ "เขียนโค้ด" คำสั่ง opcode ของ NES ลงในตารางคะแนนสูงสุดได้เพียงบางส่วนเท่านั้น
  • เนื่องจากไม่มีระบบเซฟแบบแบตเตอรี่สำรอง แฮ็กเกอร์จึงต้องทำคะแนนเหล่านี้และกรอกชื่อที่ซับซ้อนด้วยมือทุกครั้งที่เริ่ม Tetris

ความเห็นจาก GN⁺

  • น่าทึ่งที่ Tetris เวอร์ชัน NES มีความสามารถแฝงแบบนี้อยู่ ดูเหมือนในยุคนั้นจะยังไม่ถูกค้นพบ และการที่เพิ่งมาพบหลังจากผ่านไปหลายสิบปีก็ยิ่งน่าสนใจ
  • การแฮ็กแบบนี้ทำได้ผ่านการใช้พอร์ตขยายของ Famicom ก็เป็นอีกจุดที่น่าสนใจ แม้จะไม่ใช่สิ่งที่ Nintendo ตั้งใจไว้ แต่ก็เหมือนจะแสดงให้เห็นข้อดีของ Famicom ที่มีฟังก์ชันมากกว่า NES
  • ไอเดียในการใช้บั๊กนี้เพื่อฝังโค้ดป้องกันการแครชกลับถือว่าฉลาดมาก ในทางทฤษฎีมันช่วยให้เล่นต่อได้ จึงน่าจะมีประโยชน์มากกับการไล่ล่าคะแนนสูง
  • อย่างไรก็ตาม การต้องตั้งค่าที่ซับซ้อนทุกครั้งเมื่อเริ่มเกมก็ดูไม่สะดวก หากจะใช้งานจริงก็น่าจะต้องมีวิธีทำให้เป็นอัตโนมัติมากกว่านี้
  • ท้ายที่สุด วิธีนี้น่าจะดึงดูดคนที่ท้าทายคะแนนสูงสุดอย่างจริงจังหรือผู้ที่สนใจการเขียนโปรแกรม มากกว่าผู้เล่นทั่วไป จึงคงยากที่จะถูกใช้งานในวงกว้าง

1 ความคิดเห็น

 
GN⁺ 2024-05-09
ความคิดเห็นจาก Hacker News

สรุป:

  • บทพูดในนิยายของ Stross เรื่อง 'Accelerando' ที่กล่าวถึง "การแฮ็กโครงสร้างของปริภูมิ-เวลาเพื่อค้นหาสิ่งที่อยู่ข้างใต้" ทำให้นึกถึงเอ็กซ์พลอยต์นี้ในฐานะเป้าหมายสูงสุดของการแฮ็ก
  • รู้สึกละอายที่ตัวเองไม่มีจิตวิญญาณแบบแฮ็กเกอร์ที่ทำบางสิ่งเพียงเพื่อความสนุกโดยไม่มีจุดประสงค์เชิงปฏิบัติใด ๆ
  • ตลับเกม NES ทำงานจาก ROM แต่เอ็กซ์พลอยต์นี้ทำให้ CPU กระโดดไปที่ RAM ซึ่งใช้เก็บตารางคะแนนสูงสุด
  • มีคนสงสัยว่าจะต้องใช้เวลาอีกนานแค่ไหนกว่าจะมีคนรัน Doom ใน Tetris ได้
  • อยากสร้างคอมพิวเตอร์ขนาดยักษ์ด้วยสายพานใน Factorio เพื่อให้เกิด segmentation fault แล้วหลุดออกจากเกม
  • คิดว่าเป็นการเสียเวลาได้อย่างคุ้มค่า
  • การค้นพบ ACE ในเกมเก่า ๆ น่าสนใจมาก เมื่อหลายปีก่อนเคยเห็นสิ่งนี้ใน Super Mario World และหมกมุ่นกับคำถามว่ามันทำได้อย่างไร
  • ดูน่าชื่นชมที่คนฉลาดมาก ๆ ทุ่มเวลาและความพยายามมหาศาลให้กับเรื่องที่ไร้ประโยชน์โดยสิ้นเชิง
  • ตอนนี้อาจยังไม่มีเหตุผลที่จะฉีดโค้ดเข้าไปใน NES Tetris แต่นั่นไม่ใช่ประเด็น ประเด็นคือการค้นหาว่าอะไรเป็นไปได้บ้าง และจะบังคับให้โค้ดเก่ากับคอมพิวเตอร์ยุคดึกดำบรรพ์ทำอะไรได้บ้าง
  • น่าประหลาดใจที่ Tetris เพิ่งถูกเจาะได้ช้าขนาดนี้ และมันอาจเป็นจุดเริ่มของยุคใหม่ของการวิ่ง any% ที่มีเป้าหมายเพื่อเรียกฉากจบ/เครดิตให้เร็วที่สุด
  • Ocarina of Time มี ACE exploit มาหลายปีแล้ว เกมพังได้ถึงขั้นจัดการหน่วยความจำของเกมและแก้ไขวาร์ปทางเข้าบางจุดเพื่อให้ "จบเกม" ได้ภายในไม่กี่นาที
  • สิ่งที่น่าทึ่งที่สุดคือผู้คนแก้ไขหน่วยความจำด้วยมือตัวเองโดยใช้เพียงไม่กี่ปุ่มกับอนาล็อกจอยสติ๊ก
  • ความสามารถในการรันโค้ดตามอำเภอใจนั้นน่าสนใจกว่าเสมอเมื่อเทียบกับสิ่งที่จะทำหลังจากนั้น
  • การถอดโครงสร้างเกมเพื่อหาว่าทุกอย่างนี้เกิดขึ้นเมื่อไรและที่ไหน แล้วจะควบคุมตรงไหนเพื่อป้อนคำสั่งถัดไปได้ เป็นระดับความทุ่มเทที่น่านับถือ
  • การใช้เวลากับ NES/SNES ในปี 2024 ให้ความรู้สึกเหมือนเป็นหลักฐานว่า Nintendo ใช้การควบคุมจิตใจ/กลเม็ดทางจิตวิทยาที่ไร้จริยธรรมกับเด็ก ๆ
  • คนพวกนี้มีพรสวรรค์ และดูเหมือนไม่มีเหตุผลแบบมีตรรกะใด ๆ เลยที่ทำให้เลือกโปรเจกต์นี้