Sai sót với đĩa master của Space Quest II
(lanceewing.github.io)Sai sót với đĩa master của Space Quest II
- 22 tháng 5, 2024
- Bề ngoài của chiếc đĩa này không có gì đặc biệt, nhưng dữ liệu được lưu trên đó lại chứa một thứ đặc biệt mà Sierra On-Line hẳn hoàn toàn không biết và chắc chắn không muốn đưa vào.
- Nếu bạn có một đĩa mềm 720KB trong bộ sưu tập game phiêu lưu Sierra, thì bạn không phải là người duy nhất.
- Các phiên bản 2.0D và 2.0F của Space Quest II không hề hiếm.
Chỉ là một danh sách thư mục đơn giản
- Nhìn vào danh sách tệp trên đĩa thì không có gì đặc biệt.
- Nếu xem danh sách của phiên bản 2.0D, nó không khác gì những đĩa game Sierra khác.
- Dấu thời gian cho thấy các tệp dữ liệu chính của game (
PICDIR,LOGDIR,VIEWDIR,SNDDIR,VOL.0,VOL.1) được tạo vào ngày 14 tháng 3 năm 1988. - Các tệp
.OVLđược tạo vào ngày 15 tháng 3 năm 1988, còn mã của trình thông dịch AGI được tạo vào ngày 18 tháng 3 năm 1988. - Điểm lạ trong danh sách thư mục là dung lượng "không dùng" của đĩa lại nhiều hơn dung lượng đã dùng. 302.918 byte đã được sử dụng và 402.432 byte được đánh dấu là chưa dùng.
Dùng trình soạn thảo hex
- Để xem kỹ hơn đĩa chứa gì, cần một công cụ gọi là trình soạn thảo hex.
- Vào thập niên 1980, Norton Utilities thường được dùng, còn ngày nay HxD Hex Editor do Maël Hörz viết là một lựa chọn thay thế rất tốt.
- Trên một đĩa mềm DOS mới được format, các sector chưa dùng lẽ ra phải được lấp đầy bằng giá trị byte
0xF6. - Đĩa 2 của Space Quest II phiên bản 2.0D đúng là như vậy, nhưng đĩa 1 thì không có sector nào được lấp bằng byte
0xF6. - Các sector chưa dùng trên đĩa 1 lại chứa thứ trông giống như mã nguồn C.
- Điều này cho thấy rất rõ rằng đĩa master trước đó đã được dùng cho mục đích khác, và sau khi các tệp bị xóa thì nó không được format lại đúng cách.
Mã nguồn của trình thông dịch AGI
- Khi nhìn dữ liệu trong trình soạn thảo hex, nó trông giống văn bản.
- Sao chép phần văn bản ASCII đó vào trình soạn thảo văn bản thì thấy giống mã nguồn C.
- Có hai hàm được định nghĩa, một là
DisplayStatusLine, hàm còn lại làStatusLineOn. - Hàm
DisplayStatusLinedường như dùng để hiển thị một dòng văn bản thể hiện điểm số hiện tại và trạng thái âm thanh. - Mã nguồn này là một phần của trình thông dịch AGI.
- Khi cuộn tiếp qua nhiều sector chưa dùng hơn trong trình soạn thảo hex, có thể thấy một lượng lớn mã nguồn.
- Mã nguồn này được lưu trong các sector liên tiếp nên khá dễ trích xuất.
- Tổng cộng nó được chia thành 93 tệp, gồm 75 tệp mã nguồn C, 16 tệp mã nguồn hợp ngữ và 2 tệp DOS BAT.
- Tổng số có hơn 15.000 dòng mã và phần lớn các tệp đều đầy đủ.
- Đĩa game Space Quest 2 này chứa khoảng 70% mã nguồn trình thông dịch AGI của Sierra On-Line.
Lịch sử thay đổi trong các tệp nguồn
- Một số tệp nguồn có lịch sử thay đổi trong phần chú thích tiêu đề.
- Ví dụ, phần chú thích đầu tệp nguồn
ANIMATE.Cbao gồm tên tệp, mô tả chức năng, tên trình biên dịch (MWC) và lịch sử thay đổi. - Các lập trình viên dùng chữ cái viết tắt của mình để nhận diện.
- JAS là Jeff Stephenson, lập trình viên chính làm việc trên mã của trình thông dịch AGI, còn DCI là Chris Iden.
- Robert Heitman cũng được nhắc đến, nhưng trọng tâm của ông chủ yếu là các công cụ đồ họa.
Bản đồ bộ nhớ của AGI.EXE
- Đĩa 1 bản SQ2 2.0D 720KB cũng chứa cả bản đồ bộ nhớ của tệp thực thi
AGI.EXE. - Bản đồ bộ nhớ cung cấp danh sách các mô-đun và tệp nguồn cấu thành trình thông dịch AGI.
- Tổng cộng có 98 tệp nguồn được nhắc đến, trong đó 71 tệp được chứa đầy đủ trên đĩa SQ2.
- Điều đó có nghĩa là khoảng 70% mã nguồn trình thông dịch AGI đã có mặt trên đĩa SQ2.
Tài sản trí tuệ của Sierra
- Năm 1984, Sierra On-Line đã chật vật để duy trì hoạt động kinh doanh.
- Thành công của King’s Quest đóng vai trò lớn trong việc thay đổi vận mệnh của họ.
- Hệ thống game phiêu lưu AGI và những trò chơi được tạo ra từ nó là nguồn doanh thu chủ lực của Sierra On-Line.
- Mã nguồn trình thông dịch AGI là tài sản trí tuệ cốt lõi của Sierra.
- Việc 70% mã nguồn bị sao chép hàng loạt và gửi tới khách hàng là một sai lầm rất lớn.
Chuyện này đã xảy ra như thế nào?
- Khi một phiên bản game mới sẵn sàng, người ta sẽ tạo một đĩa master "bản sao sản xuất" để dùng trên máy sao chép đĩa FormMaster.
- Cỗ máy này sao chép mọi byte trên đĩa.
- Đĩa 1 của Space Quest II phiên bản 2.0D và 2.0F đã được dùng trong trạng thái chưa format.
- Kết quả là hàng chục nghìn đĩa SQ2 đã chứa 70% mã nguồn trình thông dịch AGI.
Một vụ suýt thành khủng hoảng
- Gần như chắc chắn đây là một sai sót ngoài ý muốn.
- Sierra, các đối thủ cạnh tranh và khách hàng đều không hề nhận ra điều này.
- Nó chỉ được phát hiện lần đầu vào tháng 10 năm 2016 bởi người dùng trực tuyến NewRisingSun.
- Vì chuyện này xảy ra vào cuối thời kỳ AGI nên nó không trở thành vấn đề lớn.
- Đây là một câu chuyện khảo cổ số rất thú vị, đồng thời cho phép chúng ta thấy Sierra On-Line đã viết trình thông dịch AGI như thế nào.
Đối với những ai quan tâm, mã nguồn trình thông dịch AGI đã được trích xuất đã được tải lên một kho GitHub: https://github.com/lanceewing/agi
Hãy xem thử AGILE, trình thông dịch AGI chạy trên web. Phần triển khai này đã được định hướng bởi mã nguồn AGI nguyên bản.
Ý kiến của GN⁺
- Giá trị của khảo cổ số: Bài viết này cho thấy tầm quan trọng của khảo cổ số. Phần mềm và dữ liệu cũ mang giá trị lịch sử và kỹ thuật.
- Bài học từ sai sót bảo mật: Sự việc này nhấn mạnh tầm quan trọng của bảo mật và quản lý dữ liệu. Khi xử lý dữ liệu nhạy cảm, luôn cần xác minh kỹ lưỡng và format đầy đủ.
- Bằng chứng về tiến bộ kỹ thuật: Mã nguồn trình thông dịch AGI cho thấy bước tiến kỹ thuật của quá trình phát triển game trong thập niên 1980. Điều này có thể truyền cảm hứng cho các nhà phát triển hiện đại.
- Sức mạnh của mã nguồn mở: Việc mã nguồn gốc được công khai mở ra cơ hội để các nhà phát triển hiện đại nghiên cứu và tận dụng cho các dự án mới.
- Rủi ro từ đối thủ cạnh tranh: Nếu mã nguồn này bị đối thủ thời đó phát hiện, lợi thế cạnh tranh của Sierra On-Line có thể đã bị tổn hại nghiêm trọng. Điều này nhắc lại tầm quan trọng của việc bảo vệ tài sản trí tuệ doanh nghiệp.
1 bình luận
Ý kiến Hacker News
Tóm tắt các bình luận trên Hacker News
Double Dragon II: The Revenge for DOS (1989)
Reverse engineering ROM bộ tổng hợp âm thanh
Ký ức tuổi thơ về trò chơi
Bí mật của engine AGI
Bản đồ bộ nhớ và mã nguồn
HxD Hex Editor
ROM của Air Fortress
Dấu vết của các bản phát hành làm thủ công
Phát hiện mã nguồn
Chú thích lịch sử thay đổi