十年逆向工程重现1998年UO服务器源码
开源项目

十年逆向工程重现1998年UO服务器源码

Heooo 05月06日21时05分 1 阅读

「开发者耗时十年,借助LLM技术,完整逆向还原了1998年《网络创世纪》演示版服务器代码,并开源发布。」

一位名为Draxinar的开发者近日宣布,经过长达十年的断断续续工作,他成功完成了对1998年《网络创世纪》(Ultima Online)演示版服务器(UoDemo.exe)的完整逆向工程,并将其全部翻译为可移植的C99代码。该项目已以开源形式发布在GitHub上,引起了技术社区的广泛关注。

《网络创世纪》是1997年由Origin Systems公司开发的MMORPG,也是最早取得商业成功的该类游戏之一。其客户端运行在Windows上,而每个服务器(称为“Shard”)则运行在多台Solaris机器上,地图按区域划分。1998年10月发布的《网络创世纪:第二纪元》扩展包中,附带了一个独立的演示版(UoDemo.exe和UoDemo.dat),其中不仅包含了客户端,还捆绑了完整服务器代码和数据的Windows移植版本。该演示版的可执行文件编译于1998年9月2日,服务器数据则提取自1998年6月2日的生产服务器。尽管演示版中部分功能被禁用,可玩地图被缩减至Ocllo岛,但其余部分正是1998年中期实际运行在UO服务器上的生产代码。

Draxinar在项目文档中详细介绍了其方法论。他首先使用radare2对二进制文件进行反汇编,然后从UO客户端1.25.37的实验性Linux移植版中推导出符号名称(该移植版包含C++符号)。随后,他手动将每个函数翻译成C99代码,严格保持与控制流、结构体布局和分支完全一致。为了验证正确性,他在radare2中对C构建版本重新反汇编,并与原始二进制逐条指令对比,只有两者完全匹配的函数才标记为完成。

“类层次结构是早期需要正确理解的最重要部分,”Draxinar写道。他确定了从CEntity(0x10)到CResourceEntity(0x1C)、CItem(0x50)、CContainer(0x5C)、CMobile(0x37C)直至CPlayer(0x458)的继承关系,并通过虚函数表(vtable)槽位(如vtable[0x18]是IsPlayer,[0xD0]是IsMobile,[0xE4]是IsNPC等)实现了多态分发。一旦这些布局被确定,大部分二进制代码的翻译就变得直接了。

十年逆向工程重现1998年UO服务器源码

值得注意的是,Draxinar在文中特别提到,最近大型语言模型(LLM)的发展最终使这项看似永无止境的任务得以完成。尽管他没有详细说明LLM如何具体辅助,但可以推测,LLM在理解反汇编代码、生成等效C代码或识别常见模式方面提供了关键帮助,加速了最后阶段的翻译工作。

该项目的成果是一个近乎完美的1998年UO服务器副本,但并非完全无差异。Draxinar指出,他对原始代码进行了一些修复,主要是针对演示版中存在的实际Bug或进行平台适配,这些改动均在源码中进行了标记。此外,他还使用辅助函数来处理重复的内联模式,但仅限于这些辅助函数能够展开回与内联版本完全相同的代码时。

该项目不仅对游戏历史保护具有重要价值——它保存了早期MMORPG服务器端技术的珍贵样本——也为逆向工程社区提供了一个出色的案例研究。通过将MSVC x86反汇编代码精确转换为可移植C99,它展示了如何利用现代工具(包括LLM)和严谨的手工验证,来复活二十多年前的软件遗产。

十年逆向工程重现1998年UO服务器源码

对于技术开发者而言,这个开源仓库(https://github.com/draxinar/ouo)提供了约5000个函数的反汇编和翻译源码,是研究早期C++游戏服务器架构、网络协议、内存管理和虚拟函数机制的宝贵资源。Draxinar表示,他希望这个项目能够帮助未来的UO服务器模拟器开发者,并为计算机历史爱好者提供一个深入了解经典MMORPG内部运作的机会。

# 逆向工程 # 游戏服务器 # 开源项目 # LLM辅助开发

来源:Heooo AI工具导航

📰

资讯不存在

该资讯可能已被删除或不存在

返回资讯列表