1 คะแนน โดย GN⁺ 2023-12-06 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

การแฮ็กเกม: ทำอัตราชนะ 100% ใน Magic: The Gathering Arena

  • ค้นพบวิธีทำให้อีกฝ่ายยอมแพ้อัตโนมัติใน Magic: The Gathering Arena
  • เสนอจะให้ซอร์สโค้ดและแนวทางแก้ไข พร้อมแสดงเจตนาที่จะรายงานปัญหา

บทนำ

  • ความเห็นต่อการทำ obfuscation โค้ดฝั่งไคลเอนต์: แม้จะช่วยยกระดับอุปสรรคสำหรับคนที่ลงทุนน้อย แต่กลับเป็นอุปสรรคต่อผู้พัฒนาที่มีความตั้งใจซึ่งต้องการรายงานช่องโหว่ด้านความปลอดภัย
  • เกมการ์ดจัดการสถานะของเกมทั้งหมดที่ฝั่งเซิร์ฟเวอร์ และไคลเอนต์จะได้รับเฉพาะข้อมูลที่จำเป็น
  • ไคลเอนต์มีข้อมูลจำกัด จึงแฮ็กได้ยาก

เริ่มต้น

  • เริ่มแฮ็กเกมผ่านการวิเคราะห์การสื่อสารเครือข่าย
  • MTGA ที่เขียนด้วย C# สามารถจัดการอ็อบเจ็กต์ของเกมในขณะรันไทม์ได้ง่าย
  • ใช้ reflection ที่เข้าถึงฟิลด์และเมธอดแบบ private ได้

หาเบาะแส

  • การดีคอมไพล์ C# ใช้ metadata token เพื่อเชื่อมโยงกับชื่อที่มนุษย์อ่านเข้าใจได้
  • พบฟังก์ชัน JoinMatch ซึ่งคาดว่าเป็นจุดที่เชื่อมต่อกับเซิร์ฟเวอร์เกมเป็นครั้งแรก

การทำงานของ Sparky

  • Sparky ซึ่งเป็นมาสคอตของ MTGA คือบอตสำหรับสอนผู้เล่นใหม่และใช้ฝึกซ้อม
  • ตรรกะของบอตทำงานในเครื่อง และกระบวนการตัดสินใจทั้งหมดเกิดขึ้นภายในคอมพิวเตอร์ของผู้ใช้

ปีศาจอยู่ในรายละเอียด

  • เมื่อเริ่มแมตช์กับบอต จะประมวลผลตรรกะของบอตจริงผ่านคลาส HeadlessClient
  • บอตสามารถเชื่อมต่อกับเซิร์ฟเวอร์เกมและเล่นเกมต่อได้โดยไม่ต้องเรนเดอร์กระดานเกม

การยึดแมตช์

  • สามารถใช้ reflection เพื่อเปลี่ยนพฤติกรรมของอ็อบเจ็กต์เกมได้
  • เขียนโค้ดเพื่อระบุตำแหน่งที่นั่งของตนเอง แล้วเชื่อมต่อไคลเอนต์ไปยังที่นั่งอีกฝั่งเพื่อทำให้อีกฝ่ายยอมแพ้

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

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

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

 
GN⁺ 2023-12-06
ความเห็นจาก Hacker News
  • ประสบการณ์ครั้งแรกกับลินุกซ์จากการตรวจสอบทราฟฟิกเครือข่าย

    • ใช้โปรแกรม ShowEQ สำหรับเกม EverQuest เพื่อวิเคราะห์ทราฟฟิกที่ไม่ได้เข้ารหัส
    • ใช้ฮับทำสำเนาทราฟฟิกไปยังเครื่องลินุกซ์ วาดแผนที่แบบเรียลไทม์ และแสดงตำแหน่งตัวละคร
    • ตรวจสอบได้ว่ามอนสเตอร์มีไอเท็มอะไร และช่วยให้ล่ามอนสเตอร์บางตัวแบบเลือกเป้าหมายได้
    • เป็นวิธีแบบ passive และตรวจจับไม่ได้ แต่ภายหลัง SOE เริ่มเข้ารหัสทราฟฟิก
  • ประสิทธิภาพอันน่าทึ่งของ AI สำหรับเกม Magic: The Gathering

    • ประหลาดใจกับการใช้หน่วยความจำที่น้อยของ AI ซึ่งสามารถทำงานบนเครื่องโลคัลได้
    • การรัน AI บนเครื่องโลคัลอาจสมเหตุสมผลกว่าการรันบนเซิร์ฟเวอร์
    • พิจารณาความแตกต่างของ CPU ระหว่างเซิร์ฟเวอร์กับเครื่องโลคัล และการรองรับมัลติคอร์
  • ความซับซ้อนและประสิทธิภาพของการพัฒนา AI สำหรับ Magic: The Gathering

    • ช่วยแก้ความเข้าใจผิดเกี่ยวกับการพัฒนา AI ที่ซับซ้อนของ MTG
    • กล่าวถึงการเข้าถึงได้ของตรรกะ Sparky และทางเลือกที่นักพัฒนาใช้ในการนำไปใช้
    • เอ่ยถึงความเกือบจะ Turing-complete ของเกม และการพัฒนากลยุทธ์ AI
  • ความสนใจในโปรเจ็กต์ส่วนตัวเกี่ยวกับ MTGA และการแฮ็กเกม

    • กำลังพัฒนาไคลเอนต์ MTGA ที่ไม่เป็นทางการ แต่ยังอยู่ในระยะเริ่มต้น
    • แสดงความสนใจต่อประสบการณ์การแฮ็กเกม การเปิดเผยบั๊ก และโครงสร้างของไคลเอนต์
  • ความสนุกของการเล่น Magic 93/94 กับลูกชาย

    • สนุกกับการเล่นเกมกับลูกชายโดยใช้การ์ดจริง
    • เข้าร่วมชิงแชมป์โลกที่จัดขึ้นในมาดริด และภูมิใจกับผลงานของลูกชาย
  • ความสำคัญของตรรกะฝั่งไคลเอนต์และความจำเป็นของการตรวจสอบโดยเซิร์ฟเวอร์

    • เน้นความตอบสนองของตรรกะฝั่งไคลเอนต์ในเกมแบบเรียลไทม์
    • ความสำคัญของการตรวจสอบโดยเซิร์ฟเวอร์ในเกมการ์ด และการจำกัดข้อมูลของฝ่ายตรงข้าม
  • บั๊กในเกม League of Legends และผลกระทบของมัน

    • การผสมบางแชมเปียนกับไอเท็มบางชิ้นทำให้เกิดข้อผิดพลาดที่เซิร์ฟเวอร์ และบิดเบือนผลการแข่งขันได้
  • ข้อสงสัยเกี่ยวกับการเชื่อมต่อ AI ระหว่างเกมและการจัดการเมื่อคู่ต่อสู้ยอมแพ้

    • ตั้งคำถามว่าระหว่างการแข่งขันจริงอนุญาตให้เชื่อมต่อ AI ได้หรือไม่ และจัดการกรณีคู่ต่อสู้ยอมแพ้อย่างไร
  • ประสบการณ์การนำแพ็กเก็ตเชื่อมต่อเซิร์ฟเวอร์กลับมาใช้ในเกม Diablo 2

    • แบ่งปันวิธีเชื่อมต่อตัวละครจากเซิร์ฟเวอร์ LAN ไปยังเซิร์ฟเวอร์อินเทอร์เน็ตอย่างเป็นทางการ
  • ความสนใจในการพัฒนาเซิร์ฟเวอร์อีมูเลเตอร์และแมตช์ LAN

    • สำรวจความเป็นไปได้ในการพัฒนาเซิร์ฟเวอร์อีมูเลเตอร์สำหรับแมตช์ LAN ที่ปลดล็อกการ์ดทั้งหมด