让一颗1000次重复写入的EEPROM撑到最后,是这次破解能成立的关键。开发者DiscoStarslayer在Bluesky贴文中公开,他与协作者Libby找到的漏洞,终于把初代「胖」PlayStation 2负责光盘验证与大部分安全机制的SPC970 MechaCon芯片firmware完整读了出来——这是这颗芯片在2000年诞生后,第一次有人看到它里面的代码。
在此之前,有一群人花了大约四年时间,用更慢的方式硬剥芯片封装、直接读取内容,但只能拿到粗糙不完整的dump。Libby找到的漏洞换了一条路:先打开一个EEPROM设置写入流程,告诉芯片接下来要写入的数据区块数量是零,让芯片内部的计数器发生underflow;接着送出超过缓冲区容量的数据,让多出来的部分溢出到保存EEPROM写入任务的RAM区域,进而覆写该任务的来源地址,把它指向芯片自己的ROM。结果就是MechaCon误把自己的256字节firmware拷贝进EEPROM,之后PS2可以用标准指令把它读回来。重复这个过程大约1000次,完整256KB的firmware映像档才拼得出来,存进U盘。
问题是EEPROM没有wear leveling,写入寿命也远低于flash,每dump一次都在消耗它的寿命。dump工具因此会先备份EEPROM内容,事后逐字还原,并比对芯片开机时的checksum进程做确认。即便如此,Libby原始版本的dumper文档仍写明风险:这个过程可能让PS2「无法正常运作,或需要硬件层级的维修」,用户得自行承担。
22组映像档补上了MechaPwn漏掉的拼图 所有成果已经上传GitHub,包含22组firmware映像档,涵盖从2000年日本限定的SCPH-15000到2002年39000系列的胖PS2,另外也涵盖使用同一颗芯片的Namco System 246与256街机主板。2003年之后改用的「Dragon」版MechaCon芯片,其实早在2021年就已被读出,一个月后催生出让PS2解区、能读备份光盘的MechaPwn漏洞。但MechaPwn的README当时就写明,没有用上Dragon芯片的早期机种不支持、也不计划支持——这影响了2000到2003年之间大约20个型号。这些早期机器虽然还能靠记忆卡与硬盘漏洞跑备份,但芯片层级始终无法解锁,因为没有人看得到它的代码,直到现在。
由于PS2的游戏光盘本身没有加密,这次的firmware dump不会让任何东西「被解锁」用于破解游戏。它真正曝光的是Sony「MagicGate」记忆卡加密机制的代码,以及KELF这种PS2用来从光盘与记忆卡开机的可可执行文件格式背后的逻辑。贡献者uyjulian表示,这些信息未来有机会喂进「完整系统层级的low-level模拟」。目前PCSX2等模拟器并不会真的运行MechaCon的代码,而是用C++重新实作它的指令集,再读取一个1KB的NVRAM文件与四字节版本号当替身数据。DiscoStarslayer自己维护一个名为Reliquary的PCSX2分支,专攻PS2的验证流程,其README也承认,当安全检查需要比对主机身分时,产生出来的替身数据无法取代真正的硬件数值。
下一步的目标,照uyjulian的说法,是找出类似MechaPwn那种能解锁SPC970的漏洞,但进度不会像Dragon芯片那么快。当年研究者只花一个月就攻破Dragon,是因为Sony把它设计成可以接受firmware更新,等于留了一个可以被找到的弱点。SPC970完全不是这样——它的代码在2000年就烧进mask ROM,此后从未更动过,也就没有同样的更新机制可以下手。