标签: 街机

在 Linux 上挂载 System357 硬盘

按:4月份的时候这篇文档的西班牙语版就已经出现在国外论坛上,但其实方法早就流传很多年了。 System357 硬盘比起家用 PS3 来说,省略了安装自制系统-导出 eid_root_key 的步骤,使用了同一套密钥组。这次的文章翻译会省略一部分提取 eid_root_key 的步骤。PS3 的系统研究,包括本文,都大量参考了 PSDev Wiki 的相关内容(https://www.psdevwiki.com/ps3/),在这里也一并感谢。

前言

本文主要描述的内容是将 System357/369 的硬盘挂载到 Linux 电脑中。在本翻译中,所有的操作环境是基于 Linux Mint 20.1 x64 的 Cinnamon desktop 标准版进行的。对于中国的用户来说,这个发行版镜像可以从境内镜像站快速获得:

https://mirrors.bfsu.edu.cn/linuxmint-cd/stable/20.1/linuxmint-20.1-cinnamon-64bit.iso

而在本文中,我们使用太鼓达人绿板(太鼓の達人 グリーンVer),S357C-11E,ST4100-1-NA-HDD0-A 作为解密源硬盘。

已知的研究已经对于 PS3内置硬盘(英文) 的加密情况有了大致的了解。每个家用版型号(即除所有街机基板型号)都有独有的一套密钥。在解密后,PS3 的系统有特有的分区表,以及在某些型号上高达10个的分区。其实并不太需要知道所有分区的功能,只需要关注几个特定分区即可。比如说, dev_hdd0 是用户数据、系统分区、配置和 swap 区域,dev_flash2 是在一些有 NOR flash 的型号上保存终端和其登录用户数据的区域。

上图是 PS3 硬盘逻辑分区布局图,可以在下面的链接查看原文
https://www.psdevwiki.com/ps3/Talk:Harddrive

开工前的准备工作

1)首先,安装(我推荐安装,因为大陆众所周知的原因,部署编译环境非常蛋疼)或以 LiveCD 的模式启动 Linux Mint ,在用户(本文默认为 woodu)目录下创建如下目录:

/home/woodu/ps3
/home/woodu/ps3/dev_hdd0
/home/woodu/ps3/dev_hdd1
/home/woodu/ps3/dev_hdd2
/home/woodu/ps3/dev_flash1
/home/woodu/ps3/dev_flash2
/home/woodu/ps3/dev_flash3

2)下载 PS3 HDD Keygen.sh 脚本并解压到 /home/woodu/ps3 执行或从这里手动从hex值生成 ata_key.binflash_key.bin,这些key 就是解开 ps3 硬盘的加密的密钥。

灵魂的5

3)安装必须的编译工具(apt install build-essential gcc linux内核header 等),并下载 bswap16.ko 的压缩包(此压缩包包含了针对 4.15.0-54-generic kernel in Linux Mint 19.2 的编译成品,在本文中将重新编译适合当前内核的版本)。

下载后直接进到 source 目录中,并 make 即可。之后将成品 bswap16.ko 也移动到 ps3 目录下。

获得素材:bswap16.ko

4)完成以上两步后,你的 ps3 目录应该是这样的,除 ata_key.binflash_key.bin 之外,其他的 key 可以帮你解开其他的分区,根据需要使用即可。

是这样的

开工

接下来需要在 Terminal(终端)里执行一系列指令,以正确的将硬盘挂载为可读写的分区。

为了防止将原版硬盘破坏,你可以使用 dd 命令或在 windows 下为硬盘制作整盘镜像,持有整盘镜像的你可以将它挂载为虚拟设备,比如使用下面的指令把你放在 /path/to/your.img 的文件挂载到 /dev/loop1

losetup loop1 /path/to/your.img

相反,如果你胆子大(像我一样买了好几台357c),可以尝试直接用移动硬盘盒或直接连接 SATA 到设备上,此时,使用的设备盘符就是 /dev/sdx (取决于你的实际情况,你需要使用一些系统指令确定 x 在你电脑上的真实值)。

1)打开 Terminal 并 sudo su 进入 root 下,因为设备操作一直需要 root 权限。

2)安装在准备工作时编译的 bswap16.ko ,它承担了将 Big Endian 到 Little Endian 的转换工作。

insmod /home/woodu/ps3/bswap16.ko

3)将镜像/物理设备进行挂载。

使用镜像:

cryptsetup create -c bswap16-ecb -d /dev/zero ps3hdd-bs /dev/loop1

使用物理磁盘:

cryptsetup create -c bswap16-ecb -d /dev/zero ps3hdd-bs /dev/sdx

4)使用准备工作获得的 ata_key.bin 和 357 使用的对应算法进行解密挂载:

cryptsetup create -c aes-xts-plain64 -d /home/woodu/ps3/ata_key.bin -s 256 ps3hdd /dev/mapper/ps3hdd-bs

并识别它的分区:

kpartx -a /dev/mapper/ps3hdd

5)稍事休息,确认磁盘已经正确解密:

ls -la /dev/mapper/

如果正确的话,应该可以看到 ps3hdd ps3hdd1 ps3hdd2 ps3hdd3 等一系列分区,分别指向 /dev/dm-* 。

其中 ps3hdd1 VFLASH ps3hdd2 dev_hdd0 ps3hdd3 dev_hdd1

6)继续挂载 VFLASH 吧。 VFLASH 是在第一层加密后又有第二层加密的双层结构,所以要把刚刚解密的指令再来一次。先挂载 VFLASH 容器:

cryptsetup create -c aes-xts-plain64 -d /home/woodu/ps3/vflash_key.bin -s 256 -p 8 ps3vflash /dev/mapper/ps3hdd1

并分区:

kpartx -a /dev/mapper/ps3vflash

7)上面的这一切都做完以后,应该就可以映射分区了。

首先,挂载主分区(如果需要写入的话,你需要安装可写 ufs2 的内核模块,并把指令里面的 ro 替换为 rw):

mount -t ufs -o ufstype=ufs2,ro /dev/mapper/ps3hdd2 /home/woodu/ps3/dev_hdd0

接下来是一些 FAT12 FAT16 FAT32 的分区,这些分区系统会自动识别,但自动挂载的分区可能会有问题,因此还是建议通过命令行手动挂载:

mount -t vfat /dev/mapper/ps3hdd3 /home/woodu/ps3/dev_hdd1
mount -t vfat /dev/mapper/ps3vflash2 /home/woodu/ps3/dev_flash1
mount -t vfat /dev/mapper/ps3vflash3 /home/woodu/ps3/dev_flash2
mount -t vfat /dev/mapper/ps3vflash4 /home/woodu/ps3/dev_flash3

有一些尺寸上的注意:dev_flash1 往往大概 200Mb 左右大,dev_flash2 往往在16Mb 左右, dev_flash3 往往只有约 512Kb

8)全部做完之后,就可以在系统里确认整个硬盘的挂载情况了。

lsblk -b /dev/sdx

9)挂载完毕之后,就获得了对 System357 硬盘的完全控制权。但请注意,千万不要修改对于此硬盘的任何权限和所有者的信息。如果要修改数据,请使用 root 用户,但你可以在普通用户的文件管理器内经过授权后浏览文件。

10)请记得,浏览/使用结束后卸载掉分区,尤其是你修改了内容的情况下。

umount -l /home/woodu/ps3/dev_hdd0
umount -l /home/woodu/ps3/dev_hdd1
umount -l /home/woodu/ps3/dev_flash1
umount -l /home/woodu/ps3/dev_flash2
umount -l /home/woodu/ps3/dev_flash3
kpartx -d /dev/mapper/ps3vflash && cryptsetup remove ps3vflash
kpartx -d /dev/mapper/ps3hdd && cryptsetup remove ps3hdd
cryptsetup remove ps3hdd-bs

常见问题(略)

我看了眼,感觉没什么特别的。

主要是如果需要确认是否解密成功(每一个调用 cryptsetup 的地方),需要看下已挂载节点的内容是否大部分填0,填0就问题不大。

致谢

感谢 graf_chokolo 在 PS3 逆向工程中卓有成效的贡献,并提供了 Linux 上的支持,没有他,kpartx 就不能支持 PS3 的分区表。

感谢 3141card 对于 PS3 硬盘的加密算法和读取方式的研究。

感谢 guerrini97 修复了作者原来旧脚本中的问题,并重构了 bswap16 模块,并为 nbd-client 提供能力。

感谢 Decaf Code 重构 bswap16 模块并兼容现有内核。

感谢 einsteinx2 指引解锁了 PS3 硬盘的 8% 空间,并为本文提供灵感。

感谢 Yugonibblit dump了 CECHG01 型号的分区表,并确认了该型号及衍生型号的加解密钥和对应算法。

感谢 mlody95pl 指出了本文的错误并编译了 UFS 模块。

后记

从我获得太鼓旧框开始的 2020 年下半年,真的是太精彩了,尤其是太鼓达人在中国国内的圈子里。现在,虹版在中国的代理也已经有官方暗示了,而官方框体也通过各种形式进到了国内。希望中国的太鼓达人有个美好的明天。

2019中国(北京)国际游乐设施设备博览会游记

中国国际展览中心顺义新馆,周围很空旷

音乐游戏

很久没有正经关注过街机行业的发展了。今年以来,大部分国内街机音游玩家关注的一些新的街机被逐步的引入国内。如去年下半年引入的 KONAMI 的 Dancerush Stardom (国内称为 舞律炫步),和 Sound Voltex 初代(国内称为 音律炫动)。这两个海外非常流行的音乐机台都是由 广东世宇科技股份有限公司 代理的。另一方面,华立科技也不甘落后,拿下了 taito 的 Groove Coaster 4 的代理。

这并不意味着太多的国内街机音乐游戏的改善。以 Sound Voltex (SDVX)来说,国内引进的版本是初代,而在这之前国内玩家或盗版商群体的自制版本已经到了第四代甚至最新代。另一方面,微博谣传华立也顺路代理了 maimai DX (下一代 maimai)的消息也让很多人误会至今。

谣传。

新机台的引进当然是值得开心的事情,但这些并不能彻底解决海外也在面临的压榨游戏厅生存空间的问题:机台涨价,但单次游戏价格非常有限。在这个问题上,国内的代理商和街机厂商也做了一些新的尝试。

以 DanceRush Stardom (DRS) 为例,中国版的机台是内置 4G 数据连接的,机台本身的网络并不需要游戏厅的网络支持,网络的服务费用也是完全从玩家侧收取。

具体的方案在这篇文章:
https://blog.samnya.cn/dance-rush-stardom-in-china/

中有所描述,简单来说就是在玩家投币游戏(付费给游戏厅支付机台租赁费用)之外,结合每次额外付费和包月额外付费(直接在游戏厅范围之外,比如微信平台)的模式,来为玩家提供额外的游戏体验。而在港澳台和国外的大部分地区,游戏机的投币收入是游戏厅和厂家共同分享的,所以海外玩家在正常支付机台租赁费用后,即可直接体验这些额外的体验内容。

国内的这种模式综合考虑了国内网络环境复杂但 4G 覆盖相对较好,以及游戏厅不接受分成模式这两个问题,我觉得是一种很棒的创新。但是也要注意到,高昂的价格也让不少玩家特别是出勤频率没有那么高的中、轻度玩家感到非常不适。

除了内忧,其实还有外患。比如在 DRS 稼动但没有进入国内的大半年里(2018.3 ~ 2018.11),国内一些善于模仿海外成熟产品的厂家也开发了一些游戏方法几乎一致的仿制品,价格也更低廉一些。比如这次在展会上看到的某厂家(毕竟不光彩就不点名了)的荧光舞动。

某英文名S开头的番禺厂家的 DRS 仿制品

这个机台我也有进行体验,判定和延迟都有较大问题,而且动画也不太连贯。但是在硬件上,都采用了近似外观和红外判定框体+Intel Realsense识别模块+LED地板这样的配置。硬件上的缺陷我们可以靠花钱买到,但真正做出一个好玩的“游戏”,只能说国内厂家真的要考虑自己的战略了。

说真的,在这种大型展会上可以同时看到仿品和本家,两家相距不过几个摊位,真是特别的让人觉得讽刺。

其实中国厂商仿制日本街机也不是没有先例,在这里也想请番禺这家厂商看一下, IGS 的 Dance Base 是怎样对 konami 已经停产的 Dance Evolution Arcade 进行思考和再创作的。

掌握了方法论,才是制胜的关键。

体感游戏

街机(Arcade)当然不止包括大型电玩。很多娱乐场景,比如公园或游乐场,里面的大型器械,其实也算作街机的一部分。在这次展会上我也看到了很多体感类型的游戏,比如在小时候公园里见到的可以模仿你说话或者动作的设备的升级版。

这是一款由哈工文旅开发的“部落酋长”机器人。通过腹部嵌入的微软 Kinect 2.0摄像头,可以识别出你做的动作,并给出具体的反应。

微软已经官方宣布停止对 Kinect 进行支持接近两年的时间了( The Kinect sensor and Kinect Adapter ceased manufacturing in November 2017. Microsoft no longer carries inventory of the Kinect Adapter. Customers can check other retail stores for adapter availability. An offer for people with a Kinect sensor upgrading from Xbox One ended in March 2017.
),但依然有大批的设备使用 Kinect 来进行开发。这使得后续的维护和升级都会产生很大的麻烦。但如果这些厂商只是抱着干一票就走的目的来做这些的话,倒也不是不能理解为什么他们这么大批量的使用这种停产设备了。

VR游戏也算是体感的一种。让我觉得有点意思的是这个 VR 赛车。

刨除掉硬蹭热点的港珠澳大桥,这个设计还是很有意思的:玩家坐在一块荧幕前操作方向盘,看上去和普通的赛车游戏无异,但却可以通过方向盘控制前面沙盘下面的车辆进行实际赛车游戏。这种沉浸感和旁人的观赏感觉自然是比软件绘制出来的比赛场景更好。稍微查阅了一下资料,这套设备的底层是成熟的图传方案,总体来说给人的感受还是很新奇,很好玩的。

Amimon Connex Prosight HD 淘宝有售

而另外的一些 VR 街机就显得没那么厚道了。比如我在很多家前都见到的 Beat Saber Arcade。

其实 Beat Saber 这个 Steam 上的 VR 游戏根本没有街机版。国内的不少厂家用几个音响包裹上一块屏幕,然后加个投币器和 Steam 的简易包装,外面再不加保护地嵌入 HTC Vive 套件,就组成了一个售价高达几万元的“VR 街机”。这种街机其实完全不符合 Arcade 的定义。其中最重要的一点就是 Vive 作为一个家用设备,它的线材强度完全不能达到商用的标准,意味着就需要一个服务员在旁边时刻看守。

失去了无人值守的街机,会让成本进一步扩大。想了一下不光是中国,去年在日本看到的 VR Zone 也是有人值守的,到了晚上这样的休息时间,整个区域就只能歇业。这对于依靠长时间营业扩大人群覆盖进而提高收入的街机行业来说,是很可怕的事情,因为它带来了大量的设备空置时间。

灯光展

除去器械,NEC 也带来了他们的灯光展设备。恰逢故宫灯光秀过去没多久,之前微博上就因为故宫的灯光秀过于浮夸,没有内涵引起了巨大的讨论。 NEC 作为老牌的投影设备厂家,也带来了他们的灯光秀解决方案。

但我觉得,技术上暂时不足可以找买办,精神上不足的问题,可能需要进一步思考一下了。

总结

其实还是有一些细节能体现出北京并不是适合街机的地方的:比如华立科技的展位就几乎没有带什么机器来,又比如大部分的没有提到的摊贩甚至只是来卖掉自己库存机器的。但总体来说,还是有不少有意思的产品出现在了展会上。说心里话,我肯定是希望街机这个行业能越来越好。纵使大势所趋行业式微,我也希望两点和行业融合,能让这个行业走的更远更好。