塞尔达传说:时之笛速通者如何以令人难以置信的新方式打破 N64

ReSpec 通常是一个关于精彩的 PC 游戏技术世界的专栏,但偶尔也会有一些好得让人无法拒绝的话题。塞尔达传说:时之笛被公认为有史以来最好的任天堂 64 游戏之一,虽然它不是 PC 游戏,但该游戏的最高级别、最技术性的速通揭示了游戏在基本层面上的运作方式。更重要的是,这些令人难以置信的壮举只有通过社区的大量努力才能实现。

时之笛是一款普通玩家需要大约 30 小时才能通关的游戏;目标是尽可能快地玩游戏的最熟练的速通者可以在大约 3 小时 40 分钟内顺利通关。但是游戏的 Any% 类别(无论使用何种方法都要求玩家完成游戏)缩短到 3 分 54 秒 566 毫秒。是的,这些毫秒很重要。第二名的记录保持者与世界纪录的差距不到一秒。

Nintendo 64 的时之笛游戏。

即使拥有如此非凡的壮举,这并不是时之笛速通的全部内容。在每半年举办一次的慈善速跑马拉松 Summer Games Done Quick 2022 上,有一个展示突出了一群速跑者对游戏进行即时重新编程以显示新图形、播放新音乐,甚至运行 Twitch 聊天覆盖。所有这些都是在没有预编程的情况下在游戏的库存副本上完成的。

时之笛速通社区继续以看似不可能的方式打破游戏。我联系了社区中的两位领军人物,想了解是什么让经典的 Nintendo 64 游戏成功,而这一切都归结为一个漏洞:任意代码执行。

远非任意

任天堂 64 控制台和游戏。
罗伯泰克/Shutterstock

任意代码执行(Arbitrary Code Execution,简称 ACE)听起来比实际情况要可怕得多。这是网络安全中的一个术语,基本上意味着运行不应该运行的代码(或程序)。在 Any% 类别中保持第二名记录的时之笛速通手 dannyb 就是这样描述时之笛中的 ACE 的:内存中的一堆数据来模仿游戏代码,然后操纵游戏希望运行代码的位置成为我们刚刚进行该安排的位置。”

dannyb 说,通过正确的操作,玩家能够“基本上在游戏中运行我们喜欢的任何代码,并让游戏做一些它没有被编程做的事情。”这些操作包括看似无用的内容,例如您在开始游戏时输入的名称。这正是让时之笛如此迅速被打败的动作。

在像时之笛这样的游戏中,游戏会检查其内存是否满足特定要求才能通关。 Any% speedrun 的目标是重新排列内存以查看您角色的名称,而不是通常查找的位置。这称为 Stale Reference Manipulation 或 SRM,dannyb 表示,该漏洞利用是破解时之笛speedruns 的主要方式。

“任何视频游戏中的 ACE 总是需要这两件事:对某些内存区域进行微调控制,以便玩家可以使那里的数据模仿代码,以及将代码执行位置更改为自定义代码所在位置的能力谎言。 2019 年,在 OoT 中发现了一个名为 Stale Reference Manipulation 的故障,这在很大程度上打开了第二个需求,”dannyb 说。

在正常的时之笛运行的情况下,看似随机的动作加起来会诱使游戏在不应该检查区域(例如您的角色的名字)时检查完成要求。这是一个分为两部分的过程。创建一个数据有效载荷,例如您角色的名字,并使用 SRM 操纵内存以指向该有效载荷。

即时黑客攻击

这就是 speedrunners 如何在短短几分钟内击败时之笛,但这并不能完全解释这个名字可爱的 Triforce% showcase 如何能够在没有任何内容的情况下为游戏添加新的纹理、模型、音乐、代码,甚至修改墨盒。 Savestate 是这个长达数年的项目的幕后主脑之一,他解释说,这一切都是为了让 Nintendo 64 控制台能够将控制器数据理解为游戏数据。

这是一个只有 TASBot 才有可能的展示,它能够以非人的速度执行输入。正如 Savestate 解释的那样,“我们修改了内存中的一条指令,以开始读取控制器数据作为 N64 指令。通常情况下,这会崩溃,但多亏了 TASBot,他能够模拟控制器并以非人的速度操纵它们,使其看起来像 N64 指令,这样游戏就可以将控制器数据作为一组预先确定的指令来执行。”

简而言之,Triforce% 展示使用的是 ACE 和 SRM,就像普通的时之笛速通一样,但它特别改变了 Nintendo 64 控制台理解指令的方式。通过该设置,跑步者只需通过控制器输入即可将他们想要的任何代码添加到游戏中。 Savestate 继续说道:“游戏卡带没有任何修改。为了将自定义数据放入内存,我们使用了一个小故障,允许我们在 TASBot 的帮助下开始添加和修改内存中的内容,同时仅通过其控制器端口与 N64 控制台连接。”

Nintendo 64 上的控制器端口。

这些漏洞也不是随机发现的。 Savestate 解释说,时之笛社区已经开发了工具来查看游戏中的记忆排列方式,以及模拟不同记忆排列的程序。像 Project64 这样的模拟器有很大帮助,允许运行者和工具开发人员逐步了解游戏如何执行代码。

时之笛是有史以来最具标志性的游戏之一,强大、专注的速通社区让这款游戏在最初发布后的几十年里不断发展壮大。诸如为最快的时之笛速度通关提供动力的漏洞利用通常与尽可能快地击败游戏相关的挑战变得微不足道,但它们也突出了令人难以置信的技术专长和社区努力,这些知识用于剖析和分析心爱的游戏。

根据 dannyb 的说法,社区也意识到了这种平衡:“OoT 的 Any% speedrun 类别是我们主要排行榜上唯一允许 ACE 作为完成目标的有效方式的类别。对于其他一切,我们禁止 ACE 以保持最初使这些类别栩栩如生的独特性。”

本文是ReSpec的一部分——这是一个正在进行的每两周一次的专栏,其中包括对 PC 游戏背后的技术的讨论、建议和深入报道。


Posted

in

by

Tags: