首页 时政热点 科技头条 智能AI 安全攻防 数码硬件 开发者生态 归档 标签 关于

Show HN:自动检测并修补 Sierra 游戏中的行尸走肉状态

2026-08-19 1 阅读 约7分钟阅读 wkfauna
分享:
字号:
Sierra 软锁分析器 对 30 年历史的冒险游戏进行静态分析。该工具反编译 Sierra SCI 游戏,将反编译的脚本抽象解释为受保护的房间转换、物品移动和情节标记写入的图表,找到软锁(游戏仍然接受输入但胜利已悄然变得不可能的状态),并派生、验证、编译和安装阻止它们的守卫。任何标题都没有声明:开始房间、胜利房间、死亡信号和调试标志都是从游戏自己的代码中发现的。 Sierra 游戏与 LucasArts 的游戏不同,会让你陷入困境。在洛杉矶忘记涂防晒霜,登上游轮,几天后你就会死在木筏上,没有回头路。这会自动发现这些陷阱并阻止导致它们的交叉口——在最后一刻你仍然可以遵守。分析和测试了四款游戏 - Leisure Suit Larry 2 (SCI0, 1988)、King's Quest IV (SCI0, 1988)、King's Quest VI (SCI1.1, 1992) 和 Laura Bow 2 (SCI1.1, 1992) - 相同的引擎,没有特定于游戏的分析代码。演示《King's Quest IV》,已修补 - 鲸鱼、夜钟和七个搁浅物品,全部被看守:三十秒版本 摘自《Leisure Suit Larry 2》的实际运行( python3 -m pipeline ):[2] 分析锚点:启动 rm11,胜利 [86](发现)死亡信号:global101 == 1001,调试全局变量:[14, 100] (导出)101 个房间,27 个强连接组件,40 个门控寄存器软锁:15 个项目 + 1 个析取组 - 防晒霜 ... [3] 导出 rm38 -> rm131:(并且(gEgo 有:11)(gEgo 有:12)(gEgo 有:14)(gEgo 有:15))rm57 -> rm58:(和(gEgo有:21)(gEgo有:24)(gEgo有:25)(gEgo有:26))rm79 - > rm80:(或(gEgo有:30)(gEgo有:31))rm131 - > rm138:(不是(gEgo有:13))rm63:删除`(gEgo put: 21 -1)` (Hair_Rejuvenator) 针对受保护模型进行验证...固定 15 + 1 组;引入新软锁:无 [4] PATCH 编译的 117/118 脚本 script.000 主要 10790 字节 script.057 rm57 2938 字节 ... 完成。 build/patch 中的 10 个补丁文件分析器发现登船是单向交叉,导出哪些物品必须与你交叉,重新验证守卫模型以证明守卫没有引入新的软锁,并将触及的脚本重新编译为 Sierra 自己的松散补丁格式。注意 rm131 -> rm138: (不是 (gEgo has: 13)) 。守卫也带有负面文字:菠菜浸在 rm138 中是致命的,所以解决方法是在你还拥有它的时候拒绝穿越——放置在你仍然可以把它扔到海里的地方,因为要求你扔掉一些你不能再扔掉的东西是一堵墙,这个项目将其视为比 bug 更糟糕。如果守卫验证失败,或者它编辑的脚本无法编译,管道将拒绝发出任何内容。打过补丁的游戏可以正常玩——补丁机制是 Sierra 发布自己的错误修复的方式,并且原始游戏永远不会被修改(删除补丁文件以恢复)。您可以在游戏中设置守卫行为:全面阻止一切危险行为; Lite 会阻止它一次,然后允许它并发出警告; Off 关闭防护装置。什么算作软锁? (或:警告玩家)有些死亡是故意留下的——你仍然可以从你所在的地方避免这些死亡。该分析通过可达性而不是死亡条件来区分不可获胜的状态和可避免的死亡。在《休闲套装拉里 2》中,在没有完全伪装的情况下走上克格勃海滩会杀死你。有些伪装部件只存在于游轮上,因此分析器拒绝让您在没有它们的情况下离开船。但其余的事情都可以在岛上获得——从死亡发生的地方——这样死亡就会留在岛上:这就是塞拉利昂游戏暗示你需要做什么的方式。正如阿尔·洛所说,“尽早储蓄,经常储蓄!”状态 已完成四款游戏,跨越引擎的两个主要时代(SCI0 1988 → SCI1.1 1992),每个标题均未声明任何内容 - 起始房间、胜利房间、死亡信号和调试标志均源自每个游戏自己的代码。游戏引擎状态说明 Leisure Suit Larry 2 (1988) SCI0 完成并测试了 Spinach Dip: fatal to Carry ,因此守卫是一个负字面值,在您仍然可以抛弃它时放置 King's Quest IV (1988) SCI0 完成并测试了实时夜间时钟;鲸鱼——只有当生存能力达到国王密使VI (1992) SCI1.1 完成并测试两条结束路径时,才会通过武装它们来保护随机事件,从而使分析变得非常复杂;守护婚礼的开始(定时器)直到必要的物品到手 Laura Bow 2 (1992) SCI1.1 完成并测试了行为结构:情节时钟是一个寄存器,行为中断是单向的,要求乘坐行为翻转拦截器 King's Quest V (1990) SCI1-进行中(kq5分支)乡村市场:与商人匹配付款,以便每个人都可以得到报酬 - 检测成为一个匹配问题 它是如何工作的,简要反编译将游戏二进制文件转换为类型化控制流 AST (JSON IR)。抽象解释 AST,将路径条件组合成游戏图:受保护的运动边缘、项目 ac
这篇文章对您有帮助吗?

订阅66必读

每日精选科技资讯,直达你的邮箱