这里有很多东西要谈,我们先从DVD光驱开始,好吗?
DVD防拷
这个领域尤其令游戏工作室担忧,因为这款游戏机使用的是一种非常实惠的光盘格式来发布游戏。 因此,盗版风险很高。

如果光驱有故障......或插入了盗版碟,则可能出现此错误屏幕
操作系统加载游戏时,会向DVD光驱发送特定命令。 专门用于读取游戏内容的命令与标准DVD命令(即读取DVD电影)的行为截然不同。 原来,授权游戏在光盘内部包含一个无法读取的"映射文件",该文件按名称、位置和大小索引文件系统。 当DVD被要求读取游戏光盘时,它将始终使用映射文件在光盘中导航,这意味着不包含映射文件的盗版游戏将无法读取。
与此相辅相成的是锁区系统,该系统可防止进口游戏在不同地区的游戏机上运行。
规避保护机制
在解释了这款游戏机最关键的部分后,让我们来看看已发现(并商业化)的多种能攻破保护机制的方法。
攻击DVD光驱
PS2一上市,就出现了许多承诺"解锁"DVD光驱的第三方产品。 由于没有支持自制软件的迹象(Linux解决方案除外),盗版成为最大的受益者。
自制芯片
与同代(以及前代)其他使用光盘系统的游戏机一样,第三方公司对DVD子系统进行逆向工程也是迟早的事。 我们的目标是找到一个可用的漏洞,迫使驱动程序在文件系统中进行导航,而不需要一个无法访问的映射文件。
这最终以改机芯片的形式得以实现,同时也解除了防拷机制检查和锁区限制。
作弊光盘
除了需要焊接技术才能安装的改机芯片,市场上还出现了未经授权的"正版"光盘。 这些光盘对内核进行了修补,以移除区域保护并使用游戏内作弊器。
最重要的是,"作弊光盘"具有无需对游戏机进行任何修改的优点。 我想最值得一提的例子就是CodeBreaker。
换盘
在最新进展的过程中,又出现了另一种伎俩。 这一次,它利用了光驱对故障扇区的处理。 Swap Magic看起来像另一张"正版"光盘,但它的"游戏"是让DVD读取一个在刻意地故障的扇区上发现的不存在的可执行文件,从而完全停止光驱。 用户可以利用这个机会将光盘换成非正版光盘。 然后,仍在内存中加载的Swap Magic引导新光盘的主可执行文件,最后加载真正的游戏。 所有这些都是在光驱仍认为插入的是正版光盘的情况下进行的。
这并不一定需要改装游戏机。 不过,根据型号的不同,PS2的外壳需要做一些改动,以阻挡光驱的弹出感应器。 在某些型号中,在某些地方放置棉花片也是破解方法之一。
脱离改机芯片
随着时间的推移,人们收集并分享了更多关于这款游戏机的研究成果。 因此,新的、更复杂的发现引发了新一轮的开发浪潮,至少不再主要依赖外部硬件。 此外,盗版也不再是重点。 相反,在未经索尼批准的情况下运行第三方程序的能力(称为自制软件)迅速登上了目标排行榜的榜首。
独立溢出
PS2在记忆卡中存储了一个名为TITLE.DB的数据库文件,其中包含用于优化PS1游戏模拟的信息。 插入PS1游戏时,操作系统会获取数据库文件,并将整个文件加载到内存中的固定地址(第一击)。 信息解析器使用strncpy()函数实现,这是一个C语言函数,用于将字符串(字符链)从一个地方复制到另一个地方。
对于熟悉C语言的人来说,你可能已经猜到我要说什么了。 问题是strncpy()不知道字符串有多长,所以除非终止(在字符串链的末尾放置\0),否则复制将"永远"进行下去(结果难以预料!)。 幸运的是,该函数包含一个可选参数,用于指定要复制的最大字节数,从而防止缓冲区溢出。 虽然看起来有些可笑,但索尼并没有使用这个参数,尽管每个数据库条目都有256字节的固定大小(第二击)。
在RAM中仔细观察,TITLE.DB恰好被复制到一个保存寄存器$ra的旁边,该寄存器记录了当前函数执行完毕后的返回地址(第三击),这就是独立漏洞: 制作一个包含大量字符串的TITLE.DB,在其中嵌入一个可执行文件,并设计该字符串,这样$ra就会被覆盖,指向可执行文件。 如果你能将该文件上传到记忆卡(通过其他漏洞或PC USB适配器),你就能得到一个简单的自制软件启动器。
这一发现发表于2003年。 因此,随着薄型机的推出,索尼推出了新的BIOS ROM版本,对这一漏洞进行了修补。 令人奇怪的是,这并不是最后一次暴露出笨拙代码带来的失误。
签名漏洞
2007年11月,一个黑客组织开始销售Memor32,这只是另一种典型的第三方记忆卡,只是出于某种原因,它内置了个FPGA和USB端口。 直到一款名为Memento的固件出现在互联网论坛上,Memor32的真实面目才逐渐清晰:从记忆卡中运行未经授权的可执行文件,就像独立漏洞一样。
Memento的实现依赖于DVD播放器签名检查方式的缺陷。 人们发现,虽然二进制文件必须使用索尼公司的密钥签名,但二进制文件的完整性却没有得到检查。 因此,任何人都可以将可执行代码替换为其他代码(但仍可在相同的空间内执行),而操作系统会很乐意运行它。 Memento固件利用这一漏洞将其代码伪装在DVD播放器中,并捆绑了一些实用程序,允许用户加载游戏(从光驱或硬盘)。
然而,Memor32和Memento的流行很快就被免费(最初是开源)的替代品所取代:FreeMCBoot。
通用解决方案
Memento被逆向工程破解后,互联网上出现了一种不需要Memor32的替代品。 FreeMCBoot利用了相同的漏洞,但它可以安装在任何MagicGate记忆卡上。 唯一的缺点是仍需要另一个漏洞(如光盘交换)来引导安装程序。
有趣的是,FreeMCBoot的用户界面借用了OSDSYS的资产,从而为启动其他自制软件提供了一个熟悉的菜单。 它还对内核进行了修补,添加了访问USB 1.1端口中大容量存储设备的API,而这正是许多自制程序用来定位附加文件的地方。
此外,安装程序还提供了两个选项:只安装当前游戏机所需的文件,或安装适用于所有PS2变体的全局设置。 奇怪的是,后一个选项的实现却很有难度。 起初,安装程序会在记忆卡的分区表上做手脚,以避免空间耗尽,这并不是一件特别安全的事。
幸运的是,2011年,PlayStation 3的安全系统刚刚遭到破坏,暴露了许多隐藏在其中的秘密。 其中包括一组用于向后兼容PS2的全球MagicGate密钥。 从那时起,制作PS2可执行文件就不再需要使用有限的DVD二进制签名技巧了。 因此,自1.8b版以来,FreeMCBoot一直是在PlayStation 2上运行任何类型自制软件的最安全、最受欢迎的方法。
后续开发
一旦运行自制软件的途径变得更容易获得,就会以完善以前的漏洞和开发自制应用程序的形式继续取得进展。 后者有些最终促进了与盗版相关的功能,但也扩展了操作系统的有限功能(例如为游戏提供补丁),我想这最终取决于用户的意图。
下面列举几个与自制软件相关的著名例子:
- FreeHDBoot: FreeMCBoot的变种,安装在硬盘上,系统也会尝试从硬盘启动。
- 由ps2dev小组开发的ps2sdk: 事实上的非官方SDK,用于编写PS2自制程序而不会有侵犯版权的风险。 该项目可追溯到2000年,当时它仅以松散库的形式存在,用于访问特定组件,随着时间的推移,它被统一为一个单一的软件包,为自制软件开发者提供了便利。
- 多位作者开发的LaunchELF: 一个带有额外实用程序的文件管理器。 它后来以"uLaunchELF"和"wLaunchELF"的形式继续存在。
- Open USB Loader(OPL),由多位作者编写: 可从多种来源(HDD、USB、i.Link甚至以太网上的SMB和NMB)启动光盘映像,并具有打补丁功能。
- ffgriever的ESR: 该程序最初名为"Vast CDVDV",它能欺骗整个系统(包括DVD光驱),使其在不修改硬件的情况下运行游戏的刻录副本。 原始游戏内容必须打上补丁,伪装成DVD电影(这样DVD驱动器就不会拒绝接受它),而ESR则控制EE和IOP,将执行重定向到实际游戏。
在以后的日子里,还会有新的发现:
- krat0s的Fortuna:2019年发布的另一款自制软件启动器,依赖于一个完全不同的漏洞。 这次是保存管理器(
OSDSYS的一部分)图标解析器的缓冲区溢出。 它的主要优点是兼容后期的PS2机型,因为这些机型取消了对外部OSDSYS更新的支持(因此与FreeMCBoot不兼容)。 - alexparrado的OpenTuna: Fortuna的开源替代软件,源于对后者的逆向工程。
- cturt的FreeDVDBoot:2020年发布的新漏洞。 它包括DVD播放器中新的缓冲区溢出,可被利用执行任意代码。 用户只需使用FreeDVDBoot刻录DVD,就可以执行任何二进制文件,包括FreeMCBoot安装程序甚至 ESR(索尼非常幸运,因为它没有在多年前被发现! 其他公司也没有发现)。