背离:暗黑破坏神逆向工程项目

图片

正如多年所显示的那样,我们几乎没有机会看到暗黑破坏神第一部分的原始源代码或至少进行了重制(为了纪念第一部分发行20周年,在暗黑破坏神III中发生的Tristram黑暗化事件当然是不错的,但还是有一点点不是粉丝所期望的)。 并且让该游戏的最新更新于2001年发布,而暴雪本身早就停止了支持和销售它-它的记忆仍然在我们的心中。 某个GalaXyHaXz再次证实了这一点,他决定对游戏进行逆向工程。

源代码可在Github上获得 。 Devilution项目的作者GalaXyHaXz将其称为“暗黑破坏神转移”,耗时1200小时,耗时4个月。 另外,不要错过作者在游戏源代码中的大量注释,这些注释位于另一个存储库中 。 到目前为止,代码本身似乎并不重要,但是随着游戏其他模块上工作的进行,它将继续保持顺序。

最初,对如此大的项目进行逆向工程的想法似乎是一项艰巨的任务,即使不是为了幸运的事故,换句话说,就是20年前发生的一次小疏忽。

1998年,暴雪将暗黑破坏神的源代码提供给了两个工作室:正在开发附加的Hellfire的Synergestic Software和在Playstation的端口上工作的Climax Studios。 这不是日本索尼质量检查部门第一次对泄漏感到“满意” ,他们这次也脱颖而出-在日文版端口中, 一个符号文件被意外地遗忘了,其中包括功能,数据,类型等等。 这使我们能够还原原始功能,全局变量,数据结构等。 Playstation端口的beta版本也泄漏了,它包含另一个相似的文件,从而大大简化了任务。

最重要的是,游戏PC版的调试版本始终直接放在游戏磁盘上,隐藏在存档DIABDAT.MPQ-> D1221A.MPQ-> DIABLO.EXE中。 该版本包含发行版本中不可用的调试工具,以及大量的行声明,因此可以重新创建文件名,函数-甚至代码的行号也尽可能接近原始版本。

暗黑破坏神的开发大约是在Windows 95发布时开始的,因此,该游戏为此进行了优化。 为了编译游戏,使用了Microsoft Visual C ++ 4.20, 在随后的补丁中将其更新为版本5.10 。 为了准确地重现原始代码,该项目保留了与这些版本的编译器的兼容性,但是Makefiles可用于现代编译器。 根据报告,编译产生的可执行二进制文件在Windows 7,Linux-WINE和Windows 10上运行。

一个众所周知的事实是,游戏在整个项目中都发生了重大变化,并且在发行前就切断了许多创意-并迅速添加了多人游戏。


许多游戏修改者(例如The Hell mod的作者)在代码研究方面已经走了很长一段路 ,包括通过实现过程内存来实现。 但是,他们没有发布工作结果,并且许多mod都已中途废弃。 如果可以将Devilution置于一定程度的准备状态,则可以避免类似的问题-并从游戏本身中学到一些新知识。

此刻,反向工程Diablo.exe。 还有一些库需要处理:Battle.snp(过时的Battle.Net协议),DiabloUI.dll(游戏的主菜单代码,完全基于Windows,且编写得不好),Standard.snp(本地多人游戏代码,已过时,类似于所使用的代码)在《星际争霸》中)和另外两个模块。

从理论上讲,在不久的将来(反转DiabloUI.dll之后 ),该游戏可以成为跨平台的游戏-除非当然,暴雪在作者吸引足够的爱好者解决这个问题之前就赶紧关闭商店。

PS对于暗黑破坏神II,一切还不太清楚:该游戏继续由暴雪出售和支持,其代码库约为原始代码的8倍,并且有传言称官方重新制作指日可待-因此其完全反向在可预见的将来进行工程设计无需等待。

Source: https://habr.com/ru/post/zh-CN414577/


All Articles