การทำวิศวกรรมย้อนกลับรูปแบบไฟล์อิมเมจเกมของ Sega Channel
(infochunk.com)- การเผยแพร่ ซีดีอิมเมจเกม Sega Channel เดือนกันยายน 1996 ในปี 2024 ทำให้สามารถดึงข้อมูลเกมและเมนูออกมาจากอิมเมจสำหรับออกอากาศขนาดราว 60MB ได้จริง
- Sega Channel เป็นบริการรายเดือนที่ส่งสัญญาณเกม Genesis ซ้ำผ่านเครือข่ายเคเบิล และผู้ใช้เล่นโดยให้อะแดปเตอร์ค้นหาเกมที่ต้องการจาก ลูปข้อมูลต่อเนื่อง แล้วดาวน์โหลดลงมา
- เชนการสร้างอิมเมจประกอบด้วย MENUMAKR, PKSPREAD และ NSF โดย NSF.EXE ซึ่งรับหน้าที่เข้ารหัสขั้นสุดท้ายมี debug symbols หลงเหลืออยู่ จึงกลายเป็นจุดทะลวงสำคัญในการวิเคราะห์
- กระบวนการกู้คืนทำโดยสร้างโปรแกรมภาษา C ที่ให้เอาต์พุตเหมือน NSF จากนั้นใช้ดีโค้ดเดอร์ย้อนลำดับเพื่อแยกไฟล์ และคลาย การบีบอัด .SA เพื่อให้ได้ ROM มาตรฐานของ Genesis
- คอนเทนต์ที่ดึงออกมาได้มีเกมเอ็กซ์คลูซีฟของ Sega Channel อย่าง Chessmaster และ Klondike, บิลด์ใหม่, ROM ที่มีลายน้ำ, รวมถึง ROM เมนูและคำอธิบายเกม และทั้งหมดอยู่ในสภาพที่รันบนอีมูเลเตอร์ได้
ภูมิหลังของบริการ Sega Channel และไฟล์อิมเมจ
- Sega Channel เป็นบริการเกมออนดีมานด์ที่ให้บริการตั้งแต่เดือนมิถุนายน 1994 ถึงเดือนมิถุนายน 1998
- เปิดให้บริการทั่วประเทศในเดือนธันวาคม 1994
- โดยทั่วไปผู้ใช้จ่ายเดือนละ 10–15 ดอลลาร์ แล้วแต่ผู้ให้บริการเคเบิล เพื่อเข้าถึงคลังเกม Sega Genesis ราว 50 เกม ต่อเดือน
- จำนวนสมาชิกสูงสุดของบริการอยู่ที่ประมาณ 250,000 คน
- สมาชิกจะได้รับ ตลับอะแดปเตอร์ สำหรับต่อเข้ากับ Genesis และอะแดปเตอร์นี้จะเชื่อมต่อกับสายเคเบิลทีวี
- ตอนบูตจะค้นหาสัญญาณ Sega Channel และดาวน์โหลดเมนูเกม
- การดาวน์โหลดเมนูมักใช้เวลาประมาณ 20 วินาที
- เมื่อเลือกเกม เกมจะถูกดาวน์โหลดลง RAM ของอะแดปเตอร์ในเวลาประมาณ 1 นาที
- เกมที่ดาวน์โหลดแล้วทำงานเหมือนตลับขายปลีกทั่วไป
- เมื่อปิดเครื่องหรือกดปุ่มเมนูบนอะแดปเตอร์ เกมที่ดาวน์โหลดไว้จะถูกลบ
- ข้อมูลเซฟจะยังคงอยู่ตราบใดที่ผู้ใช้ยังไม่ได้ดาวน์โหลดเกมอื่น
- นอกจากเกมขายปลีกแล้ว Sega Channel ยังมีส่วน Test Drives ด้วย
- สามารถเล่นเกมก่อนวางจำหน่ายในเวอร์ชันที่จำกัดเวลา หรือจำกัดคอนเทนต์ได้
- ยังมีเกมที่ให้บริการเฉพาะบน Sega Channel ด้วย
วิธีสร้างและส่งมอบอิมเมจสำหรับออกอากาศ
- พนักงาน Sega Channel จะคัดเลือกไลน์อัปเกมรายเดือน รวมถึงคำใบ้เกม คู่มือ ข่าว และแฟนอาร์ตดิจิทัล
- จากนั้นคอนเทนต์จะถูกส่งต่อไปยัง Foley Hi-Tech
- Foley Hi-Tech สร้างกราฟิกและแอนิเมชันของเมนูเกม และแทรกคอนเทนต์รายเดือนลงไป
- ผลลัพธ์คือไฟล์อิมเมจเกมขนาดประมาณ 60MB
- อิมเมจเกมจะถูกเขียนลงซีดีแล้วส่งไปยังสถานีอัปลิงก์ดาวเทียมในเดนเวอร์ รัฐโคโลราโด
- ซีดีถูกติดตั้งบนคอมพิวเตอร์เซิร์ฟเวอร์เกมของอัปลิงก์
- เซิร์ฟเวอร์ส่งข้อมูลเกมเป็นลูปต่อเนื่องผ่านดาวเทียม
- เฮดเอนด์เคเบิลทั่วสหรัฐฯ รับสัญญาณดาวเทียมแล้วส่งต่อไปยังสมาชิก
- ในสภาพแวดล้อมที่ผู้ให้บริการเคเบิลทีวีไม่สามารถรับข้อมูลจากสมาชิกได้ การส่งเป็นลูปต่อเนื่อง จึงเป็นตัวกำหนดรูปแบบการโต้ตอบของบริการ
- เมื่อผู้ใช้เลือกเกม อะแดปเตอร์จะค้นหาข้อมูลเกมนั้นจากสตรีมข้อมูล Sega Channel
- อิมเมจเกมขนาดราว 60MB ถูกส่งที่ประมาณ 12Mbps โดยใช้ แคร์เรียร์ 6Mbps จำนวน 2 ช่อง
- หากไม่มีปัญหาสัญญาณ ผู้ใช้จะเล่นเกมที่เลือกได้ภายในข้อมูลหนึ่งรอบลูป
- เมนูมีสำเนาซ้ำอยู่ในสตรีมข้อมูลเพื่อให้ดาวน์โหลดได้เร็วขึ้น
การค้นพบซีดีอิมเมจเกมเดือนกันยายน 1996
- ในเดือนพฤศจิกายน 2024 ผู้ใช้ฟอรัม Sonic Retro ชื่อ RisingFromRuins ตรวจสอบกองอุปกรณ์พีซีที่ซื้อไว้นานแล้วและพบ ซีดีอิมเมจเกม Sega Channel เดือนกันยายน 1996
- เขาโพสต์รูปซีดีและอัปโหลดสำเนาไฟล์อิมเมจเกมในดิสก์
- เป้าหมายของการวิเคราะห์คือดึงข้อมูลจากไฟล์อิมเมจเพื่อตรวจสอบว่ามี เกมเอ็กซ์คลูซีฟ หรือ เกมต้นแบบ หรือไม่
- ตอนแรกตรวจสอบไฟล์อิมเมจด้วย hex editor
- เกม Genesis มีเฮดเดอร์ ASCII มาตรฐาน และคาดว่าน่าจะอ่านข้อความคำใบ้เกมกับคู่มือที่ดาวน์โหลดได้ด้วย
- แต่ในไฟล์จริงไม่พบสตริงที่อ่านได้
- จึงมีความเป็นไปได้สูงว่าไฟล์อิมเมจถูกสแครมเบิลหรือเข้ารหัสไว้
เชนการสร้างอิมเมจที่พบในซีดีเครื่องมือพัฒนา
- เบาะแสสำคัญมาจากการที่ผู้ใช้ tdijital เผยแพร่ ซีดีแบ็กอัปเอกสารพัฒนา Sega Channel ของ Foley Hi-Tech ในปี 2017
- ในซีดีนี้เคยมีการพบเวอร์ชันประกวดของ Primal Rage, เกมควิซ Sega Channel เวอร์ชันญี่ปุ่น และ ROM เดโมเมนูตั้งแต่ธันวาคม 1994 ถึงมกราคม 1996
- ตัวเครื่องมือพัฒนายังไม่ได้ถูกวิเคราะห์อย่างลึกซึ้ง
- แทนที่จะทำวิศวกรรมย้อนกลับโค้ดฝั่ง Genesis สำหรับดาวน์โหลด จึงเลือกแนวทางทำวิศวกรรมย้อนกลับ เครื่องมือที่สร้างอิมเมจเกม
- โฟลว์การสร้างอิมเมจมีสามขั้นตอน
- MENUMAKR: เพิ่มเกม คำอธิบาย ข้อความข่าว อาร์ต เพลง ฯลฯ เพื่อสร้างไบนารีเมนูและไฟล์สคริปต์
MENUSPIN.BAT - PKSPREAD: โปรแกรมที่ Scientific Atlanta สร้างขึ้น ใช้ตรวจสอบเนื้อหาใน
MENUSPIN.BATและเอาต์พุตPMAP.DAT - NSF: ใช้
PMAP.DATเพื่อเข้ารหัสไฟล์อินพุตและสร้างไฟล์อิมเมจเกมขั้นสุดท้าย
- MENUMAKR: เพิ่มเกม คำอธิบาย ข้อความข่าว อาร์ต เพลง ฯลฯ เพื่อสร้างไบนารีเมนูและไฟล์สคริปต์
- Scientific Atlanta เป็นบริษัทอุปกรณ์เคเบิลที่ร่วมมือกับ Sega ในการสร้างอุปกรณ์ออกอากาศและตลับอะแดปเตอร์ของ Sega Channel
- เป้าหมายหลักของการวิเคราะห์คือ NSF.EXE ซึ่งเป็นตัวสร้างไฟล์อิมเมจขั้นสุดท้าย
การทำวิศวกรรมย้อนกลับ NSF.EXE
- NSF.EXE ถูกคอมไพล์ใน โหมด debug ปิดการ optimize และมี symbols รวมอยู่ในไฟล์รันด้วย
- เป็นโปรแกรมที่คอมไพล์ด้วย Borland C++ 4.1
- IDA Pro ไม่รู้จัก debug symbols โดยอัตโนมัติ จึงตรวจสอบ symbols ใน Turbo Debugger แล้วคัดย้ายด้วยมือ
- แทนที่จะเขียนดีโค้ดเดอร์ทันที ขั้นแรกคือเขียนโปรแกรมที่เทียบเท่ากับ NSF.EXE
- หากสร้างอิมเมจที่ เอาต์พุตเหมือนแบบ byte-for-byte กับอิมเมจที่ DOS NSF.EXE สร้างได้ ก็ถือว่าเข้าใจอัลกอริทึมถูกต้อง
- สร้างไฟล์อิมเมจเกมสำหรับทดสอบ แล้วปรับการใช้งานให้เอาต์พุตตรงกัน
- หลังทำงานหนึ่งวันและดีบักตอนเย็นอีกหลายวัน ก็เขียน โปรแกรมภาษา C ที่ให้เอาต์พุตเหมือน NSF.EXE ได้
- ใช้วิธีเปิด IDA และ Visual Studio พร้อมกัน แล้วทำ implementation ให้ใกล้เคียง assembly มากที่สุด
- ไม่ได้ตั้งเป้าว่าจะสร้างไบนารีที่คอมไพล์ออกมาเหมือนต้นฉบับ
- implementation ใช้ declaration แบบ C99 และชนิดข้อมูลจาก
stdint.hจึงมีความเป็นไปได้ว่าจะคอมไพล์ด้วย Borland C++ 4 ตรง ๆ ไม่ได้
วิธีเข้ารหัสสำหรับส่งสัญญาณของ NSF
- ฟังก์ชัน
GetDataของ NSF ดึงข้อมูลไฟล์อินพุตรายแพ็กเก็ต ตำแหน่งในไฟล์ และเมทาดาทา Sega Channel จากPMAP.DAT- เมทาดาทามี File ID และเวลาที่เล่นได้ของเดโมจำกัดเวลา เป็นต้น
- จากนั้นอ่าน ชังก์ 246 ไบต์ จากไฟล์ข้อมูล
- ฟังก์ชัน
LoadFrameเติมเฮดเดอร์หน้าแพ็กเก็ตข้อมูล และกลับบิตทุกไบต์ข้อมูล- การกลับไบต์อาจเป็นการประมวลผลที่เกี่ยวกับการส่งข้อมูล หรือเพื่อซ่อนเนื้อหาในแพ็กเก็ต
- ระหว่างข้อมูลเกมมีการแทรก BCH error correction code และบิตพาริตี
- ผลคือข้อมูล 246 ไบต์ขยายเป็น 288 ไบต์
- เฮดเดอร์มีหลายฟิลด์
GameTimeSyncและGameTimeBitส่งค่าจำกัดเวลาเกมในระดับบิตServiceIDโดยทั่วไปเป็น 1 และอาจเกี่ยวข้องกับ Express GamesFileIDระบุไฟล์แต่ละไฟล์ในอิมเมจเกมแบบไม่ซ้ำกัน โดยเมนูเป็นไฟล์ 0 เสมอAddressระบุว่าอะแดปเตอร์จะดาวน์โหลดไฟล์ไปไว้ตำแหน่งใดใน RAM- ยังมี
HeaderCRCและHeader Copyด้วย
- ฟังก์ชัน
InterLeaveแบ่งแพ็กเก็ตเป็น ชังก์ 450 บิต แล้วสลับบิตภายในแต่ละชังก์- ดูเหมือนเป็นการทำให้ burst error กระจายสม่ำเสมอขึ้น เพื่อให้การแก้ไขข้อผิดพลาดทำงานได้ดี
- กระบวนการนี้ทำซ้ำเป็นชุดละ 10 แพ็กเก็ต
- 10 แพ็กเก็ตถูกรวมเป็น เฟรม 2880 ไบต์
- เฟรมจะนำข้อมูลมาไขว้กัน เช่น 2 ไบต์แรกของแพ็กเก็ต 0, 2 ไบต์แรกของแพ็กเก็ต 1 แล้วจึงเขียนลงดิสก์
- การประมวลผลแบบเดียวกันดำเนินต่อไปจนสร้างไฟล์อิมเมจทั้งหมดเสร็จ
การดีโค้ดและคลายการบีบอัด
- หลังเข้าใจการทำงานของ NSF แล้ว จึงเขียน โปรแกรมดีโค้ดเดอร์ ที่ย้อนขั้นตอนกลับตามลำดับ
- ดีโค้ดเดอร์ดึงไฟล์ข้อมูลแต่ละไฟล์ออกจากอิมเมจ
- เอาต์พุตจากดีโค้ดเดอร์ครั้งแรกยังไม่ใช่ข้อมูล ROM ของ Genesis ที่ถูกต้อง
- เพราะข้อมูลเกมถูก บีบอัด ก่อนส่งสัญญาณ
- เครื่องมือบีบอัด ROM คือ
GAMEEDIT.EXEในซีดีของ Foley Hi-Tech- ไม่จำเป็นต้องทำวิศวกรรมย้อนกลับเครื่องมือนี้อีกครั้ง
- ผู้ใช้ GitHub ชื่อ Octocontrabass ได้ทำวิศวกรรมย้อนกลับ รูปแบบการบีบอัด .SA ไว้แล้ว
- ใช้เครื่องมือ
unsaของ Octocontrabass เพื่อคลายไฟล์.SAเป็นไฟล์ ROM มาตรฐาน
เกมและคอนเทนต์ที่ได้จากอิมเมจเดือนกันยายน 1996
- ผลลัพธ์ที่สะดุดตาที่สุดคือ เกมเอ็กซ์คลูซีฟ Sega Channel 2 เกม ที่ออกอากาศในเดือนกันยายน 1996
- Chessmaster: เกมหมากรุกที่มีบนหลายแพลตฟอร์มในทศวรรษ 1990 แต่ไม่เคยมีบน Genesis
- Klondike: เกมโซลิแทร์ที่ Sega จ้างทำสำหรับ Sega Channel และโปรแกรมโดย David Crane ซึ่งเป็นที่รู้จักจาก Pitfall
- เกมในอิมเมจแบ่งได้หลายหมวด
- คอนเทนต์เอ็กซ์คลูซีฟ: Chessmaster, Klondike, Olympic Summer Games - Test Drive, Sega Channel Game Guide
- บิลด์ใหม่: Bugs Bunny in Double Trouble, OutRunners, Super Volleyball, World Series Baseball '96
- รายการที่ต่างจากดัมป์เดิมแค่ padding: Flashback, Phantasy Star II, The Punisher
- ดัมป์เดิมที่เพิ่มลายน้ำ: Alex Kidd in the Enchanted Castle, Ecco - The Tides of Time, Sonic & Knuckles ฯลฯ
- เกมจำนวนมากที่ตรงกับดัมป์เดิม: Castlevania - Bloodlines, Streets of Rage 2, ToeJam & Earl, X-Men, Ys III ฯลฯ
- Black Squirrel จาก Sonic Retro พบวิธีรันเมนูเดือนกันยายน 1996 บนอีมูเลเตอร์
- วิธีคือคัดลอกไบต์
0-0x1003FFจาก ROM ตลับเดโม Sega Channel แล้วต่อข้อมูลเมนูจากอิมเมจเกมไว้ด้านหลัง - ฟังก์ชันดาวน์โหลดไม่ทำงาน แต่สามารถเปิดดูเมนูได้
- วิธีคือคัดลอกไบต์
- คอนเทนต์สุดท้ายคือ ROM คำอธิบายเกม
- ดูเหมือน ROM ของ Genesis ทั่วไป แต่เมื่อรันในอีมูเลเตอร์จะมีแต่หน้าจอดำ
- สาเหตุคือมันลิงก์โดยอิงที่อยู่ 0x100000 ไม่ใช่ฐานที่อยู่ 0 เหมือนตลับทั่วไป
- ดูเหมือนถูกสร้างมาให้รันโดยตรงจากหน่วยความจำของอะแดปเตอร์ Sega Channel
- เมื่อเติม 0 หลังเฮดเดอร์เพื่อจัดแนวโค้ดให้ตรงกับเวกเตอร์ในเฮดเดอร์ ก็รันในอีมูเลเตอร์ได้
- หลังรันแล้วจะปรากฏเมนูสำหรับนักพัฒนาที่แสดงชื่อภายในของแต่ละเกม
- จากกระบวนการนี้ คอนเทนต์ทั้งหมดในไฟล์อิมเมจเกมจึงสามารถรันบนอีมูเลเตอร์ได้
ยังไม่มีความคิดเห็น