一个开发者花了 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 试玩版服务器架构相对简单:
- LoginServer:处理账号验证和角色选择
- GameServer:处理游戏世界的实时交互
- WorldServer:管理地图、NPC、物品等持久化数据
这三个组件通过内部 TCP 连接通信,每个组件都有自己的封包处理循环。
对现代开发的参考价值
网络协议设计
UO 的协议虽然老旧,但很多设计理念今天仍然适用:变长封包、消息类型注册、心跳检测、断线重连等。做游戏服务器开发的可以看看 20 多年前的设计思路。
逆向工程技术
这个项目是一个很好的逆向工程学习案例:
- 如何从没有源代码的二进制文件中还原程序逻辑
- 如何分析网络协议
- 如何处理加密封包
- 如何用 Ghidra/IDA 进行长期的逆向分析
游戏服务器架构
早期网游的服务器架构比现在的微服务简单得多,但核心思路是一样的:分离关注点、异步通信、状态管理。对于学习分布式系统设计也有参考意义。
相关资源
作者在文章中提到,完整的逆向工程代码和文档已经发布。对于游戏开发、网络安全、或者纯粹对”网游是怎么工作的”感兴趣的人来说,这是一个很好的学习资料。
简评
10 年磨一剑的逆向工程项目,技术含量很高,但更重要的是它记录了一个时代的软件设计思路。在微服务、容器化、云原生满天飞的今天,回头看看 20 多年前的单体服务器是怎么工作的,有时候反而能学到更多。
来源:
Reverse-engineering the 1998 Ultima Online demo server – Draxinar
Hacker News 讨论














暂无评论内容