10 年逆向工程 1998 年 Ultima Online 服务器:技术考古与现代参考

一个开发者花了 10 年时间,断断续续地逆向工程了 1998 年的 Ultima Online(网络创世纪)试玩版服务器端程序,最近终于发布了完整的逆向工程结果。这个项目不仅是一个技术考古的案例,对于做游戏服务器、网络协议分析的开发者来说也有不少参考价值。

背景:Ultima Online 是什么

Ultima Online(简称 UO)是 1997 年由 Origin Systems 开发的大型多人在线角色扮演游戏(MMORPG),被认为是现代网游的鼻祖之一。1998 年发布了一个试玩版(Demo),包含了一个精简版的服务器端程序。

逆向工程做了什么

作者 Draxinar 对 1998 年 UO 试玩版的服务器端二进制文件进行了深入分析,还原出了:

  • 网络协议:客户端和服务器之间的通信协议,包括封包格式、加密方式、消息类型
  • 服务器架构:登录服务器、游戏服务器、世界服务器之间的交互逻辑
  • 游戏逻辑:角色创建、移动、战斗、物品系统等核心玩法的实现方式
  • 数据格式:地图文件、物品定义、NPC 行为脚本等数据的存储格式

技术细节

分析工具

逆向工程用到了这些工具:

  • IDA Pro / Ghidra:反汇编和反编译二进制文件
  • Wireshark:抓取和分析网络封包
  • 自定义脚本:Python 脚本用于解析特定的数据格式

网络协议分析

UO 的网络协议基于 TCP,使用自定义的封包格式。每个封包包含:

+--------+--------+----------------+
| 类型ID  | 长度   | 数据载荷       |
| (1 byte)| (varies)| (variable)    |
+--------+--------+----------------+

登录过程使用了 RSA 加密,游戏数据则使用了 Blowfish 对称加密。作者通过逆向还原了密钥交换和加密算法的实现。

服务器架构

1998 年的 UO 试玩版服务器架构相对简单:

  1. LoginServer:处理账号验证和角色选择
  2. GameServer:处理游戏世界的实时交互
  3. WorldServer:管理地图、NPC、物品等持久化数据

这三个组件通过内部 TCP 连接通信,每个组件都有自己的封包处理循环。

对现代开发的参考价值

网络协议设计

UO 的协议虽然老旧,但很多设计理念今天仍然适用:变长封包、消息类型注册、心跳检测、断线重连等。做游戏服务器开发的可以看看 20 多年前的设计思路。

逆向工程技术

这个项目是一个很好的逆向工程学习案例:

  • 如何从没有源代码的二进制文件中还原程序逻辑
  • 如何分析网络协议
  • 如何处理加密封包
  • 如何用 Ghidra/IDA 进行长期的逆向分析

游戏服务器架构

早期网游的服务器架构比现在的微服务简单得多,但核心思路是一样的:分离关注点、异步通信、状态管理。对于学习分布式系统设计也有参考意义。

相关资源

作者在文章中提到,完整的逆向工程代码和文档已经发布。对于游戏开发、网络安全、或者纯粹对”网游是怎么工作的”感兴趣的人来说,这是一个很好的学习资料。

简评

10 年磨一剑的逆向工程项目,技术含量很高,但更重要的是它记录了一个时代的软件设计思路。在微服务、容器化、云原生满天飞的今天,回头看看 20 多年前的单体服务器是怎么工作的,有时候反而能学到更多。

来源:
Reverse-engineering the 1998 Ultima Online demo server – Draxinar
Hacker News 讨论

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容