返回

文章详情

展示HN:自动检测和修复Sierra游戏中的僵尸状态

Hacker News2026年8月19日 01:58

Sierra软锁死分析器:30年前的冒险游戏的静态分析。该工具反编译Sierra SCI游戏,将反编译的脚本抽象解释为守护房间转换、物品移动和情节标志写入的图形,找到软锁死状态——游戏仍然接受输入但胜利已经悄然变得不可能的状态——并推导、验证、编译并安装防止它们的保护。没有任何标题被声明:起始房间、胜利房间、死亡信号和调试标志都是从游戏自己的代码中发现的。与LucasArts的游戏不同,Sierra的游戏允许玩家卡住。在洛杉矶忘记防晒霜,登船后,你在几天后死在没有回程的木筏上。这个工具可以自动发现这些陷阱,并阻止导致它们的过闸——在最后一刻,你仍然可以遵守。已经分析和测试过四款游戏——《休闲西装拉里2》(SCI0,1988)、《国王的任务IV》(SCI0,1988)、《国王的任务VI》(SCI1.1,1992)和《劳拉·博2》(SCI1.1,1992)——同样的引擎,没有特定于游戏的分析代码。演示《国王的任务IV》,已修补——鲸鱼、夜钟和七个漂流物品,全部被保护:三十秒版本 从《休闲西装拉里2》真实运行的缩写(python3 -m pipeline <game>):[2] 分析锚点:起始rm11,胜利 [86](发现)死亡信号:global101 == 1001,调试全局:[14,100](推导)101个房间,27个强连通分量,40个限制寄存器软锁死:15个物品+ 1个不相交组 - 防晒霜 ... [3] 推导 rm38 -> rm131: (and (gEgo has: 11) (gEgo has: 12) (gEgo has: 14) (gEgo has: 15)) rm57 -> rm58: (and (gEgo has: 21) (gEgo has: 24) (gEgo has: 25) (gEgo has: 26)) rm79 -> rm80: (or (gEgo has: 30) (gEgo has: 31)) rm131 -> rm138: (not (gEgo has: 13)) rm63: 删除`(gEgo put: 21 -1)`(头发复活剂)验证与保护模型一致... 修复15 + 1组;引入的新软锁死:无 [4] 补丁编译117/118脚本 script.000 主脚本 10790字节 script.057 rm57 2938字节 ... 完成。构建/补丁下的10个补丁文件 分析器发现登船是单向过闸,推导出哪些物品必须和你一起过关,重新验证保护模型以证明保护不会引入新的软锁死,并将修改过的脚本重新编译成Sierra自己的松散补丁格式。注意 rm131 -> rm138: (not (gEgo has: 13))。保护也携带负文字:在rm138中携带菠菜蘸酱是致命的,因此修复是在你仍然可以抛弃它时拒绝过关——放置在你仍然可以将它扔到海里的地方,因为要求你放掉你不能再放掉的东西就是一堵墙,而这个项目将其视为比漏洞更糟的事情。管道如果保护验证失败,或者编辑的脚本无法编译,将拒绝发出任何内容。修补后的游戏正常播放——修补机制是Sierra发布自己错误修复的方式,原版从未被修改(删除补丁文件以恢复)。你可以在游戏中设置保护行为:完全防止每一个危险行为;简化版防止一次,然后允许它有警告;关闭则关闭保护。什么算作软锁死?(或:警惕玩家)一些死亡是故意留下的——那些你仍然可以避免的。分析通过可到达性来区分无胜利状态和可避免的死亡,而不是死亡条件。在《休闲西装拉里2》中,未完全伪装走到KGB海滩会杀死你。部分伪装仅存在于游轮上,因此分析器拒绝让你在没有它们的情况下离开船。但其余部分可以在小岛上获得——从死亡发生的地方——因此这个死亡仍然保留:这是Sierra游戏暗示你需要做什么的方式。正如Al Lowe所说,“早存盘,勤存盘!” 状态 四款游戏完成,跨越引擎的两个主要时代(SCI0 1988→SCI1.1 1992),而每个标题都没有声明——起始房间、胜利房间、死亡信号和调试标志均从每款游戏自己的代码中推导。 游戏引擎状态备注 《休闲西装拉里2》(1988) SCI0 完成且测试 菠菜蘸酱:携带是致命的,因此保护是负文字,放置在仍可以抛弃它时 《国王的任务IV》(1988) SCI0 完成且测试 实时夜钟;鲸鱼——仅在可生存时武装的随机事件 《国王的任务VI》(1992) SCI1.1 完成且测试 两个结局路径大大复杂了分析;在必要物品到手之前保护婚礼的开始(计时器) 《劳拉·博2》(1992) SCI1.1 完成且测试 行动结构:情节时钟是寄存器,行动休止符是单向的,要求跟随行动翻转拦截器 《国王的任务V》(1990) SCI1-中间 进行中(kq5分支) 村庄市场:实现对商人的支付匹配以便每个人都能得到报酬——检测变成匹配问题 如何简要工作 反编译游戏二进制文件为类型控制流AST(JSON IR)。抽象解释该AST,将路径条件组合成游戏图:受保护的运动边、物品ac...

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡