« PlayStation 2硬件架构 (index)

PlayStation 2硬件架构

Chapter 10: 反盗版和自制游戏


目录

  1. DVD防拷
  2. 规避保护机制
    1. 攻击DVD光驱
      1. 自制芯片
      2. 作弊光盘
      3. 换盘
    2. 脱离改机芯片
    3. 独立溢出
    4. 签名漏洞
    5. 通用解决方案
  3. 后续开发

这里有很多东西要谈,我们先从DVD光驱开始,好吗?

DVD防拷

这个领域尤其令游戏工作室担忧,因为这款游戏机使用的是一种非常实惠的光盘格式来发布游戏。 因此,盗版风险很高。

Image
如果光驱有故障......或插入了盗版碟,则可能出现此错误屏幕

操作系统加载游戏时,会向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上运行任何类型自制软件的最安全、最受欢迎的方法。

后续开发

一旦运行自制软件的途径变得更容易获得,就会以完善以前的漏洞和开发自制应用程序的形式继续取得进展。 后者有些最终促进了与盗版相关的功能,但也扩展了操作系统的有限功能(例如为游戏提供补丁),我想这最终取决于用户的意图。

下面列举几个与自制软件相关的著名例子:

在以后的日子里,还会有新的发现:


Previous: 9. 游戏

Next: 11. 这就是全部了,伙计们。


Rodrigo Copetti © 2026 RSS Feed

切换至现代版

主页 · 文章 · 支持 · 关于作者 · 关于此网站