Hacker News 中文摘要

RSS订阅

逆向工程1998年《网络创世纪》演示服务器 -- Reverse-engineering the 1998 Ultima Online demo server

文章摘要

文章介绍了作者经过10年断断续续的努力,成功逆向工程了1998年《网络创世纪》的演示服务器,将约5000个MSVC x86汇编函数转换为可移植的C99代码,并与原始二进制文件逐指令对比验证。该演示版包含完整服务器代码和数据,是研究早期MMORPG的重要资料。

文章总结

逆向工程1998年《网络创世纪》演示服务器

经过10年断断续续的工作,我完成了对1998年《网络创世纪》(Ultima Online)演示服务器的完整逆向工程,并将成果发布在GitHub上。该项目包含约5000个从MSVC x86反汇编并转换为可移植C99代码的函数,每个函数都与原始二进制文件进行逐指令比对。

项目背景

《网络创世纪》是1997年由Origin Systems公司开发的MMORPG游戏,作为首批商业成功的多人在线角色扮演游戏之一。1998年10月发布的资料片《第二纪元》附带了一个独立演示版(UoDemo.exe),其中包含了完整的服务器代码和数据。

这个演示版虽然移除了部分功能并将可玩地图缩小至Ocllo岛,但其余代码都是1998年中期实际运营服务器的真实代码。演示版采用Microsoft Visual C++ 5.0编译,使用C++98标准之前的C++方言。

技术方法

  • 使用radare2进行反汇编
  • 通过带有C++符号的UO客户端实验性Linux版推导符号名称
  • 手工将每个函数转换为C99代码,保持相同的控制流、结构布局和分支
  • 通过重新反汇编C语言构建结果进行验证
  • 重点还原了类继承体系:CEntity→CResourceEntity→CItem→CContainer→CMobile→CPlayer

重要发现

  1. 修复了原始代码中的稳定性问题(崩溃、溢出、未初始化变量等)和游戏性问题
  2. 恢复了演示版中被禁用的功能,如生成系统和衰变系统
  3. 意外发现著名的生态系统的代码仍然存在,虽然相关函数未被调用
  4. 添加了1999年官方加入的新技能支持
  5. 重新实现了账户系统
  6. 扩展支持从1.25.30到5.0.9.1的所有客户端版本
  7. 默认构建目标改为64位,同时保持与32位原始二进制兼容

项目还包含完整的工具套件,用于操作服务器数据格式,并重建了游戏中缺失的门、标志、装饰品等内容。

作者呼吁《网络创世纪》社区提供1997-2003年间的原始服务器文件(如dynamic0.mul、regions.txt等),以帮助更准确地重现游戏世界内容。

该项目代码和资源已开源,并设有测试中心供用户体验这个高度还原的1998年《网络创世纪》服务器。

评论总结

《网络创世纪》(Ultima Online)相关评论总结:

  1. 怀旧与情感共鸣

    • 多位用户表达了对UO的美好回忆,认为其游戏机制和社区氛围独特
    • "sooo many memories...was there ever a working port of the client for OSX ?" (snickmy)
    • "The human engagement was more genuine...than current MMORPGs" (klvino)
  2. 游戏设计赞赏

    • 用户称赞UO的开放式游戏机制和经济系统优于现代3D MMO
    • "never seen an online game capture so many emergent gameplay mechanics" (kev009)
    • "very harsh in comparison to today's MMOs...can lose your stuff" (helloplanets)
  3. 技术影响

    • UO启发了许多人的编程兴趣,包括网络编程和脚本编写
    • "got me into network programming" (kev009)
    • "first real programming achievement was building a website for UO shard" (curioussquirrel)
  4. MOD与模拟器社区

    • 活跃的第三方服务器和MOD开发社区持续存在
    • "UO Outlands...2500+ players logged in" (helloplanets)
    • "enjoyed scripting for TazUO game client in Python" (IChrisI)
  5. 历史保护价值

    • 用户肯定协议考古和游戏历史保护工作的意义
    • "protocol archaeology is half software history" (shutterkiller)
    • 寻找原始游戏文件的呼吁显示出历史复原需求(raymond_goo)
  6. 系列作品评价

    • 对Ultima系列不同作品的比较和评价
    • "Ultima 7 most praised but combat was easier in 6" (shevy-java)
    • 希望看到Ultima 4移动重制版的请求(IG_Semmelweiss)
  7. AI工具应用

    • LLM在代码反编译项目中的实用价值
    • "insane how useful LLMs are for decompilation" (skerit)
  8. 开发精神赞赏

    • 对长期项目坚持的敬意
    • "10 years of on-and-off work...truly honorable perseverance" (ckbkr10)

注:所有评论均无评分数据,故未包含认可度分析。原始评论保留中英文关键引用,不同观点保持平衡呈现。