两台主机、两个远程控制盒、一个会压电源的开关
2026 年 10 月 18 日,开发者 pepsipu 公布了 ns2jb:任天堂 Switch 2 当前最新固件 23.0.1 上的第一个纯软件越狱。不用拆机,不用焊接,不碰芯片,机器从开机到被拿下的整个过程都发生在软件层。跑在越狱环境里的代码,能以系统模块的身份运行自编程序,改游戏、备份存档、直接访问大部分硬件外设。
真正让人坐不住的,是拿下它的方式。整个逆向过程由 OpenAI 的 Codex 代理完成,而给 Codex 当「手」的,是一套用消费级设备搭出来的自动化环路。
图:逆向环路实物——Switch 1 与 Switch 2 并排,两个 JetKVM 负责收发画面与手柄输入,旁边是改装的蓝牙拨杆开关。来源:pepsipu 博客
死机了,开关负责按电源键
这套装置值得单独讲,因为它便宜到离谱:一台 Switch 1 加一台 Switch 2,两个 JetKVM——一种能远程发 USB 输入、回传 HDMI 画面的小盒子,再加一个亚马逊买的蓝牙开关改装件。
Switch 2 有个让逆向者头疼的设计:程序崩溃后不会自动重启,必须有人按一下电源键。以前这意味着研究者得坐在机器旁边,跑一次实验、按一次键、等一次开机。装上蓝牙开关后,这活交给了机械结构——拨杆落下时压住电源键,压到位之后剩下的扭矩把机构抬回去,相当于一根永不疲倦的手指。
于是整条流水线闭环了:Codex 看画面、发按键、跑测试,发现死机就触发开关重启,然后继续。作者给这套装置的图注里写着 set a goal to jailbreak the switch 2. make no mistakes——定个目标:越狱 Switch 2,不许出错。后来他自己在评论区补了一句实话:这只是随手写的图注,真正的越狱花了大约两周实打实的功夫。机器不眠不休地重复,人只负责搭好这个环。
浏览器那条路,走不通
Codex 先赌了一把顺手的路:通过自定义 Wi-Fi 强制门户,在 Switch 2 内置浏览器上加载一个 WebKit 的已知漏洞。从代理的记录看,它确实拿到了原生控制流劫持——程序计数器已经落进了攻击者手里。
但任天堂在 Switch 2 上堆满了现代防御:XOM(只执行内存)让代码段不可写,PAC 给指针签名,CFI 限制跳转目标。劫持了控制流,却泛化不出任意的系统调用。这条路走到一半被放弃。
图:Codex 报告用 WebKit n-day 拿到原生控制流劫持的截图,攻击停在了这一步。来源:pepsipu 博客
换一台主机,结果可能不同——但这是另一台机器的故事了。
漏洞藏在一个 BASIC 解释器里
真正的突破口在 Switch 1 这边。Switch 1 不支持 PAC,根信任早已被社区拿下,游戏代码可以解密出来慢慢读。Codex 挑中的目标是 SmileBASIC——一款让玩家用 BASIC 语言写小游戏的作品。
漏洞出在删除数组元素的地方:程序检查 position + count 是否超出数组长度,但这个 32 位整数的求和可以回绕成负数,检查就这么绕过去了。随后的内存搬移按 (length - position) * 8 字节执行,越界搬运就此成立。教科书级的整数溢出,藏在一家游戏公司发售多年的商业作品里。
由于两代主机共享部分底层架构,从 Switch 1 的立足点推进到 Switch 2 的执行权限,剩余的路就被打通了。
改马里奥赛车纯属为了好玩
越狱的演示环节相当欢乐:Codex 动了 Switch 2 独占游戏《马力欧卡丁车 世界》,往赛车里塞进一堆自制角色——三丽鸥的大耳狗、电锯人里的蕾塞、《我的世界》的 Steve、《绝命毒师》的 Walter White、初音未来,一个不落。
图:加进自制角色后的 Mario Kart World 结算画面,Walter White 和初音未来同场竞技。来源:pepsipu 博客
作者特意注明:改马力欧卡丁车这部分是纯「凭感觉写代码」,一天做完,纯粹为了好玩;越狱本体没有半点凑合。评论区里,同好纷纷晒出类似的装置——有人用采集卡加智能插座让 Claude 把游戏移植到 DOS,有人用两个 ESP 芯片加舵机压 x86 板子的复位开关。共同的结论是:这种环路最大的好处,可以并行、可以 24 小时跑。
卡点从来不在智力上
回到那台压电源键的蓝牙开关。硬件逆向长期卡住的地方,往往是无数次「跑一遍、死机、重启、再跑一遍」的机械重复。摄像头、采集卡和继电器把这几件事接管之后,逆向从人力问题变成了吞吐问题——人搭环路,机器负责重复,两周的成果里装着过去一个人几个月的试错量。
任天堂不会没有反应。作者在脚注里猜测了下一步:如果任天堂只把游戏代码以加密形式交给内核解密,用户态里就再也没有可执行映射,连加载器都得向更高权限层要代码——代价是游戏无法在运行时读自己。任天堂已经在砍动态代码特性,方向是一致的。
但这场对抗的底牌已经变了。以前防线只需熬过研究者的耐心,现在对方的耐心由继电器承担。下一个 23.0.1 出现时,按电源键的不会再是人。
参考链接:
- pepsipu 博客原文:ns2jb
- HN 讨论 (item?id=50192536)