如何破解Sega Dreamcast控制台复制保护


DOOM黑皮书 》发行后我去了日本度假,在那里我设法在东京秋叶原区Taito HEY游戏室的真实街机上玩Ikaruga。 这次经历再次激发了我对最新SEGA视频游戏机-Dreamcast的兴趣。

在网络上,您可以找到许多文档,这些文档极大地促进了问题的研究过程。 有两个极好的资源可以使任何人快速了解最新信息:一个很棒的Marcus Comstedt网站,其中描述了所有有关GPU寄存器的内容,还有Jockel 资源“让我们从头开始为Sega Dreamcast创建游戏

在研究汽车时,我发现了一个惊人的故事,内容是黑客如何迅速破解游戏副本的保护并破坏SEGA最新的硬件希望。

第一级保护:GD-ROM


在纸上,SEGA Dreamcast的复制保护看上去非常强大。 游戏是通过专用媒体GD-ROM交付的,只有SEGA才能制作。 GD代表“ Gigabyte Disc”(“千兆磁盘”),也就是说,其增加的记录密度提供了最大1 GB的容量,这比常规CD-ROM(700 MB)的容量要大得多。


图片

GD-ROM具有与CD-ROM相同的物理尺寸,但是在宏观层面上,它由肉眼可辨别的两个区域组成。

第一个(暗)区域是CD-ROM兼容的低密度区域,最多包含35 MB。 它包含一条语音轨道,提醒用户该光盘的内容用于SEGA Dreamcast,而不用于CD播放器[1] 。 此外,开发人员在其中添加了一条曲目,其中包含文本文件(例如版权信息),有时还包含促销材料(例如游戏中的艺术品)。

高密度区域(灯光)最多可存储984 MB [2],并且游戏的所有内容都位于其上。

黑客似乎不可能将游戏从磁盘弹出并再次刻录以进行分发。

从GD-ROM引导:IP.BIN和1ST_READ.BIN


在讨论海盗如何设法复制游戏之前,我们需要了解加载顺序。 Dreamcast没有操作系统。 人们普遍误以为它使用Windows CE,但实际上,Microsoft OS只是Dreamcast开发人员可以连接使用DirectX,DirectInput和DirectSound的附加静态库[3] 。 在某些游戏中,使用了WinCE [4] ,但在大多数游戏中(例如,Ikaruga),并未使用它。 无论开发人员使用什么软件,具有完全连接的OS和Dreamcast的游戏始终以相同的方式启动。

在正常使用和在新激活的Dreamcast上启动官方游戏的过程中,启动了BOOTROM,并将引导程序从GD-ROM加载到RAM中。 这个小程序位于GD-ROM的最后一个磁道上,被社区称为“ IP.BIN”,显示了SEGA许可的屏幕,并执行了两个引导级别,用于设置硬件寄存器,创建CPU堆栈和初始化VBR [5]

更重要的是,IP.BIN包含游戏可执行文件的名称。 在GD-ROM文件系统中搜索了此名称,并将其加载到RAM中的0x8C010000,然后将程序传输到该位置。 通常,可执行文件名为“ 1ST_READ.BIN”。


CPU到达地址0x8C010000后,游戏将按预期方式启动。

第二级保护:加扰勒索软件


从理论上讲,黑客入侵的可能性是由于Dreamcast似乎不是从GD-ROM引导,而是从CD-ROM引导的能力。 最初,这种功能被称为“ MIL-CD”,旨在为音乐CD添加多媒体功能,但实际上没有使用,只有七个卡拉OK应用程序除外。

SEGA工程师了解,加载MIL-CD可用作攻击媒介,因此他们增加了保护。 当控制台识别出CD-ROM时,BOOTROM以通常的方式加载IP.BIN,但是乍一看就对1ST_READ.BIN进行了加密。 运行中的可执行文件变成混乱的哈希,导致控制台冻结。


从这个角度来看,控制台似乎受到了可靠的保护。 Dreamcast可以识别游戏的盗版副本,在下载过程中破坏可执行文件,并击败盗版者。

服务我的长剑!


到了1999年底,Utopia黑客小组盗窃了Katana SDK(用于Dreamcast的官方Sega SDK)后,文件损坏的问题得到了解决[6] 。 事实证明,加扰器仅是“通过隐蔽性进行安全”原则的实施。 该SDK包含一个反向加扰器,它将正确的可执行文件转换为“向后哈希”,当从CD-ROM引导时使用Dreamcast控制台加载和加扰后,该可执行文件又成为可执行文件。


用其GD-ROM检索游戏


被盗的SDK是所有需要的海盗。 由于能够在计算机上运行代码,Dreamcast现在可以用作游戏机,而不能用作GD-ROM驱动器。 SDK [7]中的“编码器电缆”使将控制台连接到PC并建立物理连接成为可能。 为了使控制台转储GD轨道的内容,编写了一个特殊的可执行文件。 然后将其重新加密并刻录到CD-ROM中,以通过控制台的串行端口输出所有1 GB的数据。 这是一个容易出错的过程,最多需要18个小时[8] [9] 。 结果以特殊创建的“ .gdi”格式保存。

  ikaruga.gdi 153字节
 track01.bin 13982640字节
 track02.raw 2,088,576字节
 track03.bin 1185760800字节 

一个有趣的事实 :您可以看到,如上所述,数据总量不是1 GB,而是1.2 GB。 这是因为2352字节的GD-ROM扇区遵循Red Book格式,该格式使用12字节进行同步,4字节用于标头,2048字节用于有效负载,以及288字节用于错误检测代码/纠错代码[10 ]

  $ cat ikaruga.gdi 
 3
 1 0 4 2352 track01.bin 0
 2 5945 0 2352 track02.raw 0
 3 45000 4 2352 track03.bin 0 

如何将1000 MB的GD-ROM装入700 MB的CD-ROM


为了使游戏适合700 MB的CD-ROM,重新设计了游戏资源。 GD-ROM中使用的ISO-9660文件系统使更改视频和音乐的离散化以及完全删除它们变得容易。 但是,对于大多数游戏来说,不需要这么复杂的过程,因为它们并没有占据整个1 GB。 例如,Treasure的Ikaruga仅占用了150 MB,并且其大部分内容都填充了零。 在这种情况下,仅编辑填充数据就足够了。

实际上,ISO-9660是一种众所周知的格式,甚至编写Python脚本(例如gditools.py )来研究 .gdi档案内容。

包装与配送


该过程的最后两个阶段是反向加扰1ST_READ.BIN并将所有信息打包到.cdi存档中,以便DiscJuggler可以将映像刻录到CD-R。 无需修改芯片,任何香草Dreamcast上获得的结果都不会出现问题。

SEGA的反应和后果


SEGA迅速发布了第二版DC控制台,其中完全禁用了MIL-CD,但是损坏已经造成。 在收入灾难性的下降和竞争性PS2的发布之后,开发人员放弃了Dreamcast,而SEGA则放弃了设备开发,而完全专注于创建软件。

参考文献


[1]来源: SEGA GD Workshop
[2]资料来源: segaretro.org:GD-ROM
[3]资料来源: 微软宣布推出Windows CE Toolkit for Dreamcast
[4]资料来源: 使用Windows CE的Dreamcast游戏
[5]来源: IP.BIN和1ST_READ.BIN
[6]资料来源: 让我们从头开始构建Sega Dreamcast游戏
[7]来源: PC串行适配器
[8]资料来源: 更准确,更深入地了解Dreamcast的安全性
[9]资料来源: 最后使用DC的宽带连接器设计了更快的方法
[10]来源: Dreamcast神话:GD-ROM存储容量

Source: https://habr.com/ru/post/zh-CN433072/


All Articles